我有一个简单的联系人数据库,但我遇到了用户输入重复数据的问题。我已经实现了一个简单的数据比较,但不幸的是,输入的重复数据并不完全相同。例如,姓名拼写错误或一个人输入“Bill Smith”而另一个人输入“William Smith”。
那么是否有某种算法可以给出一个条目与另一个条目的相似程度的百分比?
最佳答案
So is there some sort of algorithm that can give a percentage for how similar an entry is to another?
Soundex 和编辑距离等算法(如前一篇文章中所建议)可以解决您的一些问题。但是,如果您认真对待清理数据,这还不够。正如其他人所说,“Bill”听起来一点也不像“William”。
我发现的最佳解决方案是使用缩减算法和表将名称缩减为其根名称。
在您的常规地址表中,添加名称的根版本,例如 人物(名字、RootFirstName、姓氏、Rootsurname....)
现在,创建一个映射表。 FirstNameMappings (Primary KEY Firstname, Rootname)
通过以下方式填充您的映射表: 将 IGNORE(从 Person 选择 Firstname,“UNDEFINED”)插入 FirstNameMappings
这将添加您在个人表中的所有名字以及“UNDEFINED”的 RootName
现在,遗憾的是,您将不得不遍历所有唯一的名字并将它们映射到 RootName。例如“Bill”、“Billl”和“Will”都应该翻译成“William” 这非常耗时,但如果数据质量对您来说真的很重要,我认为这是最好的方法之一。
现在使用新创建的映射表来更新 Person 表中的“Rootfirstname”字段。重复姓氏和地址。完成此操作后,您应该能够检测到重复项而不会出现拼写错误。
关于algorithm - 如何检测重复数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31494/