如何从文本字符串php中识别地址位置?

时间:2017-01-16 15:44:53

标签: php regex nlp google-geocoding-api street-address

我正在尝试使用xampp上的php从一长串文本中识别并提取任何输入地址位置(不限于US - SmartyStreet)。

我已经阅读了几个关于如何执行此操作的主题/库,这些主题/库围绕使用NLP,Google的地理编码API和正则表达式来执行上述任务。这3个链接是一些可能有用的链接,可能对Link 1Link 2Link 3/GitHub Library(Seems Promising)有帮助。

但是,我不知道这些链接是否对实施有任何帮助?任何人都可以帮助我吗?

1 个答案:

答案 0 :(得分:5)

这肯定是地址解析的圣杯。攻击此项目时需要考虑的一些事项。首先,每个国家都可以有自己特定的寻址格式。尽管它很好,但没有标准的寻址格式。

以下是地址格式的一些很好的汇编,但即使这些也并不总是一致:

Address formats by Informatica

Address formats by Universal Postal Union

Address formats by a guy who has spent a lot of time thinking about this kind of stuff

第1步 - 熟悉每个国家/地区的所有可能的地址格式后,您可以对相似的格式进行分组,并为每个组创建一个正则表达式。

第2步 - 这很关键。尽一切可能确定地址可能涉及的国家/地区。这将让您知道要使用哪个正则表达式。如果你不能这样做,你可能会得到许多不同的地址候选人。

第3步 - 使用正则表达式,扫描源文本以确定潜在的视野,地址的起点和终点。在美国,地址通常以门牌号开头,以邮政编码(5或9或11位数字)结尾。在德国,地址通常以街道名称开头,以城市/州或邮政编码结束。

第4步 - 现在,根据您对该国家/地区格式模式的理解,扫描该地址候选项以确定地址的各个组成部分。找到以下组件:

  • 主号码
  • 街道预定向(有助于获得所有可能值的索引)
  • 街道名称(有助于获得所有可能值的索引)
  • 街道后缀(有助于获得所有可能值的索引)
  • street post-directional (有助于获得所有可能值的索引)
  • 辅助号码指示符(有助于获得所有可能值的索引)
  • 次要号码
  • city (有助于获得所有可能值的索引)
  • (有助于获得所有可能值的索引)
  • 邮政编码

(还有更多,但这是一个好的开始)

第5步 - 如果您只想确定一个看起来像地址的字符串,那么您就完成了。将此字符串输入地理编码工具并获取与其对应的纬度/经度。 Google MapsOpenStreetMap应该可以帮到你。

如果您想知道某个地址是否真正有效(如与权威数据集中的已知条目匹配,如本地邮局),那么您需要使用地址验证工具,就像您要使用的那样。通过简单的谷歌搜索找到:

Google Search: "address validation"

完全披露:我花了很多时间思考这个话题,试图找到解决问题的不同方法,并向很多人解释。我整天都在SmartyStreets工作。