假设我的数据库中包含以下数据元素:
我从各种格式中获取了大量数据,并且您可以想到这些信息的各种合理变化。一些例子是:
当这些数据出现时,我需要写一些东西来匹配它。我不需要或期望获得超过80%的匹配率。在自动匹配之后,我将在网页上显示不确定的匹配,以便某人手动匹配。
一些复杂性是:
我已经看到SSIS有模糊匹配,但是我们目前没有使用SSIS,而且我发现它非常糟糕且几乎不可能进行版本控制,因此它不是我首选的工具。但如果它是最好的,请告诉我。否则,你是否有任何(最好是免费的,最好是基于.NET或T-SQL的)工具/库/实用程序/技术用于此类问题?
答案 0 :(得分:3)
你可以通过多种方式解决这个问题,但是在我继续进行之前已经完成了这类事情,并且在这里发现你在人与人之间进行“不正确”的比赛时会冒很大的风险。
您的输入数据非常稀疏,并且根据您拥有的数据并不是最独特的,如果并非所有值都存在。
例如,使用您的名字,姓氏,DOB情况,如果您拥有所有记录的所有三个部分,那么匹配将使您更容易使用。如果没有,你会暴露自己很多潜在的问题。
您可能采取的一种方法是,在更“原始”的方面,只需使用一系列查询来创建流程,这些查询只需识别和分类匹配的条目。
例如,首先检查名称和SSN上的完全匹配,如果有标记,请将其记录为100%并继续下一组。然后,您可以明确定义模糊的位置,以便了解匹配的潜在后果。
最后,你会得到一个带有标志的列表,表明匹配类型,如果该记录有任何匹配类型。
答案 1 :(得分:1)
看看Levenshtein Algoritm,它允许你得到'两个字符串之间的距离',然后可以将其分成字符串的长度以获得百分比匹配。
http://en.wikipedia.org/wiki/Levenshtein_distance
我之前已经实现了这一目标,取得了巨大成功。它是医疗保健公司的提供商门户网站,提供商在网站上注册了自己。匹配是进行门户网站注册并在主要医疗保健系统中找到相应的记录。参加此活动的处理者获得了最可能的匹配,按百分比递减排序,并且可以轻松选择正确的帐户。
答案 2 :(得分:1)
这是一个名为record linkage的问题。
虽然它适用于python库,但dedupe的文档会提供good overview of how to approach the problem comprehensively。
答案 3 :(得分:0)
如果误报不会让您感到烦恼并且您的语言主要是英语,则可以尝试使用Soundex之类的算法。 SQL Server将其作为内置函数。 Soundex不是最好的,但它确实做了模糊匹配并且很受欢迎。另一种选择是metaphone。