2012-04-03 36 views
-1

我正在尋找任何可以解析一個正常的文本字符串地址的Java庫。該文本可以包含所有類型的特殊和非特殊:(字符,但我真的想要拉出原始字符串是一個粗略的地址字符串。在Java中良好的地址/字符串解析庫?

換句話說,我將如何拉出地址隨機的字符串,其中包含一個地址somehwere?格式並不重要,只要輸出已獲得街道和號碼在某處。如果沒有任何庫,你會使用正則表達式嗎?

+1

您需要提供有關輸入字符串的更多詳細信息。它保證是一個包含單個地址的字符串,而不是其他任何東西?它是一個包含單個地址的段落嗎?字符串中可以有多個地址?潛在問題的範圍從中等簡單(如果輸入非常有限)到潛在困難(考慮在可以任意語言的文本頁面中查找所有有效國際地址的問題)。 – 2012-04-03 19:10:48

+1

@StuartGolodetz我認爲你的陳述中的後者是真實的 - 他說他想從「隨機字符串」中提取地址,所以我認爲可以肯定地說,他只是想找到任何可以擺脫大堆的地址的字符。沒有關於輸入字符串的更多信息是必要的。 – CodeBlind 2012-04-03 19:24:59

+0

街道地址?對於哪些國家? – 2012-04-03 19:29:22

回答

2

我不知道任何這樣做的庫......但是,這聽起來像是一個出色的人工智能問題:)

如果您有ASCII/Unicode形式的任何現有地址簿,從根本上使用它們生成正則表達式模式,然後針對隨機文本運行所有已知的地址正則表達式模式,並查看出現的內容。這樣你就可以根據已知的地址格式「教」你的算法如何運行。我懷疑,如果有任何圖書館確實存在這種事情,這可能是他們如何做的,因爲可能有不同的方式來格式化街道地址。

一個例子可能是在典型的美國街道地址。例如:

1234 Main St. NW, Some City, ST, 12345 //[ST] = two-letter state abbreviation 

你可以寫一個正則表達式來查找兩個數字和一箇中間狀態縮寫。當然,這隻適用於美國的街道地址,它不會抓住所有的地址,並且你必須小心地限制你的正則表達式以避免誤報,但是你可以將該正則表達式添加到你的可能性列表中。

+0

這是一個很好的解決方案,以及我如何開始實施解決方案。國家縮寫實際上並不能保證,所以我使用邏輯來尋找一個純數字(街道號碼),然後「記錄」令牌,直到我找到一個通用的街道地址(從USPS官方街道末端獲得)。大部分時間,但是一些縮寫是有問題的(例如,BY爲bayou)。 upvoted,但我離開這個打開,希望有人仍然會有一個殺手正則表達式庫或解析庫,謝謝你的答案!如果沒有更多的答案,我會在幾天內接受。 – 2012-04-05 17:39:42