当从某个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。如何在此任务中应用这些算法?大多数指标在这种情况下不适用的一些问题:
单词的顺序不一样。
并非所有必要的单词都应出现,例如描述符" St。"等
谢谢,
答案 0 :(得分:1)
我不会简单地在这里比较字符串。尝试分析地址并识别组件。例如,在
中277 Bedford Avenue,Brooklyn,NY 11211,USA
你可以看到:
等等。然后你有一个语义表示。可以肯定地说,大多数地址都是以这种方式编写的。询问您地址的表格通常具有相同的字段。
(实际上,对于Google来说,你甚至不必为自己解决这个问题,他们会告诉你这些组件是什么。他们还告诉你最具体的东西。)
对于下一个,类似的事情适用,但它更复杂:
Grand St / Bedford Av,Brooklyn,NY 11211,USA
'平均'和' St'需要转变成大道'和' Street'。斜线的含义尚不清楚。我们可以像逗号一样对待它并考虑" Grand St"和"贝德福德Av"是两个不同的信息。但是从他们的立场和#34; Street"和" Avenue",我们知道两者都代表着同样的东西。所以,让我们说这个地方有两条街道,并留下那条开放的确切含义。也许它是一个角落,也许同一条街有两个名字。
现在,当您比较前两个实体时,您知道它们具有相同的国家/地区,邮政编码,州和城市,因此这是一个良好的开端,但这并不是非常具体。第二个街道在第二个街道中提到,这样很好。事实上,第二个人提到一条额外的街道并不是一个真正的问题。街道(A, B)
和(B, C)
有两个问题。街道号码不存在,但这只是意味着第二个位置不太具体,所以它就像第一个位置包含在第二个位置。
您可以放心地得出结论,第二,第三和第四个地址都是相同的。只有邮政编码有所不同,有时会发生这种情况(邮政编码很奇怪),在其他地方有太多相同的东西来解雇匹配。邮政编码也在数字上非常接近。如果国家或州不同,那么他们就不应该匹配,但可能会创建一个警报,以便通知人,并查看是否有问题。还要确保您有一个正确的字典,为同一个地方标准化不同的名称,例如纽约==纽约。对于第四个地址,我们知道如何将其识别为有两条街道,我们可以忽略顺序(将街道视为一组)。
对于较小的区域,第五个地址再次只是较少的信息,因此它包含以前的地址。请注意,如果您只比较它们不匹配的第三个和第五个地址。这表明,当您匹配前两个地址时,您应该合并'他们并注意到两个邮政编码可能被认为是等同的。然后,甚至可以说"布鲁克林,纽约州11211,美国"和"布鲁克林,纽约11249,美国"匹配。
最后一个地址与其他任何地址都不匹配。但是这只考虑了普通的字符串形式。谷歌确实提到了威廉斯堡的第一个地址。