字符串指标/相似度/度量:识别相同的地理位置(街道地址)

时间:2016-05-16 21:51:18

标签: string algorithm reverse-geocoding

当从某个Web服务搜索中检索地址时会出现问题,您会在同一个实际位置获得多个结果。例如"Reverse Geocoding API" by Google,例如文档:

  

" 277 Bedford Avenue,Brooklyn,NY 11211,USA"

     

" Grand St / Bedford Av,Brooklyn,NY 11211,USA"

     

" Grand St / Bedford Av,Brooklyn,NY 11249,USA"

     

" Bedford Av / Grand St,Brooklyn,NY 11211,USA"

     

" Brooklyn,NY 11211,USA"

     

" Williamsburg,Brooklyn,NY,USA"

假设我只需要选择1和最详细的一个,所以天真的解决方案是返回最大字符的那个。

但就在它之前,我想验证所有选项实际上是在描述同一个地方。相应的CS主题是String metric。如何在此任务中应用这些算法?大多数指标在这种情况下不适用的一些问题:

  1. 单词的顺序不一样。

  2. 并非所有必要的单词都应出现,例如描述符" St。"等

  3. 谢谢,

1 个答案:

答案 0 :(得分:1)

我不会简单地在这里比较字符串。尝试分析地址并识别组件。例如,在

  

277 Bedford Avenue,Brooklyn,NY 11211,USA

你可以看到:

  • 用逗号分隔的项目代表不同的实体,但未分隔的项目也可能是不同的概念。
  • 较早的项目代表较小的区域,后来的项目较大。您在街道,街道,城市,州,国家/地区拥有特定的位置。最后一项不会始终是国家/地区,但您可以针对国家/地区列表进行检查,并且只有在未考虑其他选项的情况下才能查看。同样,状态代码列表允许您识别NY。
  • 靠近末尾的一长串数字可能是邮政编码。
  • 一个简短的(ish)号码(总是在后面注意' th'和' st')后缀可能是一个街道号码。

等等。然后你有一个语义表示。可以肯定地说,大多数地址都是以这种方式编写的。询问您地址的表格通常具有相同的字段。

(实际上,对于Google来说,你甚至不必为自己解决这个问题,他们会告诉你这些组件是什么。他们还告诉你最具体的东西。)

对于下一个,类似的事情适用,但它更复杂:

  

Grand St / Bedford Av,Brooklyn,NY 11211,USA

'平均'和' St'需要转变成大道'和' Street'。斜线的含义尚不清楚。我们可以像逗号一样对待它并考虑" Grand St"和"贝德福德Av"是两个不同的信息。但是从他们的立场和#34; Street"和" Avenue",我们知道两者都代表着同样的东西。所以,让我们说这个地方有两条街道,并留下那条开放的确切含义。也许它是一个角落,也许同一条街有两个名字。

现在,当您比较前两个实体时,您知道它们具有相同的国家/地区,邮政编码,州和城市,因此这是一个良好的开端,但这并不是非常具体。第二个街道在第二个街道中提到,这样很好。事实上,第二个人提到一条额外的街道并不是一个真正的问题。街道(A, B)(B, C)有两个问题。街道号码不存在,但这只是意味着第二个位置不太具体,所以它就像第一个位置包含在第二个位置。

您可以放心地得出结论,第二,第三和第四个地址都是相同的。只有邮政编码有所不同,有时会发生这种情况(邮政编码很奇怪),在其他地方有太多相同的东西来解雇匹配。邮政编码也在数字上非常接近。如果国家或州不同,那么他们就不应该匹配,但可能会创建一个警报,以便通知人,并查看是否有问题。还要确保您有一个正确的字典,为同一个地方标准化不同的名称,例如纽约==纽约。对于第四个地址,我们知道如何将其识别为有两条街道,我们可以忽略顺序(将街道视为一组)。

对于较小的区域,第五个地址再次只是较少的信息,因此它包含以前的地址。请注意,如果您只比较它们不匹配的第三个和第五个地址。这表明,当您匹配前两个地址时,您应该合并'他们并注意到两个邮政编码可能被认为是等同的。然后,甚至可以说"布鲁克林,纽约州11211,美国"和"布鲁克林,纽约11249,美国"匹配。

最后一个地址与其他任何地址都不匹配。但是这只考虑了普通的字符串形式。谷歌确实提到了威廉斯堡的第一个地址。