使用自然语言处理从推特中提取地址

7
我正在开发一个Twitter机器人,该机器人将监听以下类似的推文:
Hey @twitterbot, I'm looking for restaurants around 123 Main Street, New York

或者,另一个例子:
@twitterbot, what's near Yonge & Dundas, Toronto? I'm hungry!

然后它会回复出你预期问题返回的数据类型。我已经解决了大部分的问题,但却卡在了一些本应不难的地方;就是从推特中提取地址。
我将把地址转发给一个地理编码服务来获取经纬度,所以我不需要格式化或准备地址;我只需要将其与无关的文本如“我正在寻找附近餐厅”或“我饿了!”等隔离开来。
是否有任何自然语言处理工具可以在一段文本块中执行地址识别?或者有其他方式可以解决吗?由于Google的地理编码器处理各种各样的地址格式(甚至包括像“多伦多伊顿中心”这样的兴趣点),因此我无法使用正则表达式来提取地址。
换句话说,我只想删除不属于地址的任何文本。
我要寻找的地址需要适用于美国/加拿大。
在StackOverflow上有一些类似的问题,但没有一个能解决我能找到的这个确切的问题。因为Google的地理编码器很宽容,所以解决方案不必完美,只需去除足够多的噪声,使Google知道我想说什么即可。
我对自然语言处理非常新手,所以我会感激任何关于这个问题的指导。
2个回答

6

如何将自由格式的街道/邮政地址从文本中解析出来并分成组件 回答了问题“是否有一种方法可以将地址与周围的文本隔离开,并将其分成部分?”——这本质上是与您的问题相同的问题(除了您不关心将其分成部分,只是将其与其他文本隔离开)。

SmartyStreets 还提供了一个不错的演示网站:https://smartystreets.com/demo?mode=extract,但不幸的是它不是免费的解决方案。

另一个快速的想法——由于 Twitter 帖子限制在 140 个字符以内,而且往往包含很少的单词(您的两个示例分别有 9 和 12 个单词),您可以直接使用 brute-force 方法。例如,要在 "@twitterbot, what's near Yonge & Dundas, Toronto? I'm hungry!" 中获取位置,您可以将所有以下内容发送给 Google 地理编码器-

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

what's near Yonge & Dundas, Toronto? I'm

what's near Yonge & Dundas, Toronto?

what's near Yonge & Dundas,

等等,对于由完整单词组成的所有可能子字符串。


谢谢Gabriel!你给了我一些想法。我没有考虑过暴力方法,但考虑到推文长度的限制,这是完全可行的! - Joshua Comeau

3

请看这里: http://geocoder.ca/?locate=Hey+%40twitterbot%2C+I%27m+looking+for+restaurants+around+123+Main+Street%2C+New+York&geoit=xml&parse=1

该链接是关于编程和地理位置的,它可以让你搜索纽约市123 Main Street附近的餐厅。请注意保留原文中的HTML标签。
<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+我正在寻找纽约市123 Main Street附近的餐厅

感谢您发布这篇文章。理论上,这是一个非常好的工具,特别是对于一个免费/非常便宜的工具来说。不幸的是,它很容易出现故障。至少它有一个置信度分数。例如,在网页上,电话号码通常会与地址附近出现,而这个API几乎总是使用电话号码的一部分作为街道号码,例如我从Yelp上复制的联系信息卡中的这段文本:http://geocoder.ca/?locate=Business%20website%20http://www.joespizzanyc.com%20Phone%20number%20(212)%20366-1182%20Get%20Directions%207%20Carmine%20St%20New%20York,%20NY%2010014&geoit=xml&parse=1 - Joel Mellon
我从 https://geocoder.ca/?locate=Business%20website%20http://www.joespizzanyc.com%20Phone%20number%20(212)%20366-1182%20Get%20Directions%207%20Carmine%20St%20New%20York,%20NY%2010014&geoit=xml&parse=1 得到以下数据:<geodata> <latt>40.729519</latt> <longt>-74.005138</longt> <AreaCode>212,917,646</AreaCode> <TimeZone>America/New_York</TimeZone> <standard> <stnumber>1182</stnumber> <staddress>Carmine St</staddress> <city>New York</city> <prov>NY</prov> <postal>10014</postal> <confidence>0.4</confidence> </standard> </geodata> - Ervin Ruci
是的,由于它是非确定性的,结果可能会有所不同™。 - Joel Mellon

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接