2017-01-16 114 views
1

我試圖從我的xampp上使用php的長文本字符串中識別並提取任何輸入地址位置(不限於美國-SmartyStreet)。如何從文本字符串php中識別地址位置?

我已經閱讀了關於如何做到這一點的幾個主題/庫,它圍繞使用NLP,Google的Geocoding API和正則表達式來執行上述任務。這3個鏈接是一些似乎合理的鏈接,可能有助於Link 1,Link 2,Link 3/GitHub Library(Seems Promising)

但是,我不知道這些鏈接是否對實現有幫助?任何人都可以幫助我嗎?

回答

3

當然,這是地址解析的聖盃。攻擊這個項目時需要考慮的幾件事情。首先,每個國家都可以有自己特定的地址格式。儘可能好,沒有標準的尋址格式。

下面是地址格式一些好的編輯,但即使是這些並不總是同意:

Address formats by Informatica

Address formats by Universal Postal Union

Address formats by a guy who has spent a lot of time thinking about this kind of stuff

第1步 - 一旦你已經熟悉爲每個國家提供所有可能的地址格式,您可以將相似的格式分組併爲每個組創建一個正則表達式。

第2步 - 這很關鍵。盡你所能確定地址可能屬於的國家。這會讓你知道要使用哪個正則表達式。如果你不能這樣做,你可能會得到許多不同的地址候選人。

第3步 - 使用您的正則表達式,掃描源文本以確定潛在地平線,地址的開始點和結束點。在美國,地址通常以房屋號碼開頭,並以郵政編碼(5或9或11位數字)結尾。在德國,地址通常以街道名稱開頭,並以城市/州或郵政編碼結尾。

步驟4 - 根據您對該國家格式化模式的理解,現在掃描該候選地址以確定地址的各個組件。找到以下組件:

  • 主號
  • 街道前方向(幫助有所有可能的值的指數)
  • 街道名稱(幫助有所有可能的索引值)
  • 街道後綴(幫助有所有可能的值的指數)
  • 街道後方向(有助於有所有可能的值的索引)
  • 次級號指示器(有助於有所有可能的值的索引)
  • 輔助號碼
  • 城市(有助於有一個索引所有可能的值的狀態的
  • (有助於有所有可能的值的索引)
  • 郵政編碼

(有很多,但是這是一個良好的開端)

第5步 - 如果你只是想確定一個字符串,它看起來像一個地址,你就大功告成了。將此字符串饋入地理編碼工具並獲取與其對應的緯度/經度。 Google MapsOpenStreetMap應該可以爲你做詭計。

如果您想知道某個地址是否真的有效(例如匹配權威數據集中的已知條目,如當地郵局),那麼您需要使用地址驗證工具, LL用一個簡單的谷歌搜索發現:

Google Search: "address validation"

全面披露:我花了很多時間思考這個題目,試圖找到不同的方法來解決它,它解釋了很多人。我整天在SmartyStreets工作國際地址。