使用自然语言处理从推文中提取地址
Using natural language processing to extract an address from a tweet
我正在构建一个 Twitter 机器人,它将侦听如下推文:
Hey @twitterbot, I'm looking for restaurants around 123 Main Street, New York
或者,另一个例子:
@twitterbot, what's near Yonge & Dundas, Toronto? I'm hungry!
然后它会回复您希望这些问题 return 的数据类型。我已经解决了大部分问题,但是我被困在了一些不应该那么难的事情上;从推文中提取地址。
我会将地址转发到地理编码服务以获取 lat/lng,因此我不需要以任何方式格式化或准备地址;我只需要将它与 "I'm looking for restaurants around" 或 "I'm hungry!".
等不相关的文本隔离开来
是否有任何 NLP 工具可以在文本块中执行此地址识别?对另一种方法有什么建议吗?因为 Google 的地理编码器可以处理如此广泛的地址格式(即使像 'The eaton centre, Toronto' 这样的兴趣点也算作地址),我无法使用正则表达式提取地址。
换句话说,我只想删除不属于地址的任何文本。
我要查找的地址需要为US/Canada工作。
Whosebug 上有一些类似的问题,但 none 解决了我能找到的这个确切问题。因为 Google 的地理编码器是如此宽容,解决方案不必是完美的,它只需要消除足够多的模糊,以便 Google 知道我想说什么。
我是 NLP 的新手,因此非常感谢有关该主题的任何指导。
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 & Dundas 附近有什么?我饿了!”中的位置,您可以将以下所有内容发送到 google 地理编码器 --
多伦多央街和登打士附近有什么?我饿了!
多伦多央街和登打士附近有什么?我
多伦多 Yonge & Dundas 附近有什么?
央街和登打士附近有什么,
等对于所有可能由完整单词组成的子串。
<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>
我正在构建一个 Twitter 机器人,它将侦听如下推文:
Hey @twitterbot, I'm looking for restaurants around 123 Main Street, New York
或者,另一个例子:
@twitterbot, what's near Yonge & Dundas, Toronto? I'm hungry!
然后它会回复您希望这些问题 return 的数据类型。我已经解决了大部分问题,但是我被困在了一些不应该那么难的事情上;从推文中提取地址。
我会将地址转发到地理编码服务以获取 lat/lng,因此我不需要以任何方式格式化或准备地址;我只需要将它与 "I'm looking for restaurants around" 或 "I'm hungry!".
等不相关的文本隔离开来是否有任何 NLP 工具可以在文本块中执行此地址识别?对另一种方法有什么建议吗?因为 Google 的地理编码器可以处理如此广泛的地址格式(即使像 'The eaton centre, Toronto' 这样的兴趣点也算作地址),我无法使用正则表达式提取地址。
换句话说,我只想删除不属于地址的任何文本。
我要查找的地址需要为US/Canada工作。
Whosebug 上有一些类似的问题,但 none 解决了我能找到的这个确切问题。因为 Google 的地理编码器是如此宽容,解决方案不必是完美的,它只需要消除足够多的模糊,以便 Google 知道我想说什么。
我是 NLP 的新手,因此非常感谢有关该主题的任何指导。
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 & Dundas 附近有什么?我饿了!”中的位置,您可以将以下所有内容发送到 google 地理编码器 --
多伦多央街和登打士附近有什么?我饿了!
多伦多央街和登打士附近有什么?我
多伦多 Yonge & Dundas 附近有什么?
央街和登打士附近有什么,
等对于所有可能由完整单词组成的子串。
<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>