gpt4 book ai didi

api - 如何将自由形式的街道/邮政地址从文本中解析为组件

转载 作者:行者123 更新时间:2023-12-03 00:13:37 25 4
gpt4 key购买 nike

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

  • 用户输入的地址可能不正确或格式不正确
  • 地址必须分成几部分(街道、城市、州等)才能处理信用卡付款
  • 用户可以输入的不仅仅是他们的地址(例如他们的姓名或公司)
  • Google 可以做到这一点,但服务条款和查询限制令人望而却步,尤其是在预算紧张的情况下

  • 显然,这是一个常见的问题:
  • PHP script to parse address?
  • How do I parse the free format address to save into the DataBase
  • java postal address parser
  • More efficient way to extract address components
  • How can i show a pre populated postal address in contacts screen with street, city, zip on android
  • PHP regexp US address

  • 有没有办法将地址与其周围的文本隔离开来并将其分成几部分?是否有解析地址的正则表达式?

    最佳答案

    我在地址验证公司工作的时候经常看到这个问题。我在这里发布答案,以便程序员可以更轻松地搜索相同的问题。我所在的公司处理了数十亿个地址,我们在这个过程中学到了很多东西。
    首先,我们需要了解一些关于地址的事情。
    地址不是 regular
    这意味着正则表达式已经过时了。我已经看到了这一切,从以非常特定格式匹配地址的简单正则表达式到:

    /\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


    ... 至 this其中 900 多个行类文件会动态生成超大规模正则表达式以匹配更多。我不推荐这些(例如, here's a fiddle of the above regex, that makes plenty of mistakes )。没有一个简单的神奇公式可以让它发挥作用。从理论上和理论上来说,用正则表达式匹配地址是不可能的。
    USPS Publication 28记录了多种可能的地址格式,以及它们的所有关键字和变体。最糟糕的是,地址通常是不明确的。单词可能意味着不止一件事(“St”可以是“Saint”或“Street”),而且我很确定有些词是他们发明的。 (谁知道“Stravenue”是街道后缀?)
    您需要一些真正理解地址的代码,如果该代码确实存在,那就是商业 secret 。但如果你真的喜欢,你可能会推出自己的。
    地址有意想不到的形状和大小
    以下是一些人为(但完整)的地址:
    1)  102 main street
    Anytown, state

    2) 400n 600e #2, 52173

    3) p.o. #104 60203
    即使这些可能是有效的:
    4)  829 LKSDFJlkjsdflkjsdljf Bkpw 12345

    5) 205 1105 14 90210
    显然,这些都不是标准化的。不保证标点符号和换行符。这是发生了什么:
  • 1号是完整的,因为它包含一个街道地址和一个城市和州。有了这些信息,就足以识别地址,它可以被认为是“可交付的”(具有一些标准化)。
  • 2号是完整的,因为它包含一个街道地址(带有二级/单元号)和一个 5 位数的邮政编码,足以识别一个地址。
  • 3号是一种完整的邮政信箱格式,因为它包含一个邮政编码。
  • 4号也是完整的因为the ZIP code is unique ,这意味着私有(private)实体或公司已经购买了该地址空间。唯一的邮政编码适用于大容量或集中的交付空间。任何寄往邮政编码 12345 的物品都寄给位于纽约州斯克内克塔迪的通用电气公司。这个例子不会特别传达给任何人,但 USPS 仍然会提供它。
  • 5号也完成了,信不信由你。仅使用这些数字,就可以在针对所有可能地址的数据库进行解析时发现完整地址。当您将每个数字视为一个组成部分时,填写缺少的方向、辅助指示符和 ZIP+4 代码是微不足道的。这是它的外观,完全扩展和标准化:

  • 205 N 1105 W Apt 14

    Beverly Hills CA 90210-5221


    地址数据不是您自己的
    在向许可供应商提供官方地址数据的大多数国家/地区,地址数据本身属于管理机构。在美国,USPS 拥有这些地址。加拿大邮政、皇家邮政和其他公司也是如此,尽管每个国家/地区对所有权的执行或定义略有不同。了解这一点很重要,因为它通常禁止对地址数据库进行逆向工程。您必须小心如何获取、存储和使用数据。
    Google map 是快速修复地址的常用工具,但 TOS相当令人望而却步;例如,你不能在不显示谷歌地图的情况下使用他们的数据或 API,并且只能用于非商业目的(除非你付费),并且你不能存储数据(临时缓存除外)。有道理。谷歌的数据是世界上最好的。但是,Google map 不会验证地址。如果地址不存在,它仍会向您显示地址存在的位置(在您自己的街道上尝试;使用您知道不存在的门牌号)。这有时很有用,但要注意这一点。
    提名人 usage policy也有类似的限制,特别是对于大批量和商业用途,并且数据主要来自免费资源,因此维护得不好(例如开放项目的性质)。但是,这可能仍然适合您的需求。一个伟大的社区支持它。
    USPS 本身有一个 API,但 it goes down a lot并且不提供任何保证或支持。它也可能很难使用。有些人谨慎使用它没有问题。但是很容易忽略 USPS 要求您仅使用他们的 API 来确认通过它们运送的地址。
    人们期望地址很难
    不幸的是,我们已经让我们的社会期望地址变得复杂。互联网上有很多关于这方面的优秀 UX 文章。尽管如此,事实是,如果您有一个带有单个字段的地址表单,这就是用户所期望的,即使它使不符合表单期望格式的边缘地址地址变得更加困难,或者表单可能需要一个字段它不应该。或者用户不知道把他们地址的某个部分放在哪里。
    这些天我可以继续谈论结帐表单的糟糕用户体验,但相反,我会说将地址组合到一个字段中将是一个受欢迎的变化——人们将能够以他们认为合适的方式输入他们的地址,而不是试图弄清楚你冗长的表格。然而,这种变化是出乎意料的,用户一开始可能会觉得有点刺耳。请注意这一点。
    通过在地址之前将 country 字段放在前面,可以部分缓解这种痛苦。当他们首先填写国家/地区字段时,您就知道如何显示您的表单。也许你有处理单字段美国地址的好方法,所以如果他们选择美国,你可以将你的表单减少到单个字段,否则显示组件字段。只是需要考虑的事情!
    现在我们知道为什么很难了;你能做些什么呢?
    USPS 通过称为 CASS™ 认证的流程许可供应商向客户提供经过验证的地址。这些供应商可以访问每月更新的 USPS 数据库。他们的软件必须符合严格的标准才能获得认证,而且他们通常不需要同意上述讨论的限制条款。
    许多 CASS 认证公司可以处理列表或拥有 API:Melissa Data、Experian QAS 和 SmartyStreets,仅举几例。
    (由于受到“广告”的抨击,我在这一点上截断了我的答案。由您来找到适合您的解决方案。)
    真相:真的,伙计们,我不在这些公司工作。这不是广告。

    关于api - 如何将自由形式的街道/邮政地址从文本中解析为组件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11160192/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com