使用Special& amp;查找重复记录其他角色

时间:2014-02-20 05:59:13

标签: c# levenshtein-distance

我们正处于从第三方应用程序导入客户记录的情况, 和 当与另一个界面交互时,如果未找到客户匹配,我们正在接收客户请求我们正在插入新客户。

如果找不到确切的客户匹配,那么客户就会重复。

现在无法在上述两个界面之间动摇并获得正确的客户

所以现在我们需要开发工具来删除重复的客户

有人可以建议实现这一目标的最佳方法。

Levenshtein距离可能是一种选择吗?其他?

在性能方面,因为我们有超过5000个客户

我们需要处理的示例是

Customer 1 - abcsÿdesλ

Customer 2 - abcsfdesd

Customer 3 - úbcsfdμsd

以上所有客户都是相同的,需要合并为一个。

我们需要比较客户至少5个字段的基础知识,如名字,姓氏等。

请提醒,非常感谢提前。

1 个答案:

答案 0 :(得分:1)

根据这些错误的发生方式,LevenshteinSoundex可能是替代方案。 Soundex比较可能的发音,而Levenshtein只比较字符。

如果错误发生是因为在电话上写下了名字,发音清晰但拼写不清楚,那么Soundex可能是一个选项。如果由于拼写错误,邮件不可读或OCR错误而导致姓名拼写错误,那么Soundex基本上没有价值,Levenshtein非常适合。

所有比较例程都将返回输入相似程度的值。您将需要两个阈值,一个用于整个记录,一个用于每个字段。您希望整个记录(所有字段的总和)低于某个值,您希望它上面的每个字段都低于某个值。

有时您可能希望为这些数字引入特殊含义或具有字段依赖性。例如:如果你有性别或称呼,如果这些匹配,名字上的匹配可能不那么严格。如果性别/称呼不匹配,你最好对名字严格,因为即使一封信也可以分开两个明显不同的人。想想马里奥和玛丽亚,安吉洛和安吉拉。你不想把安吉洛先生和安吉拉夫人当作同一个人。这很难解释。

最后但并非最不重要的是,5000条记录都不算什么。如果你把它放在一个数据库中,你就可以有一个循环,将所有5000与输入记录进行比较。

如果将来有更多的记录,你需要一个你非常肯定正确的字段,只选择几条记录进行比较。例如,邮政编码经常在手机上拼写出来并且结构合理,因此很少会出错。从数据库中选择具有相同邮政编码或类似可能正确字段的所有记录,以减少必须与之比较的记录数。