2012-04-13 126 views
7

我正在使用Java 6.我正在尋找一種自動化的方式來解析地址。我不關心地址是否存在。我發現最好的辦法是JGeocoder(V 0.4.1),但JGeocoder無法解析這樣的地址有沒有Java解析器,可以解析這樣的地址

16th Street Theater, Berwyn Cultural Center, 6420 16th St. 

有誰知道一個免費的Java地址解析器是應對這一挑戰的?通過「解析」,我的意思是能夠區分街道,城市,州,郵政編碼以及潛在的場地名稱(上述場地名稱是「第16街劇院,伯文文化中心」)。

+6

祝你好運。這是一個衆所周知的極其困難的問題,主要是因爲地址格式的種類繁多。在80年代完成了很多這種類型的工作後,我可以保證沒有完美的(甚至99%完美)解決方案。對於不同的國家,甚至是一個國家內的地區,您需要不同的解析規則,還需要一個大型的例外字典。如果您僅限於美國地址,美國郵政服務網站可能會提供幫助。 – 2012-04-13 19:35:19

回答

0

如果允許web服務,您可以嘗試谷歌地圖。

+2

TOS不允許自動查詢。 – Matt 2012-04-13 19:23:13

6

更新:此主題在this StackOverflow question中有更詳盡的介紹。


我爲SmartyStreets,我們分析和處理工作地址,我們有一個答案。這就是我們所說的「SLAP」或Single-Line Address Parsing (or Processing)。正式的術語是Named Entity Recognition (NER)

我不是Java庫的專家,但我知道任何內部實現都不會達到預期。以下是我曾幫助過的人遇到的一些常見原因:

  • Google/Yahoo!/Bing Maps Web服務不允許自動查詢,也不會驗證解析地址的準確性。

  • 內部代碼也可以做出最好的猜測,但不知道現有地址(數據庫)或其他類型的官方來源。我知道你想要一個圖書館,可以做到這一點在內部,但你最多可以猜測...

  • 順便說一下,正則表達式是不是的答案。我已經看到解析地址的最好的正則表達式是通過數百行代碼和幾個類動態生成的。這是一團糟,並且只適用於期望的地址類型,並非實際存在的所有有效(美國)格式。

這是一項令人難以置信的複雜任務......除非您擁有合適的工具。我們的其中一項服務名爲LiveAddress API,與谷歌地圖類似,它解析地址並對其進行地理編碼,但通過CASS認證並僅返回有效的地址,這幾乎與輸入格式無關。

我鼓勵你自己做一些研究,但這可能是最有效和最可靠的方法。

+0

正如我擔心的那樣,這項服務並不是免費的。我沒有把這個標記爲正確的,只是我指定了我正在尋找一些免費的東西。不過,也許你會得到一些很好的促銷,因爲人們通過谷歌找到這個答案。 – Dave 2012-04-14 18:04:59

+0

其實它是免費的;如果您選擇比默認值250 /月更高的查詢限制,則只會花錢。但是,當然,你應該找到一些東西來滿足你的需求。讓我們知道你決定如果你找到別的東西! – Matt 2012-04-14 19:11:44

3

https://code.google.com/p/usaddressparser/解析美國地址字符串並將其拆分爲字段(數字,街道,套房,城市,郵編等)。 Java jar和源碼

+1

看來這個項目頁面已經創建,並且一行代碼從未寫過 – jordanpg 2015-01-09 15:14:23

+0

實際上,有代碼,它只是埋在一個zip文件中 – slf 2015-03-31 18:55:28