两个如何检查两个非结构化街道地址字符串是否相同?
How two check if two unstructured street adresses strings are the same?
我需要比较两个非结构化地址并能够确定它们是否相同(或足够相似)。
场景
- 地址由最终用户以纯文本形式提供。
- 没有任何东西可以帮助用户以更可识别的方式书写(没有自动完成,什么都没有。只是一个空的文本框)。
- "#102 Nice-Looking Street, Gotham City, NY" 应匹配 "Nice Loking St., Gotham City, New York, apt 102 ".
- 不能使用第三方服务。
- 搜索不是问题。我已经有了这两个字符串。我需要的是检查它们是否代表相同的地址,尽管它在结构上有所不同。
我发现了什么
我知道我们可以使用一些模糊逻辑来进行这种比较,对拼写错误有一定的容忍度,但是...
- 有一些关键字(例如,将 "Street" 与 "St." 进行比较,或者将“#102”与 "apt 102" 进行比较,或者 "NY" 与 "New York") 不应影响可靠性。
- 有些单词可以按不同顺序放置(如上例中的公寓)。
我不想重新发明轮子。这个问题在不同的上下文中似乎是一个普遍关注的问题,我认为有一种算法(可能有一些轻微的修改)可能适合这种情况。
提前致谢
我帮助构建了一些开源工具来执行此操作。
基本上,该方法是尝试拆分并解决其组成部分,然后智能地比较这些部分。
问题的两部分都很难。
第一部分通常称为地址解析。这是我们使用的:https://github.com/datamade/usaddress
第二部分有很多很多名字,但我们称之为模糊匹配。这是我们为此制作的库:https://github.com/datamade/dedupe
我们还提供了一些将它们一起使用的便利:http://dedupe.readthedocs.io/en/latest/Variable-definition.html#address-type
我需要比较两个非结构化地址并能够确定它们是否相同(或足够相似)。
场景
- 地址由最终用户以纯文本形式提供。
- 没有任何东西可以帮助用户以更可识别的方式书写(没有自动完成,什么都没有。只是一个空的文本框)。
- "#102 Nice-Looking Street, Gotham City, NY" 应匹配 "Nice Loking St., Gotham City, New York, apt 102 ".
- 不能使用第三方服务。
- 搜索不是问题。我已经有了这两个字符串。我需要的是检查它们是否代表相同的地址,尽管它在结构上有所不同。
我发现了什么
我知道我们可以使用一些模糊逻辑来进行这种比较,对拼写错误有一定的容忍度,但是...
- 有一些关键字(例如,将 "Street" 与 "St." 进行比较,或者将“#102”与 "apt 102" 进行比较,或者 "NY" 与 "New York") 不应影响可靠性。
- 有些单词可以按不同顺序放置(如上例中的公寓)。
我不想重新发明轮子。这个问题在不同的上下文中似乎是一个普遍关注的问题,我认为有一种算法(可能有一些轻微的修改)可能适合这种情况。
提前致谢
我帮助构建了一些开源工具来执行此操作。
基本上,该方法是尝试拆分并解决其组成部分,然后智能地比较这些部分。
问题的两部分都很难。
第一部分通常称为地址解析。这是我们使用的:https://github.com/datamade/usaddress
第二部分有很多很多名字,但我们称之为模糊匹配。这是我们为此制作的库:https://github.com/datamade/dedupe
我们还提供了一些将它们一起使用的便利:http://dedupe.readthedocs.io/en/latest/Variable-definition.html#address-type