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

标签 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”与“New York”进行比较)不应惩罚可靠性。
  • 有些词可以按不同的顺序放置(如上例中的 appartement)。

  • 我不想重新发明轮子。在不同的上下文中,这个问题似乎是一个普遍关注的问题,我认为有一种算法(可能稍作修改)可能适合这种情况。

    提前致谢

    最佳答案

    我帮助构建了一些开源工具来做到这一点。

    基本上,该方法是尝试拆分并寻址到其组成部分,然后智能地比较这些部分。

    问题的两部分都很困难。

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

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

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

    关于string-comparison - 如何检查两个非结构化街道地址字符串是否相同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37465475/

    相关文章:

    mysql - 当两个表之间不存在公共(public)键时,是否可以比较它们?

    javascript - 谁能解释一下这里发生了什么?两个相等的字符串比较时返回 false

    c# - 连字符后的字符影响 string.compare

    javascript - 模糊逻辑重复名称检测器

    python - 使用 Python/PIL 比较(相似)图像

    r - 查找近似重复记录的技术

    java - 如果带有字符串比较的语句失败

    Java - 映射键查找忽略大小写

    image-processing - 有没有可以训练新符号的 OCR?

    python - 用于模糊字符串比较的好 Python 模块?