假设我有一个数据库,其中包含以下数据元素:
- PersonID(无意义的代理自动编号)
- 名
- 中间初始
- 姓
- 名称后缀
- 出生日期
- AlternateID(如 SSN、军事 ID 等)
我从各种格式中获得了大量的数据馈送,其中包含您能想到的这些信息的每一种合理变化。一些例子是:
- 全名,出生日期
- 全名,最后 4 个 SSN
- 第一,最后,出生日期
当这些数据进来时,我需要写一些东西来匹配它。我不需要或期望获得超过 80% 的匹配率。自动匹配后,我会将不确定的匹配显示在网页上,供某人手动匹配。
一些复杂性是:
- 一些数据匹配比其他的更好,我想为这些匹配分配权重。例如,如果 SSN 完全匹配但名称因某人使用中间名而关闭,那么与名称完全匹配但 SSN 关闭的情况相比,我想为该匹配分配更高的置信度值。
- 名称匹配有一些困难。John Doe Jr 与 John Doe II 相同,但与 John Doe Sr. 不同,如果我得到 John Doe 而没有其他信息,我需要确保系统不会选择一个,因为无法确定选谁。
- 名字匹配真的很难。你有 Bob/Robert、John/Jon/Jonathon、Tom/Thomas 等。
- 仅仅因为我有一个带有 FullName+DOB 的提要,并不意味着每条记录都填写了 DOB 字段。我不想因为不匹配的 DOB 杀死匹配的分数而错过一个链接。如果缺少某个字段,我想将其从可用于匹配的元素中排除。
- 如果有人手动匹配,我希望他们的匹配影响所有未来的匹配。因此,如果我们再次获得相同的准确数据,下次没有理由不自动匹配它。
我已经看到 SSIS 具有模糊匹配,但我们目前不使用 SSIS,而且我发现它非常笨拙,几乎不可能进行版本控制,所以它不是我的首选工具。但如果这是最好的,请告诉我。否则,是否有任何(最好是免费的,最好是基于 .NET 或T-SQL的)工具/库/实用程序/技术用于解决此类问题?