Javascript 找出字符串是否是街道地址、套房号、购物中心或其他内容

Javascript 找出字符串是否是街道地址、套房号、购物中心或其他内容,javascript,regex,parsing,street-address,Javascript,Regex,Parsing,Street Address,我正在使用javascript解析一些数据,遇到了一些麻烦 我有一个字段是1-3行数据。 通常只有一行,代表街道地址: 1234 Hollywood St. Beverly Hills Shopping Center 1234 Hollywood St. 1234 Hollywood St Ste 12 1234 Hollywood St 2nd Floor (between Hollywood St and Tom Cruise Ave) 好莱坞大街1234号。 但有时是这样的: 1234 H

我正在使用javascript解析一些数据,遇到了一些麻烦

我有一个字段是1-3行数据。
通常只有一行,代表街道地址:

1234 Hollywood St. Beverly Hills Shopping Center 1234 Hollywood St. 1234 Hollywood St Ste 12 1234 Hollywood St 2nd Floor (between Hollywood St and Tom Cruise Ave) 好莱坞大街1234号。 但有时是这样的:

1234 Hollywood St. Beverly Hills Shopping Center 1234 Hollywood St. 1234 Hollywood St Ste 12 1234 Hollywood St 2nd Floor (between Hollywood St and Tom Cruise Ave) 比佛利山庄购物中心 好莱坞大街1234号。 其他时候是这样的:

1234 Hollywood St. Beverly Hills Shopping Center 1234 Hollywood St. 1234 Hollywood St Ste 12 1234 Hollywood St 2nd Floor (between Hollywood St and Tom Cruise Ave) 好莱坞街1234号 Ste 12 而其他时候它是这样的:

1234 Hollywood St. Beverly Hills Shopping Center 1234 Hollywood St. 1234 Hollywood St Ste 12 1234 Hollywood St 2nd Floor (between Hollywood St and Tom Cruise Ave) 好莱坞街1234号 二楼 (在好莱坞大街和汤姆·克鲁斯大街之间) 我很想知道哪一行是街道地址。目前,我正在尝试确定哪一行是“地址行2”,意思是套房、楼层号等。。。我真的不需要地址,第2行,但通过消除过程,这有助于我得到街道地址

有没有一个很好的工具,比如正则表达式函数或者一些可以告诉我字符串是否可能是街道地址的东西

或者我还有别的办法来处理这件事吗

谢谢

编辑:

1234 Hollywood St. Beverly Hills Shopping Center 1234 Hollywood St. 1234 Hollywood St Ste 12 1234 Hollywood St 2nd Floor (between Hollywood St and Tom Cruise Ave) 该算法不需要是100%。我正在准备地址发送到谷歌地图API进行验证。我可以尝试地址的每一行,看看哪一行是有效的,但这会增加打给谷歌的电话数量,并带来一个小的,但有限的假阳性机会


我希望能够在通过谷歌验证之前稍微清理一下数据,以减少错误和更多呼叫的必要性

有一些Web服务可用,您可以传递地址,它将返回格式良好的json/xml解析地址对象。也许那样的事情会对你有帮助?就像一些评论所说的那样。简单地使用javascript是无法做到这一点的

这里有一个我个人研究过的服务。您需要熟悉API


首先看一下以下USPS官方缩写



然后你会知道你期望输入的内容,但你也必须准备好所有可能的非官方变体/标点符号等。。。。有很多事情要做…


一般来说,街道地址行应以数字开头,后跟空格(与二楼等隔开)、一个或多个单词,最后是街道后缀缩写。对于城市、州、邮政元组,你必须混合全名和缩写(包括短变体,如N York或N.York或N.York),并记住zip5和zip5+4的情况。

如另一个答案所述,这是地址验证服务的工作。请注意,GoogleMapsAPI不是一个地址验证服务——最好将其描述为一个功能非常强大的地址近似服务(有一个显著的区别)

地址验证意味着当前地址是真实的,这意味着它对应于实际位置。它通常意味着地址是可交付的(取决于业务需要)

我是一家地址验证公司的软件开发人员。我们提供了一个我认为非常适合您的用例的。由于我们的系统最多可以为街道地址接受两行输入,因此我建议为每个有两行以上街道地址的地址生成一些排列。它也非常快(100万个地址在不到一小时的时间内被处理),并且不需要我们的任何交互,因为它是一个在线服务

另一个好消息是,您甚至不需要将地址发送到GoogleMapsAPI,因为它们已经过验证。但这取决于你的具体需要


更新:SmartyStreets现在提供。

这看起来不像是正则表达式可以正确处理的问题。你的最终目标是什么,你需要它做什么?(即,您是否有迫切的理由将这些内容分开?)这对于正则表达式来说太多了。如果你想要一个完全自动化的方法来确定这一点,你需要一个人工智能算法和良好的种子数据。地址应该是n行的文本块,带有n-1个回车符。为什么您需要单独存储“套件”?您是否按套件#进行报告?我可以用它作为获取“规范”形式地址的一种方式吗?这意味着它将规范化诸如“Street”和“St.”等文本不一致性?是的,因为我们是一家通过USPS认证的CASS地址验证提供商,所以我们能够规范化这些精确的变化。这还提供了额外的好处,可以在提交的列表中识别重复的地址。请注意,我们可以在多大程度上验证格式不正确的地址数据,这是有限制的——在某些情况下,我们可能会从无到有,导致邮件的错误方向或不正确数据的存储。