Sha*_*kar 7 algorithm duplicates fuzzy-logic record-linkage
我正在开发一个应用程序,它必须能够在存储在sql server DB中的数十万个联系信息中找到并合并重复项.我必须比较表中的所有列,每列都有一个权重值.比较必须基于重量值.基于比较结果和等价程度,我必须决定自动合并联系人或请求用户注意.我知道有许多用于重复数据删除的模糊逻辑算法.
在http://www.melissadata.com/中阅读有关N-gram或基于Q-gram的算法.这个算法对大量数据是否可行?如果没有,任何人都可以用一些算法指导我或者告诉我从哪里开始?
我想要实现的一个例子,
Gonzales = Gonzalez (two different spelling of different name)
Smith = Smyth (Phonetic sound the same)
123 Main st = 123 Main street (abbrevation)
Bob Smith = Robert Smith (synonym)
Run Code Online (Sandbox Code Playgroud)
整个研究领域通常被称为记录联系(具有讽刺意味的是,它有大约十几个重复的名称).有很多工具可以让您配置特定数据的匹配,浏览数据,并为您输出重复项.如果您回答有关潜在匹配正确性的一些问题,某些工具甚至会为您创建匹配.
Q/N-gram比较(和索引)是解决这个问题的一种可能方法,但是还有很多其他的.您会很快发现不同类型的比较器适用于不同类型的数据.我自己没有尝试过Q-gram索引,但该领域的研究人员对我的描述相对较慢.
至于与语音键功能(如Soundex或Metaphone或其他)的比较,这仅适用于您有小文本字段,如给定名称,姓氏,中间名等的单独字段.即使这样,这些功能往往相当粗糙.并提防Soundex.它不仅非常粗糙,将非常不同的名称转换为相同的键,而且还错过了许多应该被视为相同的相似名称.Metaphone要好得多.
记录链接的维基百科页面曾经有一个工具列表,但编辑删除了它.我写了一个名为Duke的开源工具来解决这类问题.它有一个遗传算法可以帮助您创建配置,或者您可以手动编写一个.其他工具也存在.
我建议你使用已经存在的工具之一,而不是试图从头开始解决这个问题.