如何确定是否在每个源记录,代表同一个人


3

我有一个个人数据表的几个来源,像这样:

SOURCE 1 
ID, FIRST_NAME, LAST_NAME, FIELD1, ... 
1, jhon, gates ... 

SOURCE 2 
ID, FIRST_NAME, LAST_NAME, ANOTHER_FIELD1, ... 
1, jon, gate ... 

SOURCE 3 
ID, FIRST_NAME, LAST_NAME, ANOTHER_FIELD1, ... 
2, jhon, ballmer ... 

因此,假设ID为1的记录,从源1和2,是同一个人,我的问题是如何确定是否在每个源记录,代表同一个人。另外,当然不是每个记录都存在于所有来源中。所有的名字,主要用西班牙文写成。

在这种情况下,确切的匹配需要放宽,因为我们假设数据源未被严格检查针对该国家的官方认证局。此外,我们需要假设错别字是常见,因为过程的性质来收集数据。更重要的是,每个来源的记录数量大约在2-3百万...

我们的团队曾经这样想过:首先,在ID NUMBER和NAMES等选定字段中强制精确匹配以了解这个问题很难。其次,放松的匹配标准,并计算多少记录更可以匹配,但正是在这些地方出现问题:怎么做放松的匹配标准,而不会产生过多噪音既不限制太多?

什么工具可以更有效的来处理这个?例如,你知道一些数据库引擎的一些especific扩展来支持这种匹配? 你知道聪明的算法,如soundex来处理这种近似匹配,但对于西班牙文本?

任何帮助,将不胜感激!

谢谢。

3

问题的关键在于计算每对条目之间的一个或多个距离度量,然后在其中一个距离小于某个可接受的阈值时认为它们是相同的。关键是要设置分析,然后改变可接受的距离,直到达到您认为是假阳性和假阴性之间的最佳平衡点。

一个距离测量可以是语音。另一个你可能会考虑的是Levenshtein or edit distance之间的企业,这将试图测量错别字。

如果你对你应该有多少人有一个合理的想法,那么你的目标是找到你得到正确人数的最佳位置。让你的匹配太模糊,你会有太少。让它限制,你会有太多。

如果你大致知道一个人应该拥有多少条目,那么你可以用它作为衡量你什么时候接近的指标。或者,您可以将记录数量划分为每个人的平均记录数,并获得大量您正在拍摄的人数。

如果您没有使用任何号码,那么您将从分析中挑选出一组记录,并手动检查它们是否看起来像是同一个人。所以这是猜测和检查。

我希望有帮助。


2

SSIS,请尝试使用模糊查找转换


3

这听起来像一个Customer Data Integration问题。搜索这个词,你可能会发现更多的信息。此外,在The Data Warehousing Institude内部有一个戳,你也可以在那里找到一些答案。

编辑:此外,here's文章,可能会让你感兴趣的西班牙语拼音匹配。


3

我以前不得不做类似的事情,我做的是在名称上使用double metaphone语音搜索。

在我比较名称之前,我尝试通过在我创建的昵称表中查找名称来规范化任何名称/昵称的区别。 (我填入人口普查数据我在网上找到的表),所以人们称鲍伯成了罗伯特,亚历克斯成为亚历山大,比尔成了威廉等

编辑:双音位是专门设计比探测法和更好地工作英语以外的语言。


1

我想补充一些细节来解决这个问题,我发现这个模块对PostgreSQL 8.3


0

您可以尝试通过比较他们cannonicalise名称与dicionary。
这会让你发现一些常见的拼写错误并改正它们。


0

听起来我有你有record linkage的问题。您可以使用链接中的参考。