C# 使用特殊&;查找重复记录;其他字符

C# 使用特殊&;查找重复记录;其他字符,c#,levenshtein-distance,C#,Levenshtein Distance,我们正在从第三方应用程序导入客户记录, 及 在与另一个界面交互时,如果未找到客户匹配项,我们将接收客户请求,并插入新客户 如果未找到准确的客户匹配项,则客户将被复制 现在,无法在上述两个界面之间进行握手,从而获得正确的客户 所以现在我们需要开发工具来删除重复的客户 有人能提出实现这一目标的最佳方法吗 Levenshtein距离可以是一种选择吗?其他的 在性能方面也是如此,因为我们有5000多个客户 我们需要处理的例子是 Customer 1 - abcsÿdesλ Customer 2 - a

我们正在从第三方应用程序导入客户记录, 及 在与另一个界面交互时,如果未找到客户匹配项,我们将接收客户请求,并插入新客户

如果未找到准确的客户匹配项,则客户将被复制

现在,无法在上述两个界面之间进行握手,从而获得正确的客户

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

有人能提出实现这一目标的最佳方法吗

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

在性能方面也是如此,因为我们有5000多个客户

我们需要处理的例子是

Customer 1 - abcsÿdesλ

Customer 2 - abcsfdesd

Customer 3 - úbcsfdμsd
以上所有客户都是相同的,需要合并为一个

我们需要在至少5个字段(如名字、姓氏等)的基础上对客户进行比较


请提前告知,非常感谢。

这取决于这些错误是如何发生的,或者是可能的替代方案。Soundex比较可能的发音,而Levenshtein只比较字符

如果这些错误是因为在打电话时写下了姓名,发音清晰但拼写不清楚,那么Soundex可能是一种选择。如果名字因为拼写错误、无法阅读的邮件或糟糕的OCR而拼错,那么Soundex基本上一文不值,Levenshtein非常适合

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

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

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


如果您将来有更多的记录,您需要一个您非常确定正确的字段,以便只选择几个记录进行比较。例如,zipcode经常在电话中拼写出来,并且结构良好,因此很少出错。从数据库中选择具有相同zipcode或类似可能正确字段的所有记录,以减少需要比较的记录数。

感谢您的反馈,但如果有5000条记录,则比较1个字段和4999次需要大约3分钟,这意味着5个字段需要15分钟。任何提高性能的选项。@KeshavdasM 15分钟听起来并不是很长的时间,如果这是一次性操作的话。你绝对不应该创建一个解决方案,你需要经常重复这样做。完成一次,将结果放在一个新的数据库中,然后继续使用。此外,还有一件事:如果您可以根据名称以外的其他信息对记录进行分组,那么您可能只能依靠组内的比较?这可能会显著减少比较的数量……谢谢,我们也在做同样的事情,对其他参数应用过滤器,最后使用Levenshtein算法精确地找到匹配项