我有一个大型数据集(2M 条目),但许多人在数据库中有多个条目,识别信息略有(或显着)不同。例如,我可能有 J. Doe 和 John Doe,或者我可能有带电子邮件地址的 John Doe,而没有随附电子邮件地址的 John Doe。
我一直在研究不同的聚类算法,但似乎没有什么适合我正在做的事情,即根据如下规则聚合条目:
- 根据其中一个名字是否全部大写来猜测名字和姓氏
- 如果电子邮件地址匹配,则聚合“J. Doe”和“J. Doe”
- 如果没有其他人的名字以“J”开头,姓氏“Doe”,则将“J. Doe”聚合为“John Doe”
对于较小的数据集,这将是一个相对简单的任务,只需使用一些简单的规则即可完成,但是对于我拥有的条目数量,聚合任务可能会变得非常慢并且逻辑变得非常复杂。我当前的解决方案(基于在我的数据库中使用全文搜索功能来查找类似条目,根据这些结果添加散列,然后基于散列和歧义类型的混合进行聚合)有效,但每次我尝试运行它或者更新它,它只是尖叫着说这是其他人已经解决的问题。但我一直无法找到解决方案。
有没有算法可以根据这样的规则做我想做的事?或者可能有用的特定软件包或软件?还是我完全错误地处理这个问题?
谢谢!
(请注意,尽管我很清楚有许多不同的方法可以错误地聚合身份(例如,J. Doe 可能意味着 John Doe 或 James Doe),所以我不需要警告不要尝试聚合事物。)