如何检查两个非结构化街道地址字符串是不是相同?
Posted
技术标签:
【中文标题】如何检查两个非结构化街道地址字符串是不是相同?【英文标题】:How two check if two unstructured street adresses strings are the same?如何检查两个非结构化街道地址字符串是否相同? 【发布时间】:2016-09-24 17:32:10 【问题描述】:我需要比较两个非结构化地址,并能够确定它们是否相同(或足够相似)。
场景
地址由最终用户以纯文本形式提供。 没有什么可以帮助用户以更易于识别的方式书写(没有自动完成功能,什么都没有。只是一个空文本框)。 “#102 Nice-Looking Street, Gotham City, NY”应与“Nice Loking St., Gotham City, New York, apt 102”匹配。 不能使用第三方服务。 搜索不是问题。我已经有了这两个字符串。我需要检查它们是否代表相同的地址,尽管其结构不同。我发现了什么
我知道我们可以使用一些模糊逻辑进行这种比较,对拼写错误有一定的容忍度,但是......
有些关键字(例如,将“Street”与“St.”进行比较,或将“#102”与“apt 102”进行比较,或将“NY”与“New York”进行比较)不应受到惩罚可靠程度。 有些词可以按不同的顺序排列(如上例中的公寓)。我不想重新发明***。这个问题似乎是不同情况下的常见问题,我认为有一种算法(可能稍作修改)可能适合这种情况。
提前致谢
【问题讨论】:
好吧,您可以将两个地址都传递给 Google 或其他映射 API,取回它认为每个地址所在位置的坐标,然后进行一些数学运算以找出它们之间的距离,但是这是使用第 3 方 API。除此之外,它们是地址的事实几乎无关紧要 - 这只是一个模糊的字符串匹配问题,通过使用您提到的常见替换稍微简化,您可以将其存储在某种数据库中(Street/St,Washington/ DC/DC、纽约/纽约等) 【参考方案1】:我帮助构建了一些开源工具来执行此操作。
基本上,该方法是尝试将其拆分并寻址到其组成部分,然后智能地比较这些部分。
问题的两个部分都很困难。
第一部分通常称为地址解析。这是我们使用的:https://github.com/datamade/usaddress
第二部分有很多很多的名字,但我们称之为模糊匹配。这是我们为此创建的库:https://github.com/datamade/dedupe
我们还提供了一些一起使用它们的工具:http://dedupe.readthedocs.io/en/latest/Variable-definition.html#address-type
【讨论】:
以上是关于如何检查两个非结构化街道地址字符串是不是相同?的主要内容,如果未能解决你的问题,请参考以下文章