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

时间:2011-11-24 10:48:05

标签: php mysql levenshtein-distance

将新地址导入我的数据库时,我会进行拼写检查以查看街道是否已存在(新街道拼写错误)。

我们目前正在MySQL查询中使用Levenshtein方法来查找类似的街道名称。问题是街道号码。在地址中有街道名称确实会减慢相似性搜索/拼写检查的速度。

示例:

  街道abc 34
  街道abc 37
  街道abc 39

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

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

这适用于最后有街道号码的街道,但不适用于开头有街道号码的国家。

我想知道是否还有其他人在处理类似的问题?

更新
该解决方案适用于商店定位器网站,我目前正在处理将导入商店列表的模块。

一种解决方案是使用Google Maps API并查看它是否返回地理位置。

3 个答案:

答案 0 :(得分:3)

呃哦,通用地址是一个非常难的问题。我的建议是你执行你可以容忍的最小量的验证。

例如,如果这是出于运输目的,只需使用下拉列表来确定运输成本。如果您针对不同的国家/地区使用不同的运费,则只需提供不带验证的自由格式文本区域和国家/地区下拉列表。如果用户不能拼写他们的地址,运气不好。您可以让任何处理运输的人验证地址“人性化”。送货公司和邮政公司大多可以将包裹送到错误拼写的地址(无论如何,Randomcountry的邮局公司可能比你更了解他们的街道名称。)

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

考虑到您的算法,可以考虑以下解决方案;只需使用正则表达式来删除数字(甚至是非字母)。但是,请记住,有正确的街道名称​​是号码(即纽约第九大道)。

答案 1 :(得分:1)

您可以将APi用于Fedex,UPS,USPS并验证地址。这是针对许多电子商务网站提供的送货地址......这就是为什么有时候你会看到

“你的意思是这个地址”......

您也可以使用Google地图的API执行此操作。

答案 2 :(得分:0)

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

100 North 250 West 100 North 250W 100 North 250 W 100N 250 West 100 N 250 West 100 North 250 West

根据美国邮政服务,标准化地址为100 N 250 W.只有通过将每个地址解析为标准格式,您才能准确删除重复项并确保一致的结果。

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

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

为了充分披露,我是SmartyStreets的创始人,我们确实在进行验证。如果您是一家非营利组织,您可以免费使用我们的服务。有几家地址验证公司 - 只需在谷歌搜索“地址验证”,你就会找到一堆。