我的SQL Server包含2个表,其中包含一组类似的邮件(物理)地址字段。注意,这些表是在数据到达我的数据库之前填充的(无法更改)。表中的字段集相似但不相同-大多数字段都存在于两个表中,有的仅存在于一个表中,有的存在于另一个表中。目标是“高度自信”地确定两个邮寄地址是否匹配。
示例字段:
理想情况下,我想用一种简单的方法来调用“函数”,该函数返回布尔值或匹配的置信度(0.0-1.0)。可以在我的解决方案中使用SQL或Python进行此调用;免费/开源深受客户青睐。
在SOUNDEX,DIFFERENCE,Levenshtein距离(所有SQL)和usaddress,重复数据删除(Python)等选项中,都不是一个很好的解决方案。
理想情况下,我想用一种简单的方法来调用返回的“函数”匹配的布尔值或置信度(0.0-1.0)。
相似度是您要寻找的。您可以使用距离度量来计算相似度。 Levenshtein Distance,Damerau-Levenshtein Distance和汉明距离是距离度量的示例。
给出两者中最短的一个:M两者中的最短的,N最长的,以及距离度量(D),您可以使用< [(MD)/ N。您还可以使用最长公共子序列或最长公共子串(LCS)通过除以[[LCS / N)来衡量相似性。 如果可以使用CLR,我强烈建议您从mdq.similarity中获得here.,它将使用以下算法给出相似性度量:
Damarau-Levenshtein距离(文档仅说“ Levenshtein”,但它们被误认为是]Jaccard相似系数算法。
对于Levenshtein的纯T-SQL版本或Longest Common Subsequence,可以查看Phil Factor的博客。 (请注意,这些不能与我提到的CLR竞争)。
我现在停止。在我们更好地理解了使字符串与众不同的原因之后,可以给出最佳建议(请在您的评论下注意我的问题)。