对邮寄地址匹配方案的建议?

问题描述 投票:0回答:1

我的SQL Server包含2个表,其中包含一组类似的邮件(物理)地址字段。注意,这些表是在数据到达我的数据库之前填充的(无法更改)。表中的字段集相似但不相同-大多数字段都存在于两个表中,有的仅存在于一个表中,有的存在于另一个表中。目标是“高度自信”地确定两个邮寄地址是否匹配。

示例字段:

  1. 街道号
  2. Predirection
  3. 街道名称
  4. 街道后缀
  5. 邮寄方向(一个表而不是另一个表)
  6. [单元名称(一个表)v地址2(另一个表)-增加复杂性
  7. 邮政编码(每张表的长度各不相同,每5位5 5位以上)
  8. 法律说明

理想情况下,我想用一种简单的方法来调用“函数”,该函数返回布尔值或匹配的置信度(0.0-1.0)。可以在我的解决方案中使用SQL或Python进行此调用;免费/开源深受客户青睐。

在SOUNDEX,DIFFERENCE,Levenshtein距离(所有SQL)和usaddress,重复数据删除(Python)等选项中,都不是一个很好的解决方案。

sql-server python-3.x street-address
1个回答
0
投票

理想情况下,我想用一种简单的方法来调用返回的“函数”匹配的布尔值或置信度(0.0-1.0)。

相似度是您要寻找的。您可以使用距离度量来计算相似度。 Levenshtein DistanceDamerau-Levenshtein Distance和汉明距离是距离度量的示例。

给出两者中最短的一个:M两者中的最短的,N最长的,以及距离度量(D),您可以使用< [(MD)/ N。您还可以使用最长公共子序列或最长公共子串(LCS)通过除以[[LCS / N)来衡量相似性。 如果可以使用CLR,我强烈建议您从mdq.similarity中获得here.,它将使用以下算法给出相似性度量:

Damarau-Levenshtein距离(文档仅说“ Levenshtein”,但它们被误认为是]

Jaccard相似系数算法。

    Jaro-Winkler距离算法的一种形式。4个最长的通用子序列算法(当涉及换位时,该算法增加一)
  1. 如果性能很重要(这些指标可能很慢,具体取决于您要喂给他们的内容),那么我会很熟悉Bernie function。它旨在使用上述算法的[[
  2. any
帮助更快,更快地测量相似度。 Bernie是100%开放源代码,可以使用任何语言(Python,C#等)轻松地重新创建。同上我的N-Grams函数。
  • 您可以使用NGrams8K轻松创建自己的指标。

    对于Levenshtein的纯T-SQL版本或Longest Common Subsequence,可以查看Phil Factor的博客。 (请注意,这些不能与我提到的CLR竞争)。

    我现在停止。在我们更好地理解了使字符串与众不同的原因之后,可以给出最佳建议(请在您的评论下注意我的问题)。
  • © www.soinside.com 2019 - 2024. All rights reserved.