首页 / 知识
关于算法:如何检测重复数据?
2023-04-13 10:41:00

How to detect duplicate data?我有一个简单的联系人数据库,但是用户输入重复数据时遇到了问题。 我已经实现了简单的数据比较,但是不幸的是,输入的重复数据并不完全相同。 例如,姓名拼写不正确,或者一个人将" Bill Smith"放进去,而另一个人将" William Smith"放进同一个人。 那么,是否存在某种算法可以给出一个条目与另一个条目的相似程度的百分比?
Soundex和Edit distances之类的算法(如前一篇文章所述)可以解决您的一些问题。但是,如果您认真清理数据,这还不够。正如其他人所说,"比尔"听起来不像"威廉"。 我发现最好的解决方案是使用归约算法和表将名称还原为其根名称。
在您的常规地址表中,添加名称的根版本,例如
现在,创建一个映射表。
通过以下方法填充映射表: 这将添加您在人员表中拥有的所有名字以及RootName为" UNDEFINED"
现在,可悲的是,您将必须遍历所有唯一的名字并将它们映射到RootName。例如," Bill"," Billl"和" Will"都应翻译为" William" 现在,使用新创建的映射表来更新Person表中的" Rootfirstname"字段。重复输入姓氏和地址。完成此操作后,您应该能够检测到重复项而不会出现拼写错误。 您可以将名称与Levenshtein距离进行比较。如果名称相同,则距离为0,否则由将一个字符串转换为另一个字符串所需的最少操作数 我想这个问题已经很好理解了,但是在我初读时发生的事情是:
使用现有数据库对阈值进行良好的初步猜测,并在积累经验时进行更正。 至少在一开始,您可能会偏向误报。 如果您有一个包含字符串字段的大型数据库,则可以使用simhash算法非常快速地找到很多重复项。 如果可以访问SSIS,请检查Fuzzy分组和Fuzzy查找转换。 http://www.sqlteam.com/article/using-fuzzy-lookup-transformations-in-sql-server-integration-services http://msdn.microsoft.com/en-us/library/ms137786.aspx 尽管我没有适合您的算法,但我的第一步是看一下输入新联系人所涉及的过程。也许用户没有一种简单的方法来找到他们想要的联系人。就像在Stack Overflow的新问题表格上一样,您可以建议新联系人屏幕上已经存在的联系人。 这可能相关也可能不相关,但是Soundex搜索可能会发现较小的拼写错误,例如,这将使您可以将Britney Spears,Britanny Spares和Britny Spears视为重复项。 但是,昵称收缩很难视为重复,我怀疑这样做是否明智。肯定会有多个人,分别是比尔·史密斯(Bill Smith)和威廉·史密斯(William Smith),您必须使用Charles-> Chuck,Robert-> Bob等进行迭代。 同样,如果您正在考虑使用穆斯林用户,问题会变得更加棘手(例如,穆斯林太多,被称为穆罕默德/穆罕默德)。 FullContact.com具有可以为您解决此问题的API,请在此处查看其文档:http://www.fullcontact.com/developer/docs/?category=name。 它们具有用于名称规范化(Bill into William),名称推演器(用于原始文本)和名称相似性(比较两个名称)的API。 目前所有API都是免费的,这可能是入门的好方法。
对于那些在网上徘徊并最终到达这里的人,我建议您尝试使用我创建的名为Flookup的Google表格插件。 我希望您发现Flookup和其他人一样有益。 您可能还希望研究概率匹配。 我不确定它是否可以很好地解决名称与昵称的问题,但是在这种情况下,最常见的算法是编辑距离/ Levenshtein距离算法。基本上,这是将一个项目转换为另一个项目所需的字符更改,添加和删除次数的计数。 对于名称,我不确定您是否会通过纯算法方法获得良好的结果-您真正需要的是海量数据。例如,Google拼写建议比普通桌面应用程序中的建议好多少。这是因为Google可以处理数十亿个Web查询,并查看导致彼此查询的内容,实际点击的"您的意思"链接等。 有一些公司专门研究名称匹配问题(主要用于国家安全和欺诈应用程序)。我记得一个,美国搜索软件公司(Search Software America)似乎已被这些人买断了http://www.informatica.com/products_services/identity_resolution/Pages/index.aspx,但我怀疑这些解决方案中的任何一种都不会对于联系人应用程序来说价格昂贵。 |
最新内容
相关内容
Python算法定义
Python算法定义,有限,时间,数据,算法,情况,培训,系统,策略,复杂度,步骤,算法(Algorithm)是指解题方案的准确而完整的描述,是一系列解决问题的python如何检测字符串是不是全为字
python如何检测字符串是不是全为字母?,检测,培训,字符串,字母,方法,字符,示例,语法,以上,更多,python中可以使用isalpha()方法检测字符串是不python如何实现手动输入文字
python如何实现手动输入文字,培训,表达式,字符串,函数,整数,示例,语法,以上,参数,文字,python中可以使用input()函数接收用户输入的文字。函python如何输入序列
python如何输入序列,名称,数据,合法,培训,列表,函数,赋值,序列,变量,语法,Python创建列表在Python中,创建列表的方法可分为2种,下面分别进行介python中怎样输入两行
python中怎样输入两行,异常,环境,培训,语句,函数,机制,结束,空行,文件名,这不,python中的Input()函数在输入时,遇到回车符,那么一次输入就结束python怎么输入多变量
python怎么输入多变量,数字,培训,字符串,逗号,空格,间隔,数值,以上,更多,内容, Python同时输入多个值 1.同时输入多个字符串,字符串python怎么定义用户输入
python怎么定义用户输入,培训,字符串,整数,类型,用户,文本,定义,文档,小数点,位数,python中获取用户输入的方法如下:整数输入#!/usr/bin/pythopython如何输入坐标
python如何输入坐标,对比,培训,坐标,直角坐标,表示,增减,字典,下面,方向,以上,python利用元组、字典可以表示坐标增减,具体做法为:defchange_dipython如何手动输入时间
python如何手动输入时间,时间,培训,单位,项目,平台,设计,日期,模块,新和,函数,python是一种跨平台的计算机程序设计语言。是一种面向对象的动python算法有用吗
python算法有用吗,玩具,培训,算法,程序,存在,路径,也就是说,模型,场景,以上,有很多人说,学Python编程算法有用吗?学算法对于写程序来说非常重如何用python输入数字
如何用python输入数字,数字,培训,整数,类型,函数,以上,时候,文档,发现,结果,开始使用python的时候想用input输入一个整数:a=input(“请输入一python里面如何输入数字
python里面如何输入数字,数字,代码,培训,方案,字母,里面,以上,提示,错误,方式,要求:用python写一个要求用户输入数字,如果不是数字就一直循环要