我有一个包含个人姓名,地址,电话号码等的数据集。有些人会多次出现,名称/和/或收件人和/或电话号码略有不同。虚假数据的片段如下所示:
first last address phone
Jimmy Bamboo P.O. Box 1190 xxx-xx-xx00
Jimmy W. Bamboo P.O. Box 1190 xxx-xx-xx22
James West Bamboo P.O. Box 219 xxx-66-xxxx
......等等。有时候E被描述为东部,St。作为街道,有时则不是。
我需要做的是运行近120,000行数据,根据他们的姓名,地址和电话号码识别每个独特的个体。任何人都有一个线索,如何在不手动运行每条记录的情况下完成这项工作,一次一个?我越是盯着它越多,我认为如果没有做出一些判断,并且如果至少有两三个字段是相同的,那就不可能将它视为一个人。
谢谢!
阿尼
答案 0 :(得分:3)
正如我在评论中提到的,这不是微不足道的。您必须决定程序员时间/解决方案复杂性与结果之间的权衡。你不会达到100%的结果。您只能接近它,时间和复杂性成本将增加到接近100%。从一个简单的解决方案(完全匹配)开始,看看哪个问题最常导致错过的匹配。实施模糊解决方案来解决这个问题。冲洗并重复。
您可以使用多种工具(我们全部使用它们)。
1)距离匹配,如Damerau Levenshtein。您可以将其用于名称,地址和其他内容。它处理错误,如换位,轻微拼写,省略字符等。
2)phonetic word matching - soundex不好。还有其他更先进的。我们最终写了自己的东西来处理我们经常遇到的种族混合。
3)昵称查找 - 许多昵称不会被语音或距离匹配所捕获 - 像弗兰尼斯的范妮这样的名字。有很多这样的绰号。您可以构建对常规名称的昵称查找。考虑像Jennifer这样的变化 - > Jen,Jenny,Jennie,Jenee等。
名字可能很难。名字的创意拼写似乎是当前的时尚。例如,我们的数据库有超过30种Kaitlynn名称的拼写变体,它们都是实际名称的拼写。当你试图将Katy与其中任何一个匹配时,这会使昵称匹配变得困难。
以下是我在stackoverflow上所做的类似主题的其他一些答案:
答案 1 :(得分:0)
您可以计算Levenshtein距离的成对矩阵。
有关详细信息,请参阅此近期帖子:http://www.markvanderloo.eu/yaRb/2013/02/26/the-stringdist-package/