|
|
1
2
为了进行正确的街道地址匹配,您需要将地址转换为标准格式。看看美国邮政标准 here (我假设你在和我们联系地址)。如果你想处理所有类型的美国邮件地址,这绝不是一个简单的过程。QAS和Satori软件等公司提供的软件可用于为您进行标准化。您需要导出您的地址,通过软件运行它们,然后用更新后的地址加载数据库。还有第三方供应商也将执行地址标准化。对于你想做的事情来说,这可能有些过分,但这是最好的方法。如果数据库中的地址是标准化的,您将有更好的机会匹配它们(特别是如果您也可以标准化输入)。 |
|
|
2
5
与其剔除那些可变的东西,不如把它们转换成一种可以比较的“规范形式”。 例如,在比较之前,将“rd”或“rd.”替换为“road”,将“st”或“st.”替换为“street”。 |
|
|
3
5
您可以考虑使用 Levenshtein Distance 算法。 您可以在SQL Server中将其创建为用户定义函数,在该函数中,它将返回需要对字符串“a”执行的操作数,以便它成为字符串“b”。然后,您可以将levenshtein距离函数的结果与某个固定阈值或从字符串长度派生的某个值进行比较。 您只需如下使用:
AS Mark Byers suggested ,如果使用Levenshtein距离,将变量项转换为规范形式将有所帮助。 使用 Full-Text Search 可能是另一种选择,特别是因为Levenshtein通常需要全表扫描。此决定可能取决于您打算多久进行一次这些查询。 您可能需要检查以下针对SQL Server的Levenshtein距离实现: 注意:您需要为上述实现实现实现一个min3函数。您可以使用以下内容:
您也可能有兴趣查看以下文章: |
|
|
4
3
我认为对你来说,第一步是更好地定义你对不同地址的慷慨与否。例如,哪些匹配,哪些不匹配:
在同一地区有枫树街和枫树大道吗?橡树街和橡树大道怎么样? 例如,我住在那里的许多街道/道路/blvds/ave都被命名为owasso。我住在奥瓦索街,它连接北奥瓦索大道,它连接南奥瓦索大道。然而,只有一条维多利亚大道。 考虑到这一点,您必须拥有一个包含所有道路名称的数据库,并查找最近的道路(并单独处理编号)。
|
|
5
2
|
|
John D · 需要为NULL或NOT NULL的WHERE子句 9 月前 |
|
Marc Guillot · 记录值时忽略冲突 9 月前 |
|
|
Fachry Dzaky · 正确使用ROW_NUMBER 9 月前 |
|
|
TriumphTruth · 从满足特定条件的数据集中选择1行 9 月前 |