我正在尝试使用xampp上的php从一长串文本中识别并提取任何输入地址位置(不限于US - SmartyStreet)。
我已经阅读了几个关于如何执行此操作的主题/库,这些主题/库围绕使用NLP,Google的地理编码API和正则表达式来执行上述任务。这3个链接是一些可能有用的链接,可能对Link 1,Link 2,Link 3/GitHub Library(Seems Promising)有帮助。
但是,我不知道这些链接是否对实施有任何帮助?任何人都可以帮助我吗?
答案 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步 - 现在,根据您对该国家/地区格式模式的理解,扫描该地址候选项以确定地址的各个组成部分。找到以下组件:
(还有更多,但这是一个好的开始)
第5步 - 如果您只想确定一个看起来像地址的字符串,那么您就完成了。将此字符串输入地理编码工具并获取与其对应的纬度/经度。 Google Maps或OpenStreetMap应该可以帮到你。
如果您想知道某个地址是否真正有效(如与权威数据集中的已知条目匹配,如本地邮局),那么您需要使用地址验证工具,就像您要使用的那样。通过简单的谷歌搜索找到:
Google Search: "address validation"
完全披露:我花了很多时间思考这个话题,试图找到解决问题的不同方法,并向很多人解释。我整天都在SmartyStreets工作。