如何确定每个来源中的记录是否代表同一个人

时间:2020-03-06 14:37:09  来源:igfitidea点击:

我有几个包含个人数据的表的来源,如下所示:

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 ...

因此,假设来自源1和源2的ID为1的记录是同一个人,我的问题是如何确定每个源中的记录是否代表同一个人。此外,请确保并非所有记录都存在于所有来源中。所有的名字,主要是用西班牙语写的。

在这种情况下,需要放宽精确的匹配,因为我们假设尚未根据国家的官方识别局严格检查数据源。另外,我们还需要假设错别字是常见的,因为收集数据的过程的性质。而且,每个来源的记录量大约为2或者3百万...

我们的团队曾考虑过这样的事情:首先,在ID NUMBER和NAMES之类的选定字段中强制完全匹配,以了解问题的严重程度。其次,放宽匹配标准,然后计算可以匹配多少条记录,但是问题出在这里:如何放松放宽匹配标准而又不会产生太大的限制

哪种工具可以更有效地处理此问题?例如,我们是否知道某些数据库引擎中的某些especific扩展可以支持此匹配?
我们是否了解诸如soundex之类的巧妙算法来处理这种近似匹配,但对于西班牙语文本呢?

任何帮助,将不胜感激!

谢谢。

解决方案

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

这听起来像是客户数据集成问题。搜索该词,我们可能会发现更多信息。另外,在"数据仓库Institude"内部进行一下讨论,我们可能还会在其中找到一些答案。

编辑:此外,这是一篇我们可能对西班牙语音匹配感兴趣的文章。

我以前不得不做类似的事情,而我所做的是对姓名使用双音素语音搜索。

不过,在比较名称之前,我试图通过在创建的昵称表中查找姓名来规范化任何名称/昵称差异。 (我用在网上找到的人口普查数据填充了表格)所以叫鲍勃的人成为了罗伯特,阿历克斯成了亚历山大,比尔成了威廉,等等。

编辑:Double Metaphone专门设计为比Soundex更好,并且可以使用英语以外的其他语言工作。

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

一种距离测量可以是语音的。我们可能会考虑的另一个是Levenshtein或者整体之间的编辑距离,这将尝试测量错别字。

如果我们对应该有多少人有一个合理的想法,那么目标就是找到最合适的人数。让匹配变得太模糊,我们将变得太少了。使其具有限制性,我们将拥有太多。

如果我们大致知道一个人应该有多少个条目,则可以将其用作度量标准,以查看何时接近。或者,我们可以将记录数除以每个人的平均记录数,然后得出要为其拍摄的大致人数。

如果没有可用的数字,则可以从分析中挑选出几组记录,然后手动检查它们看起来是否像同一个人。因此,这是猜测和检查。

希望对我们有所帮助。

只是为了添加一些细节来解决此问题,我找到了适用于Postgresql 8.3的模块

  • 模糊字符串匹配

我们可以尝试通过将名称与字典进行比较来规范化名称。
这将使我们发现一些常见的错别字并进行更正。

在我看来,我们有一个记录链接问题。我们可以在链接中使用参考。