0

我有一个包含个人姓名、地址、电话号码等的数据集。有些人出现多次,姓名/和/或收件人和/或电话号码略有不同。假数据的片段如下所示:

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. 拼写为east,St. 拼写为 Street,有时则不是。

我需要做的是遍历近 120,000 行数据,以根据他们的姓名、地址和电话号码识别每个唯一的个体。任何人都知道如何在不手动运行每条记录的情况下完成此操作,一次一个?我盯着它看的越多,我就越认为如果不做出一些判断并说如果至少有两个或三个字段相同,则将其视为一个人是不可能的。

谢谢!!

阿尼

4

2 回答 2

3

正如我在评论中提到的,这并非微不足道。您必须在程序员时间/解决方案复杂性与结果之间做出权衡。你不会达到 100% 的结果。你只能接近它,时间和复杂性成本会随着你接近 100% 的增加而增加。从一个简单的解决方案(精确匹配)开始,看看最常导致错过匹配的问题。实施一个模糊的解决方案来解决这个问题。冲洗并重复。

您可以使用多种工具(我们都使用它们)。

1)距离匹配,如Damerau Levenshtein。您可以将其用于姓名、地址和其他内容。它处理错误,如换位、次要拼写、省略字符等。

2)拼音词匹配——soundex不好。还有其他更高级的。我们最终编写了自己的代码来处理我们经常遇到的混合种族。

3)昵称查找 - 许多昵称不会被语音或距离匹配捕获 - 像 Fanny for Frances 这样的名字。有很多这样的昵称。您可以建立对常规名称的昵称查找。考虑像 Jennifer -> Jen、Jenny、Jennie、Jenee 等这样的变化。

名字可能很难。名称的创造性拼写似乎是当前的时尚。例如,我们的数据库有超过 30 种名称 Kaitlynn 的拼写变体,它们都是真实姓名的拼写。当您尝试将 Katy 与其中任何一个匹配时,这使得昵称匹配变得困难。

以下是我在 stackoverflow 上就类似主题所做的其他一些答案:

处理蒙古语姓名

如何解决在 MySQL 中存储人名的困境,同时保持可辨别性和对相似名称的搜索?

MySQL 将 Damerau–Levenshtein Fuzzy 与 Like 通配符混合

于 2013-02-28T00:33:21.517 回答
0

您可以计算 Levenshtein 距离的成对矩阵。

有关更多信息,请参阅此最近的帖子:http: //www.markvanderloo.eu/yaRb/2013/02/26/the-stringdist-package/

于 2013-02-28T00:02:04.990 回答