我正在开发一个Twitter机器人,它会监听如下所示的推文:
Hey @twitterbot, 我正在寻找123 Main Street, New York附近的餐馆
或者,另一个例子:
@twitterbot, Yonge & Dundas, Toronto附近有什么?我饿了!
然后它会回复这些问题所期望的数据类型。我已经解决了大部分问题,但我在一个不应该很难的事情上卡住了;从推文中提取地址。
我会将地址转发给一个地理编码服务来获取经纬度,所以我无需以任何方式格式化或准备地址;我只需要将它从不相关的文本中隔离出来,比如“我正在寻找附近的餐馆”或“我饿了!”。
有没有可以在一段文本中执行地址识别功能的NLP工具?有没有其他方法的建议?因为Google的地理编码器可以处理如此广泛的地址格式(甚至像“多伦多的伊顿中心”这样的兴趣点也算作地址),我无法使用正则表达式来提取地址。
换句话说,我只想删除任何不属于地址的文本。
我寻找的地址需要适用于美国/加拿大。
在StackOverflow上有一些类似的问题,但我找不到任何解决这个确切问题的答案。因为Google的地理编码器非常宽容,解决方案不必完美,它只需要去除足够的干扰,使Google明白我在说什么即可。
我对NLP非常新手,所以我很感激任何关于这个主题的指导。
回答:
如何从文本中解析自由格式的街道/邮政地址,并将其分解成组件回答了“有没有办法将地址从周围的文本中隔离出来并分解成各个部分?”这个问题——这基本上与你的问题相同(除了你不关心将其分解成各个部分——只需将其与文本的其余部分隔离即可)。
SmartyStreets也有一个很好的演示,网址是https://smartystreets.com/demo?mode=extract,但遗憾的是不是免费的解决方案。
另一个快速的想法——由于Twitter帖子限制在140个字符内,并且通常包含很少的词(你的两个例子分别有9个和12个词),你可以设想直接强行解决。例如,要获取“@twitterbot, Yonge & Dundas, Toronto附近有什么?我饿了!”中的位置,你可以将以下所有内容发送给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,
等等,对于所有可能的由完整词组成的子字符串。