2016-05-16 46 views
-1

當從某個Web服務搜索中檢索到地址時,您會得到多個結果以顯示相同的實際位置。例如,"Reverse Geocoding API" by Google,例如,從文檔:字符串度量/相似性/度量:確定相同的地理位置(街道地址)

「277貝德福德大道,紐約布魯克林11211,USA」

「俠盜聖/貝德福德大道,布魯克林,NY 11211,USA」

「聖大/貝德福德大道,布魯克林,NY 11249,USA」

「貝德福德AV /聖大紐約布魯克林11211,USA」

「布魯克林,紐約11211,USA」

「布魯克林威廉斯堡,NY,USA」

想我只需要1和最詳細的一個選擇,那麼天真的解決方案是返回一個最大的字符。

但就在它之前,我想驗證所有的選項實際上是描述相同的地方。相應的CS主題是String metric。我如何在這個任務上應用這些算法?一些問題,爲什麼大多數指標在這種情況下不適用:

  1. 單詞的順序不一樣。

  2. 並非所有必需的詞都應出現,例如描述符「St.」等

感謝,

回答

1

我就不會在這裏簡單地比較字符串。嘗試分析地址並識別組件。例如,在

277貝德福德大道,紐約布魯克林11211,USA

你可以看到:

  • 用逗號分隔的項目代表不同的實體,雖然物品不分開的威力也是不同的概念。
  • 較早的項目代表較小的區域,後面的項目較大。您在街道,街道,城市,州和國家有特定的位置。最後一個項目並不總是國家,但是您可以根據國家列表進行覈對,並且只有在考慮其他選項時纔會失敗。同樣,州代碼列表可以讓你識別紐約州。
  • 接近結尾的長數字序列可能是一個郵政編碼。
  • 一個短的(ish)數字(總是要注意像'th'和'st'這樣的後綴)可能是一個街道號。

等等之間。然後你有一個語義表示。可以肯定地說,大多數地址都是用這種方式寫的。詢問你地址的表格通常具有相同的字段。

(實際上,在谷歌的情況下,你甚至不必摸不着頭腦爲自己,他們會告訴你是什麼成分,他們也告訴你最具體的事情是什麼。)

對於下一個,類似的事情適用,但它更復雜:

大街/貝德福德大道,布魯克林,NY 11211,USA

「大道」和「聖」需要被轉化爲「大道'和'街道'。斜線的含義不明確。我們可以像逗號一樣對待它,並將「Grand St」和「Bedford Av」視爲兩種不同的信息。但是從他們的立場和「街道」和「大道」這兩個字,我們知道這兩者都代表着同一種東西。所以,讓我們說這個地方有兩條街道,並且保留這​​個開放的確切含義。也許這是一個角落,也許同一條街上有兩個名字。

現在,當您比較前兩個實體時,您知道它們具有相同的國家,郵政編碼,州和城市,所以這是一個好的開始,但這不是很具體。第一個街道在第二個街道中提到,這很好。第二個提到額外街道的事實並不是一個真正的問題。問題將出現在街道(A, B)(B, C)的兩個地方。街道號碼不在那裏,但這僅僅意味着第二個位置不太具體,所以它就像第一個位於第二個位置。

您可以放心地斷定第二,第三和第四個地址都是一樣的。只有郵政編碼不同,而且有時會發生這種情況(郵政編碼很奇怪),其他地方有太多相同的地方用於解散比賽。此外,郵政編碼在數字上也很接近。如果國家或國家不同,那麼它們不應該匹配,但可能會創建一個警報,以便通知人類並可以查看是否有問題。還要確保你有一個合適的詞典對同一個地方的不同名字進行歸一化處理,例如紐約==紐約。對於第四個地址,我們知道如何將其識別爲擁有兩條街道,而我們可以無視秩序(將街道視爲一組)。

第五個地址對於較小的區域來說再次只是較少的信息,因此它包含以前的地址。請注意,如果您只比較他們不匹配的第三個和第五個地址。這表明,當您匹配前兩個地址時,您應該「合併」它們並注意兩個郵政編碼可能被視爲等同。後來甚至可以說「美國紐約布魯克林11211」和「美國紐約布魯克林11249」相匹配。

最後的地址與任何其他地址都不匹配。但是,這只是考慮純字符串形式。谷歌確實提到威廉斯堡的第一個地址。