【问题标题】:Best way to compare data elements using Fuzzy Match Algorithms使用模糊匹配算法比较数据元素的最佳方法
【发布时间】:2016-09-12 14:45:04
【问题描述】:

我希望通过 C# 中记录链接的模糊匹配算法比较两个数据元素或字段,并且我想确定哪种算法最适合每次比较。

我要比较的字段是:

  • 姓氏
  • 名字
  • 性别
  • 出生年份
  • 出生月份
  • 生日
  • 社会保障号
  • 会员编号
  • MRN
  • 街道编号
  • 街道名称
  • 街道类型
  • 街道方向
  • 城市
  • 状态
  • 邮编
  • 电话

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

  • 列文斯坦距离
  • 汉明距离
  • 杰卡德距离
  • Jaro 距离
  • Jaro-Winkler 距离
  • 最长公共子序列
  • 最长公共子串
  • 重叠系数
  • Ratcliff-Obershelp 相似度
  • 索伦森骰子距离
  • 谷本系数
  • Damerau-Levenshtein 距离
  • Wagner-Fisher 距离
  • Soundex
  • 变音器 3
  • NYSIIS

首先,我比较FirstName1FirstName2 等两个字段,看看它们是否完全匹配。

例如,FirstName1 = "Bob"FirstName2 = "Bob" 将是精确匹配,因此不会继续进行模糊匹配。

另一方面,FirstName1 = "Jill"FirstName2 = "Bob" 将继续对这两个字段进行模糊比较。

我想知道是否有人知道哪种模糊匹配算法更适合用于某些字段比较而不是其他字段比较,反之亦然。

【问题讨论】:

  • 这个问题是一个很好的字符串比较算法列表!

标签: levenshtein-distance hamming-distance fuzzy-comparison


【解决方案1】:

我刚刚为实体解析写了一些类似的代码。但关键是并非所有字段都是平等的。例如,您应该SSN 上使用 ASM——即使一个数字/字符不同也是完全不同的 SSN 和人员。

我会尝试先解析地址,然后进行精确匹配,而不是模糊匹配地址组件。例如,一个好的地址解析服务会处理:

Second Street NWNW 2nd St

作为同一条街道,即使它们在所有这些指标上的相似性都很差。

同样,您可以使用 Google 的电话号码解析库(适用于 C#、Java 等)以标准方式格式化所有电话号码,然后进行直接比较。

我确实使用 Jaro-Winkler 来比较名称组件,但我没有研究您列出的几个指标。

简而言之:

规范化和比较

而不是模糊匹配。

【讨论】:

    猜你喜欢
    • 2010-10-04
    • 1970-01-01
    • 2015-08-21
    • 2018-01-15
    • 1970-01-01
    • 1970-01-01
    • 2018-03-02
    • 1970-01-01
    • 2011-07-04
    相关资源
    最近更新 更多