2016-05-16 121 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来比较名称组件,但我没有研究您列出的几个指标。

简而言之:

。规范化和比较

,而不是模糊匹配。