个人人口统计信息的模糊数据匹配

mat*_*mc3 5 .net c# algorithm string-matching data-cleaning

假设我有一个数据库,其中包含具有以下数据元素的人员:

  • PersonID(无意义的代理自动编号)
  • 中间初始
  • 名称后缀
  • 出生日期
  • 备用 ID(如 SSN、军人 ID 等)

我从各种格式中获取了大量数据,其中包含您能想到的这些信息的各种合理变化。一些例子是:

  • 全名、出生日期
  • 全名,最后 4 个 SSN
  • 第一个、最后一个、出生日期

当这些数据进来时,我需要写一些东西来匹配它。我不需要或期望获得超过 80% 的匹配率。自动匹配后,我会将不确定的匹配显示在网页上,供某人手动匹配。

其中一些复杂性是:

  1. 有些数据匹配比其他数据匹配更好,我想为这些数据分配权重。例如,如果 SSN 完全匹配,但由于有人使用中间名而导致姓名被关闭,那么我想为该匹配分配比名称完全匹配但 SSN 关闭时更高的置信度值。
  2. 名称匹配有一些困难。John Doe Jr. 与 John Doe II 相同,但与 John Doe Sr. 不同,如果我得到 John Doe 而没有其他信息,我需要确保系统不会选择一个,因为无法确定选择谁。
  3. 名字匹配真的很难。你有鲍勃/罗伯特、约翰/乔恩/乔纳森、汤姆/托马斯等。
  4. 仅仅因为我有一个包含 FullName+DOB 的提要,并不意味着每条记录都会填充 DOB 字段。我不想仅仅因为不匹配的 DOB 破坏了匹配的分数而错过链接。如果缺少某个字段,我想将其从可用于匹配的元素中排除。
  5. 如果有人手动匹配,我希望他们的匹配影响所有未来的匹配。因此,如果我们再次获得相同的精确数据,下次没有理由不自动匹配它。

我已经看到SSIS有模糊匹配,但我们目前不使用SSIS,而且我发现它非常笨拙并且几乎不可能进行版本控制,所以它不是我的首选工具。但如果这是最好的,请告诉我。否则,是否有任何(最好是免费的,最好是基于 .NET 或T-SQL 的)工具/库/实用程序/技术用于解决此类问题?

Mit*_*ers 3

您可以通过多种方法来解决此问题,但是在完成此类事情之前,我将在此指出,在人与人之间进行“不正确”匹配时,您会面临很大的风险。

您的输入数据非常稀疏,并且考虑到您所拥有的数据,它并不是最独特的,如果并非所有值都在那里。

例如,对于您的名字、姓氏、出生日期情况,如果您拥有所有记录的所有三个部分,那么匹配对您来说会更容易使用。如果不是,那么您就会面临很多潜在的问题。

从更“粗略”的角度来看,您可能采取的一种方法是简单地使用一系列查询来创建一个流程,该流程可以简单地识别和分类匹配的条目。

例如,首先检查姓名和 SSN 是否完全匹配,如果存在则标记它,将其标记为 100%,然后继续进行下一组。然后,您可以明确定义模糊的位置,以便了解匹配的潜在后果。

最后,您将得到一个列表,其中包含指示匹配类型的标志(如果该记录有的话)。