如何确定每个来源中的记录是否代表同一个人
我有几个包含个人数据的表的来源,如下所示:
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的模块
- 模糊字符串匹配
- 卦
我们可以尝试通过将名称与字典进行比较来规范化名称。
这将使我们发现一些常见的错别字并进行更正。
在我看来,我们有一个记录链接问题。我们可以在链接中使用参考。