2013-02-19 23 views
3

我們制定了一系列確定重複聯繫人記錄的業務規則,這些規則的基礎是圍繞首先檢查相同名稱,然後比較其他字段(如電話號碼,電子郵件,電話等檢查在T-SQL中比較兩個字符串的拼寫錯誤

問題是隻有一小部分記錄被捕獲和自動清理/合併。

要捕獲更多記錄,我想在聯繫人姓名中包含或檢查拼寫錯誤(例如Michael = Micheal)。

是否有一個很好的函數可以用來檢查拼寫錯誤,以便返回更準確的結果?我認爲一個函數可以查找比較兩個字符串的單個字符差異,

回答

4

請記住,大多數字符串相似性度量算法的計算量很大,並且根據手頭作業的數量,T-SQL在性能方面可能是一個糟糕的選擇。

代替串相似度測量的每本身,考慮散列函數,尤其在那些保存的話主要的「結構」。散列碼的優點是它們只需要計算一次,只使用一個字符串作爲輸入,然後可以在[TSQL]參考字符串)。一個似乎合理的哈希碼建議是SOUNDEX,它恰好特別適用於個人和公司名稱的典型變化,並且也作爲TSQL function「本地」實現。

爲name字段中的每個單詞計算soundex代碼可能更好一些,例如爲「Charles Darwin」輸入兩個代碼,爲「Jean Jacques Rousseau」等輸入兩個代碼,並提高性能,您可能需要找到一種區分姓氏和名字的方法,以方便您的過濾條件。

如果您更喜歡使用字符串相似性方法,我發現Levenstein distanceRatcliff/Oberhelp measure對於處理諸如拼寫錯誤等小差異很有效。與Soundex一樣,您可能仍然會考慮單獨處理單詞,然後引入處理給定名稱條目的多個值的難度,還允許更加主動地處理名稱的典型情況,其中一些實例是訂單名然後按相反的順序排列姓氏和其他實例(或由此省略或縮寫部分名稱)。

+0

我使用Levenstein距離對我很好。如果OP對它感興趣,我在C#中使用算法而不是TSQL。 – 2013-02-19 23:02:59