当前位置:  开发笔记 > 人工智能 > 正文

如何检测重复数据?

如何解决《如何检测重复数据?》经验,为你挑选了2个好方法。

我有一个简单的联系人数据库,但我遇到用户输入重复数据的问题.我已经实现了一个简单的数据比较,但不幸的是,输入的重复数据并不完全相同.例如,名字拼写不正确,或者一个人将放入"Bill Smith",另一个人将为同一个人输入"William Smith".

那么是否存在某种算法可以给出一个条目与另一个条目的相似程度的百分比?



1> Tnilsson..:

那么是否存在某种算法可以给出一个条目与另一个条目的相似程度的百分比?

作为Soundex和Edit距离的算法(如前一篇文章中所建议的)可以解决您的一些问题.但是,如果您认真对待清理数据,这还不够.正如其他人所说,"比尔"听起来并不像"威廉".

我找到的最佳解决方案是使用简化算法和表来将名称缩减为其根名称.

在常规地址表中,添加名称的根版本,例如Person(Firstname,RootFirstName,Surname,Rootsurname ....)

现在,创建一个映射表.FirstNameMappings(主键名,根名)

通过以下方式填充Mapping表:插入IGNORE(从Person中选择Firstname,"UNDEFINED")到FirstNameMappings

这将添加您在person表中的所有firstnames以及RootName"UNDEFINED"

现在,遗憾的是,您必须浏览所有唯一的名字并将它们映射到RootName.例如"Bill","Billl"和"Will"都应该被翻译成"William"这是非常耗时的,但如果数据质量真的对你很重要,我认为这是最好的方法之一.

现在使用新创建的映射表来更新Person表中的"Rootfirstname"字段.重复姓氏和地址.完成此操作后,您应该能够检测重复项而不会遇到拼写错误.



2> Peter Hoffma..:

您可以将名称与Levenshtein距离进行比较.如果名称相同,则距离为0,否则由将一个字符串转换为另一个字符串所需的最小操作数给出.


怎么会发现比尔=威廉?他的问题是重复的,而不是完全重复的拼写错误.
推荐阅读
低调pasta_730
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有