2010-07-16 54 views
4

比方说,我有坐满了人与下列数据元素数据库:模糊数据的个人人口统计信息匹配

  • 是PersonID(无意义替代自动编号)
  • MiddleInitial
  • 姓氏
  • NameSuffix
  • DateOfBirth
  • AlternateID(如SSN,Militarty ID等)

我从各种格式中获得大量数据源,并且可以对这些信息进行合理的变化。一些例子是:

  • 全名,出生日期
  • 全名,最后4 SSN
  • ,姓,出生日期

当此数据进来,我需要写的东西来匹配起来。我不需要也不期望得到超过80%的匹配率。自动匹配后,我会在网页上呈现不确定的匹配,以供某人手动匹配。

一些复杂的是:

  1. 一些数据匹配是比别人更好,我想权重分配给那些。例如,如果SSN完全匹配,但名称因为某人名字中间名而关闭,我想为该匹配指定一个更高的置信度值,如果名称完全匹配但SSN关闭。
  2. 名称匹配有一些困难。 John Doe Jr与John Doe II相同,但与John Doe Sr.不一样,如果我得到John Doe并没有其他信息,我需要确定系统不会选择一个,因为无法确定谁来挑选。
  3. 名字匹配真的很难。你有Bob/Robert,John/Jonathon,Tom/Thomas等。
  4. 仅仅因为我有一个Feed FullName + DOB并不意味着每个记录都会填写DOB字段。我不想错过联系,只是因为无与伦比的DOB杀死了匹配的分数。如果缺少一个字段,我想将它从可用于匹配的元素中排除。
  5. 如果有人手动匹配,我希望他们的匹配影响所有未来的比赛。所以,如果我们再次获得相同的确切数据,那么下次没有理由不自动匹配它。

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

回答

3

有很多方法可以解决这个问题,但是在我继续前进之前就已经完成了这种类型的事情,并且在这里发现在人与人之间发生“不正确”匹配时会冒很大风险。

您的输入数据非常稀少,并且给出您拥有的数据不是最独特的,如果不是所有值都存在。

例如,如果您的名字,姓氏,出生日期情况,如果您有全部三个部分的所有记录,那么匹配将更容易地使用LOT。如果没有,尽管你暴露自己很多潜在的问题。

您可能采取的一种方法是,在事情更“粗糙”的一面是简单地使用一系列查询来创建一个流程,这些查询可以简单地识别和分类匹配的条目。

例如,首先检查名称和SSN上的完全匹配,如果有标记,请将其标记为100%,然后转到下一组。然后,您可以明确定义您的模糊位置,以便了解匹配的潜在影响。

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

+0

这是我以前见过的一种方法。误报风险很高,代码很脆弱,因为很难考虑所有的组合。此外,我们系统中的数据相当完整......我们从其他供应商处获得的数据,其他人的数据也是如此。 – mattmc3 2010-07-16 14:07:56

+0

无论采用何种方法,您的假阳性风险都很高。但是,如果您使用有条不紊的方法并将其构建出来,您至少可以知道匹配完成的方式和原因,并减少误报。 – 2010-07-16 14:32:05

1

看看Levenshtein算法,它可以让你得到'两个琴弦之间的距离',然后可以将它分成字符串长度以获得百分比匹配。

http://en.wikipedia.org/wiki/Levenshtein_distance

我以前实现这一巨大的成功。这是一家医疗保健公司的供应商门户,供应商在网站上注册。该匹配是为了进行门户注册并在主要医疗保健系统中找到相应的记录。参加此次会议的处理人员将获得最可能的匹配,按百分比递减顺序排列,并且可以轻松选择正确的帐户。

+0

很好的答案。我已经在我的工具带中找到了这个,以防我从头开始构建。我期待着不要从零开始完全构建,尽管:-) – mattmc3 2010-07-16 14:05:04

+0

它不应该花太长的时间来实现这个..只用了一两天,当我使用它。 – Fosco 2010-07-16 17:23:25

+0

什么花了一两天,Levenshtein算法或全面的人口统计比较器与名称语义,匹配分数和置信度的所有细微差别?我想你可能会过分简单化。通用的字符串比较算法虽然也许是解决方案的一部分,但还不够。 – mattmc3 2010-07-16 18:52:41

0

如果误报不会影响你,你的语言主要是英语,你可以尝试像Soundex这样的算法。 SQL Server将其作为内置功能。 Soundex不是最好的,但它确实做了模糊匹配并且很受欢迎。另一种选择是metaphone。

相关问题