使用不同的拼写等修复字符串变量

时间:2013-02-27 23:54:18

标签: r

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

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行数据,根据他们的姓名,地址和电话号码识别每个独特的个体。任何人都有一个线索,如何在不手动运行每条记录的情况下完成这项工作,一次一个?我越是盯着它越多,我认为如果没有做出一些判断,并且如果至少有两三个字段是相同的,那就不可能将它视为一个人。

谢谢!

阿尼

2 个答案:

答案 0 :(得分:3)

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

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

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

2)phonetic word matching - soundex不好。还有其他更先进的。我们最终写了自己的东西来处理我们经常遇到的种族混合。

3)昵称查找 - 许多昵称不会被语音或距离匹配所捕获 - 像弗兰尼斯的范妮这样的名字。有很多这样的绰号。您可以构建对常规名称的昵称查找。考虑像Jennifer这样的变化 - > Jen,Jenny,Jennie,Jenee等。

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

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

Processing of mongolian names

How to solve Dilemma of storing human names in MySQL and keep both discriminability and a search for similar names?

MySQL Mixing Damerau–Levenshtein Fuzzy with Like Wildcard

答案 1 :(得分:0)

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

有关详细信息,请参阅此近期帖子:http://www.markvanderloo.eu/yaRb/2013/02/26/the-stringdist-package/