两个如何检查两个非结构化的街道地址字符串是否相同?

时间:2016-05-26 15:43:15

标签: string-comparison fuzzy-logic fuzzy-comparison fuzzy

我需要比较两个非结构化地址,并能够识别它们是否相同(或相似)。

方案

  • 地址由最终用户以纯文本格式提供。
  • 没有什么可以帮助用户以更可识别的方式书写(没有自动填充,没有。只是一个空的文本框)。
  • " #102 Nice-Looking Street,Gotham City,NY "应该与" Nice Loking St.,Gotham City,New York,apt 102 "。
  • 使用第三方服务不是一种选择。
  • 搜索不是问题。我已经有了两个字符串。我需要的是检查它们是否代表相同的地址,尽管它在结构上存在差异。

我找到了什么

我知道我们可以使用一些模糊逻辑进行这种比较,对拼写错误有一定的容忍度,但是......

  • 有一些关键字(例如,比较" Street"到" St。"或比较"#102"到" apt 102",或" NY" to"纽约")不应该惩罚可靠度。
  • 某些单词可以按不同的顺序放置(如上例中的公寓)。

我不想重新发明轮子。这个问题在不同的环境中似乎是一个普遍关注的问题,我认为可能适合这种情况的算法(可能会略微修改)。

提前致谢

1 个答案:

答案 0 :(得分:1)

我帮助构建了一些开源工具来实现这一目标。

基本上,方法是尝试拆分并解决它的组成部分,然后智能地比较这些部分。

问题的两个部分都很难。

第一部分通常称为地址解析。以下是我们使用的内容:https://github.com/datamade/usaddress

第二部分有很多很多名字,但我们称之为模糊匹配。这是我们为此制作的图书馆:https://github.com/datamade/dedupe

我们还提供了一些使用它们的工具:http://dedupe.readthedocs.io/en/latest/Variable-definition.html#address-type