首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何将自由格式的街道/邮政地址解析为文本和组件?

如何将自由格式的街道/邮政地址解析为文本和组件?
EN

Stack Overflow用户
提问于 2018-04-02 23:57:07
回答 2查看 0关注 0票数 0

我们主要在美国开展业务,并试图通过将所有地址字段组合到单个文本区域来改善用户体验。但是有一些问题:

  • 用户输入的地址可能不正确或采用标准格式
  • 地址必须分成几部分(街道,城市,州等)来处理信用卡付款
  • 用户可以输入的不仅仅是他们的地址(如他们的名字或公司)
  • 谷歌可以做到这一点,但服务条款和查询限制是禁止的,特别是在预算紧张的情况下

显然,这是一个常见的问题:

  • PHP脚本解析地址?
  • 如何解析自由格式地址以保存到数据库中
  • Java邮政地址解析器
  • 更有效的方法来提取地址组件
  • 我如何显示联系人屏幕上的街道,城市,在Android上的邮编预填充的邮政地址
  • PHP正则表达式美国地址

有没有办法将地址与周围的文本隔离开来,并将其分成几块?有没有一个正则表达式来解析地址?

EN

回答 2

Stack Overflow用户

发布于 2018-04-03 08:15:10

当我在地址验证公司工作时,我看到了很多这个问题。

首先,我们需要了解一些有关地址的内容。

地址不正规

这意味着正则表达式不存在。我已经看到了这一切,从简单的正则表达式匹配非常特定格式的地址到这个:

/\s+(\d{2,5}\s+)(?![a|p]m\b)(([a-zA-Z|\s+]{1,5}){1,2})?([\s|\,|.]+)?(([a-zA-Z|\s+]{1,30}){1,4})(court|ct|street|st|drive|dr|lane|ln|road|rd|blvd)([\s|\,|.|\;]+)?(([a-zA-Z|\s+]{1,30}){1,2})([\s|\,|.]+)?\b(AK|AL|AR|AZ|CA|CO|CT|DC|DE|FL|GA|GU|HI|IA|ID|IL|IN|KS|KY|LA|MA|MD|ME|MI|MN|MO|MS|MT|NC|ND|NE|NH|NJ|NM|NV|NY|OH|OK|OR|PA|RI|SC|SD|TN|TX|UT|VA|VI|VT|WA|WI|WV|WY)([\s|\,|.]+)?(\s+\d{5})?([\s|\,|.]+)/i

需要一些真正了解地址的代码,如果代码确实存在,是一个商业秘密。

地址有意想不到的形状和大小

以下是一些人为的(但完整的)地址:

代码语言:javascript
复制
1)  102 main street
    Anytown, state

2)  400n 600e #2, 52173

3)  p.o. #104 60203

即使这些可能是有效的:

代码语言:javascript
复制
4)  829 LKSDFJlkjsdflkjsdljf Bkpw 12345

5)  205 1105 14 90210

显然,这些都不是标准化的。标点符号和换行符不保证。

  1. 号码1是完整的,因为它包含街道地址和城市和州。有了这些信息,就足以识别地址,并且可以将其视为“可交付”(有一些标准化)。
  2. 号码2是完整的,因为它还包含一个街道地址(带有辅助/单元号码)和一个5位邮政编码,足以识别一个地址。
  3. 号码3是一个完整的邮局信箱格式,因为它包含邮政编码。
  4. 第4号也是完整的,因为邮政编码是唯一的,这意味着私人实体或公司已经购买了该地址空间。独特的邮政编码适用于大批量或集中配送空间。任何写给邮政编码12345的信息都发往纽约斯克内克塔迪的通用电气公司。这个例子不会特别到达任何人,但USPS仍然能够提供它。
  5. 第5号也是完整的,不管你信不信。仅使用这些数字,可以在针对所有可能地址的数据库进行分析时发现完整地址。当将每个数字视为一个组件时,填写缺少的方向,辅助指示符和ZIP + 4代码都是微不足道的。

地址数据不是自己的

在向授权供应商提供官方地址数据的大多数国家,地址数据本身属于管理机构。在美国,USPS拥有这些地址。加拿大邮政,皇家邮政和其他国家也是如此,尽管每个国家都以不同的方式强制或定义所有权。这一点很重要,因为它通常禁止对地址数据库进行反向工程。必须小心如何获取,存储和使用数据。

谷歌地图是快速修复地址的常用工具,但TOS相当令人望而却步; 例如,不能在不显示Google Map的情况下使用他们的数据或API,并且仅用于非商业目的(除非支付费用),并且不能存储数据(临时缓存除外)。Google的数据是世界上最好的。然而,谷歌地图并没有验证地址。如果地址不存在,它仍然会显示所在地址

Nominatim的使用政策也同样受到限制,特别是对于大量使用和商业使用而言,数据大部分来自免费来源,因此不能很好地维护(这是开放项目的性质) - 但是,这可能仍然适用需求。

美国邮政本身有一个API,没有保证也没有支持。它可能也很难使用。有些人使用它没有问题。但很容易错过USPS要求仅使用API​​来确认通过它们发送的地址。

期望地址很难

我们限制了我们的社会,地址变得复杂。整个互联网上有许多关于这方面的优秀用户体验文章,但事实是,如果你有一个单独的字段的地址表单,这是用户期望的,尽管它使得难以处理不符合边缘情况的地址表单格式期望的格式,或者表单需要不应该的字段。或者用户不知道在哪里放置他们地址的某个部分。

USPS通过一个名为CASS™认证的流程授权供应商为客户提供经过验证的地址。这些供应商可以访问USPS数据库,每月更新一次。他们的软件必须符合严格的标准才能获得认证,而且他们通常不需要同意上述讨论的这些限制条款。

有许多经过CASS认证的公司可以处理列表或具有API:Melissa Data,Experian QAS和SmartyStreets等等。

票数 0
EN

Stack Overflow用户

发布于 2018-04-03 09:55:26

有许多街道地址解析器。一种拥有地名和街道名称数据库,另一种没有。

正则表达式街道地址解析器可以达到约95%的成功率,而不会有太多麻烦。然后开始打不寻常的情况。CPAN中的Perl,“Geo :: StreetAddress :: US”就是这么好的。有Python和Javascript的端口,都是开源的。我有一个改进的Python版本,通过处理更多的案例,成功率略有提高。然而,要获得最后3%的权利,需要数据库来帮助消除歧义。

具有3位邮政编码和美国州名和缩写的数据库是一大帮助。当解析器看到一致的邮政编码和州名时,它可以开始锁定格式。这对美国和英国来说效果很好。

正确的街道地址解析从结尾开始并向后工作。这就是USPS系统如何做到的。最后,地址最不明确,国名,城市名称和邮政编码相对容易识别。街道名称通常可以被隔离。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/-100003251

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档