拼写检查街道地址的最佳方法是什么?


What is the best way to spellcheck street address?

在导入新地址到我的数据库时,我做一个拼写检查,看看街道是否已经存在(新街道只是拼写错误)。

我们目前在MySQL查询中使用Levenshtein方法来查找相似的街道名称。问题是街道号码。地址中包含街道号码确实降低了相似度搜索/拼写检查的速度。

的例子:

街道abc 34
街abc 37
街abc 39

这些街道名称拼写正确,但Levenshtein方法认为由于街道编号,它们拼写错误。

我们已经开发了一个PHP函数,它接受第一位数字之后(包括第一位数字在内)的任何内容,并将其放在另一列中。

对于以街道编号结尾的街道可以正常工作,但对于以街道编号开头的国家不适用。

我想知道是否有人在类似的问题上工作过?


解决方案是一个商店定位器网站,我目前正在研究模块,将导入商店列表。

一个解决方案是使用谷歌地图API,看看是否返回地理地址。

噢,通用地址是一个极其困难的问题。我的建议是,执行您所能容忍的最少数量的验证。

如果这是为了运输的目的,例如,只使用下拉菜单的东西,将决定运输成本,例如。如果不同的国家有不同的运输成本,只需提供一个没有验证的自由格式文本区域和国家下拉框。如果用户不会拼写他们的地址,那就太倒霉了。你可以让负责送货的人"人工"验证地址。快递公司和邮政公司大多会把包裹送到拼写错误的地址(Randomcountry的邮政公司可能比你更清楚他们的街道名称)。

如果您确实需要精确的地址,请尝试找到第三方解决方案。使用谷歌地图API可能有效,并且存在付费解决方案。

考虑到你的算法,下面的解决方案浮现在脑海中;只需使用正则表达式来剥离数字(甚至非字母)。但是,请记住,有些正确的街道名称数字(例如NY's 9th Avenue)。

您可以使用Fedex, UPS, USPS的APi,并验证地址。很多电子商务网站的送货地址都是这样的……这就是为什么有时你可能会看到

"你是指这个地址吗?"

这是一个非常常见的问题。例如,您可以有多个地址,它们都表示相同的物理位置,但结构不同。例如:

100 North 250 West100 North 250W100北250西100北纬250西北纬100度西经250度100 North 250 West

根据美国邮政服务,标准化的地址是100n250w。只有将这些地址解析为标准化格式,才能准确地删除重复的地址,并确保结果的一致性。

如果没有一些额外的上下文,

地址很难标准化。我所指的上下文是该国所有有效/可交付地址的最新总列表。这实际上不是以列表格式提供的(它将是巨大的),但可以作为API访问。美国邮政服务提供了他们的API,还有其他公司利用USPS的数据,并通过他们自己的API来增强它。这些改进通常是更快的服务和有保证的正常运行时间,以及额外的地址处理功能和更多关于地址的返回数据。

因此,快速回答,对街道地址进行拼写检查的最佳方法是使用API来验证完整的地址。

为了充分披露,我是SmartyStreets的创始人,我们做地址验证。如果你是一个非营利组织,你可以免费使用我们的服务。有几家地址验证公司——只要在谷歌上搜索"地址验证"就可以了。你会发现一堆