2016-05-16 123 views
1

我期待通過模糊匹配算法對C#中的記錄鏈接比較兩個數據元素或字段,並且我想確定哪種算法對每次比較都是最佳的。使用模糊匹配算法比較數據元素的最佳方法

我期待比較的字段有:

  • 性別
  • 出生年份
  • 出生月份
  • 生日
  • SSN
  • 會員編號
  • MRN
  • 街道號碼
  • 街道名稱
  • 街道類型
  • 街方向
  • 國家
  • 郵編
  • 電話

我目前使用的近似字符串匹配算法(ASM的)是:

  • Levenshtein距離
  • 海明距離
  • 傑卡德距離
  • 哈羅距離
  • 哈羅 - 溫克勒距離
  • 最長共同亞序列
  • 最長共同亞序列克
  • 重疊係數
  • 拉特克利夫-Obershelp相似度
  • 索倫森-骰子距離
  • Tanimoto係數
  • Damerau-Levenshtein距離
  • 瓦格納 - 費希爾距離
  • 的Soundex
  • 音位3
  • NYSIIS

首先,我比較兩個字段,如FirstName1FirstName2並查看它們是否完全匹配。

例如,FirstName1 = "Bob"FirstName2 = "Bob"將是完全匹配的,所以它不會繼續進行模糊匹配。

另一方面,FirstName1 = "Jill"FirstName2 = "Bob"將移動到兩個領域的模糊比較。

我想知道是否有人知道什麼模糊匹配算法更適合在某些字段比較中使用,而不是其他字符比較,反之亦然。

+0

這個問題是一個很好的字符串比較算法列表! –

回答

0

我只是寫了一些類似的代碼實體解析。關鍵雖然並非所有的字段都創建相同。例如,您應該使用而不是SSN上使用ASM - 即使一個數字/字符不同,也是完全不同的SSN和個人。

而不是模糊匹配地址組件,我會嘗試先解決地址,然後做一個完全匹配。舉例來說,一個好的地址解析服務將把:

Second Street NWNW 2nd St

因爲即使他們擁有所有這些指標的相似性非常差在同一條街上。同樣,您可以使用Google的電話號碼解析庫(可用於C#,Java等)以標準方式格式化所有電話號碼,然後進行直接比較。

我的確使用Jaro-Winkler來比較名稱組件,但我沒有研究您列出的幾個指標。

簡而言之:

。規範化和比較

,而不是模糊匹配。