我想从输入的地址中识别并提取任何地址(不限于美国--)。SmartyStreets在我的xampp上使用php从一长串文本中提取一个字符串。
我读了几个关于如何做到这一点的主题库,其中围绕着使用NLP,Google的地理编码API和regex来执行上述任务。这3个链接是一些可信的链接,可能会有帮助。链接1, 链接2, 链接3GitHub库(似乎很有前途).
但是,我不知道这些链接对实施是否有帮助?有谁能帮助我吗?
这是地址解析的圣杯,肯定的。 在攻克这个项目的时候,有几点需要考虑。 首先,每个国家可以有自己特定的地址格式。 尽管这很好,但没有标准的地址格式。
这里有一些很好的地址格式汇编,但即使这些也不总是一致的。
第1步 - 一旦你熟悉了每个国家的所有可能的地址格式,你就可以将相似的格式进行分组,并为每个组创建一个regex。
第2步 - 这是至关重要的。 尽一切可能确定地址可能涉及的国家。 这将让你知道该使用哪种regex。 如果你不能做到这一点,你可能最终会有许多不同的地址候选。
第3步 - 使用您的regex,扫描源文本,以确定地址的潜在范围,开始和结束点。 在美国,地址通常以房屋号码开始,以邮政编码结束(5、9或11位)。 在德国,地址通常以街道名称开始,以城市州或邮政编码结束。
第4步--现在扫描该地址候选者,根据你对该国家格式模式的理解,确定该地址的各个组成部分。 找到以下组成部分。
(还有很多,但这是一个好的开始)
第五步--如果你只想确定一个看起来像地址的字符串,你就可以了。 将这个字符串输入地理编码工具,并得到与之对应的纬度。 谷歌地图 或 OpenStreetMap 应该可以帮你完成这个任务。
如果你想知道一个地址是否真的有效(如在一个权威的数据集中匹配一个已知的条目,如当地邮局),那么你将需要使用一个地址验证工具,像一个简单的谷歌搜索,你会发现。
完全公开:我花了很多时间来思考这个非常的话题,试图找到不同的方法来解决它,并向很多人解释它。 我在SmartyStreets整天从事国际地址工作。