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

How to identify address location from text string php?

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

我已经阅读了一些关于如何做到这一点的 topics/libraries,它们围绕着使用 NLP、Google 的地理编码 API 和正则表达式来执行上述任务。这 3 个 link 是一些似是而非的 link,可能有助于 Link 1, Link 2, Link 3/GitHub Library(Seems Promising)

不过,不知道这些link对实现有没有帮助?有人可以帮我吗?

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

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

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 位数字)结尾。在德国,地址通常以街道名称开头,以 city/state 或 post 代码结尾。

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

  • 主号
  • 街道pre-directional(有助于获得所有可能值的索引)
  • 街道名称(有助于获得所有可能值的索引)
  • 街道后缀(有助于获得所有可能值的索引)
  • 街道post-directional(有助于获得所有可能值的索引)
  • 辅助号码指示符(有助于获得所有可能值的索引)
  • 二级数
  • 城市(有助于获得所有可能值的索引)
  • 状态(有助于获得所有可能值的索引)
  • post代码

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

第 5 步 - 如果您只想确定一个看起来像地址的字符串,您就完成了。将此字符串输入地理编码工具并获取与其对应的 lat/lon。 Google Maps or OpenStreetMap 应该可以为您解决问题。

如果您想知道一个地址是否真的有效(例如与权威数据集中的已知条目相匹配,例如本地 post 办公室),那么您需要使用地址验证工具,就像您可以通过简单 google 搜索找到的那样:

Google Search: "address validation"

完全公开:我花了很多时间思考这个话题,试图找到解决它的不同方法,并向很多人解释。我整天在 SmartyStreets 工作国际地址。