模糊记录与多列信息的匹配

时间:2011-03-08 19:55:32

标签: algorithm theory string-matching fuzzy-comparison record-linkage

我的问题有点高,所以我会尝试尽可能具体。

我正在进行大量研究,涉及将不同的数据集与引用同一实体(通常是公司或财务安全性)的标题信息相结合。此记录链接通常涉及标题信息,其中名称是唯一的常见主要标识符,但通常可用某些辅助信息(例如城市和州,操作日期,相对大小等)。这些匹配通常是一对多,但可能是一对一甚至多对多。我通常手工完成这种匹配,或者对清理过的子串进行非常基本的文本比较。我偶尔使用一种简单的匹配算法,比如Levenshtein距离测量,但我从来没有太多的东西,部分是因为我没有一个很好的正式应用方法。

我的猜测是,这是一个相当普遍的问题,必须有一些正式的流程可以用来做这类事情。我已经阅读了一些关于该主题的学术论文,这些论文涉及给定方法的理论适用性,但我没有找到任何有用的资料来完成一个方法或至少一个实际的框架。

我的问题如下:

  • 是否有人知道实施多维模糊记录匹配的良好来源,如书籍或网站,已发表的文章或工作文件?

  • 我更喜欢有实际例子和定义明确的方法。

  • 这种方法可以是迭代的,人类检查中间阶段的改进。

  • 编辑)链接数据用于统计分析。因此,一点点的噪音是可以的,但是对于较少的“错误的不匹配”而言,更少的“错误匹配”是强烈偏好的。

  • 如果他们使用的是Python,那就太棒了,但不是必需的。

最重要的是,如果重要的是,我不太关心计算效率。我没有动态实现这个,我通常会处理几千条记录。

2 个答案:

答案 0 :(得分:2)

对于“几千条记录”来说,一种不应该非常昂贵的常见方法是cosine similarity。虽然最常用于比较文本文档,但您可以轻松修改它以使用任何类型的数据。

链接的维基百科文章在细节上非常稀少,但是通过链接和进行一些搜索可以获得一些好消息。可能是您可以修改以适合您的目的的实现。实际上,请查看Simple implementation of N-Gram, tf-idf and Cosine similarity in Python

一个更简单的计算,一个可能“足够好”的计算将是Jaccard index。主要区别在于,通常余弦相似性考虑了在文档和整个文档集中使用单词的次数,而Jaccard索引仅关注文档中的特定单词。还有其他一些差异,但那个问题让我觉得最重要。

答案 1 :(得分:0)

问题是你有一个距离数组,每列至少有一个,你想以最佳方式组合这些距离,以指示一对记录是否相同。

这是一个分类问题,有很多方法可以做到,但logistic regression是一种更简单的方法。要训​​练一个分类,你需要将一些记录标记为匹配与否。

dedupe python library可以帮助您完成记录链接这项艰巨任务的其他部分。该文档有一个漂亮的good overview of how to approach the problem of record linkage comprehensively