2015-07-11 84 views
3

我建立一個Twitter的機器人將偵聽鳴叫像下面提取地址:使用自然語言處理,從鳴叫

Hey @twitterbot, I'm looking for restaurants around 123 Main Street, New York 

,或者另外一個例子:

@twitterbot, what's near Yonge & Dundas, Toronto? I'm hungry! 

它然後,我們會回覆您希望這些問題返回的數據。我已經解決了大部分問題,但是我堅持不應該那麼辛苦的事情;從推文中提取地址。

我會將地址轉發到地理編碼服務以獲取緯度/經度,所以我不需要以任何方式格式化或準備地址;我只需要將它與「我正在尋找餐館」或「我餓了!」等無關文本隔離開來。

是否有任何NLP工具可以在文本塊中執行此地址識別?任何建議的另一種方式去了解它?由於谷歌的地理編碼器處理如此廣泛的地址格式(即使像'伊頓中心,多倫多'這樣的興趣點被視爲地址),我不能使用正則表達式來抽取地址。

換句話說,我只是想刪除不屬於地址的任何文本。

我正在尋找的地址需要爲美國/加拿大工作。

在StackOverflow上有一些類似的問題,但沒有解決這個確切的問題,我可以找到。由於Google的地理編碼器如此寬容,該解決方案不一定非常完美,它只需要擺脫足夠的模糊,以便Google知道我想說的是什麼。

我對NLP非常陌生,所以我會很感激這方面的任何指導。

回答

4

How to parse freeform street/postal address out of text, and into components回答「有沒有辦法將地址與周圍的文本隔離並將其分解成碎片?」 - 這與你的問題基本上是一樣的(除非你不在乎把它分成幾塊 - 只是把它和文本的其他部分隔離開來)。

SmartyStreets也有一個很好的演示https://smartystreets.com/demo?mode=extract,但不幸免費的解決方案。

另一個快速思考 - 由於Twitter帖子限制爲140個字符,並且往往含有很少的詞(你的兩個例子分別有9個和12個詞),所以你可以設想只是蠻橫的。例如,在獲得位置「?@twitterbot,什麼是央&近登打士,多倫多我餓了!」,您可以發送以下所有的谷歌地理編碼器 -

什麼是央&登打士附近,多倫多?我餓了!

Yonge附近有什麼&多倫多登打士?我是

Yonge附近有什麼&多倫多Dundas?

什麼是央&登打士附近,

等爲完整的單詞組成的所有可能的子字符串。

+0

感謝加布裏埃爾!你給了我一些想法。沒有想到一種暴力方法,但考慮到有限的tweets的長度是完全可行的! –

1

在這裏你去: http://geocoder.ca/?locate=Hey+%40twitterbot%2C+I%27m+looking+for+restaurants+around+123+Main+Street%2C+New+York&geoit=xml&parse=1

<geodata> 
<latt>40.5119365</latt> 
<longt>-74.2493562</longt> 
<AreaCode>347,718</AreaCode> 
<TimeZone>America/New_York</TimeZone> 
<standard> 
    <stnumber>123</stnumber> 
    <staddress>Main ST</staddress> 
    <city>STATEN ISLAND</city> 
    <prov>NY</prov> 
    <postal>11385</postal> 
    <confidence>0.9</confidence> 
    </standard> 
</geodata> 

http://geocoder.ca/?locate=Hey+%40twitterbot%2C+I%27m+looking+for+restaurants+around+123+Main+Street%2C+New+York