【问题标题】:Looking for ColdFusion or Java street Address Parser [duplicate]寻找 ColdFusion 或 Java 街道地址解析器 [重复]
【发布时间】:2016-07-20 09:50:46
【问题描述】:

我找到了适合街道地址解析的 C# 和 Perl 库。

https://usaddress.codeplex.com/

http://search.cpan.org/~timb/Geo-StreetAddress-US-1.04/US.pm

是否有可以从 CF 运行的 ColdFusion 代码或其他代码来完成相同的工作?

【问题讨论】:

  • 这真的是一个重复的问题吗?他问是否有任何 CF/Java 库可以解析地址,而另一个问题只是“我如何解析它”。对另一个问题的回答没有提供任何 java 解析库建议。 (我找到了 2 个并在下面列出。)

标签: coldfusion


【解决方案1】:

如果您需要解析和验证,可以使用 SmartyStreets.com LiveAddress API。 2011 年的 ColdFusion CFC 可用,它将连接、验证地址并返回包含更多该地址的基于位置的数据的 JSON 结构。

http://smartystreets.riaforge.org/

SmartyStreets 还具有 javascript Address Autocomplete API,因此您可以将其包含在任何基于 Web 的表单中,以确保在将传入地址保存到后端数据库之前对其进行验证(包括地址部分的识别和完全分离) .

查看功能...它比任何离线库都更强大:

https://smartystreets.com/features

唯一的缺点是这是一项付费服务​​,您每个月只能免费处理 250 个地址:

https://smartystreets.com/free-address-verification

除了使用 CFC 之外,我还为 SmartyStreet 的“Smartylist”(一个命令行工具)使用了单独的包装器。它基本上是上传一个 CSV 文件并返回带有附加列的相同文件和原始提交的数据。

https://smartystreets.com/docs/smartylist/command-line-tool

【讨论】:

【解决方案2】:

“地址清理器”是一个使用 JGeoCoder 的 ColdFusion ColdBox 插件。

https://github.com/angelseye/Address-Cleaner

http://jgeocoder.sourceforge.net/

安装 JAR 文件后,您可以使用以下方法调用 CFC,它会将匹配项返回到以下键 CITY, LINE2, NUMBER, PREDIR, STATE, STREET, TYPE, ZIP。 (注意:如果您不使用 Coldbox 框架,则需要修改 CFC。):

clearAddressString = addressCleaner.cleanAddress(FullAddressString);

addressStruct = addressCleaner.getAddressStruct(FullAddressString);

另一个可用于 ColdFusion 的 java 选项是“国际地址解析器”。 (有多个国家包可用,但没有列出价格。)

http://www.address-parser.net/product-java.php

http://address-parser.net/documentation/documentation.php#java

【讨论】:

  • 这可行,但它不处理公寓号码和套房。我测试了 JGeocode,它的效果不如 github.com/datamade/usaddress 示例:parserator.datamade.us/usaddress 它是 python,我可以从 Jython 调用它,也可以将其编写为服务。感谢您的帮助!
  • @RichardHughes Address-Parser.net 对单个国家/地区收费约 3,000 欧元,对所有国家/地区收费 9,000 欧元。他们的评估版只能解析一个预先确定的地址。我还发现 Windows COM 组件似乎功能更强大,还可以从文本字符串中解析姓名、电话、电子邮件和网站。 address-parser.com(我已经要求为一个小项目报价。)他们也有一个网络 API,但没有广告费率。
【解决方案3】:

我已经编写了地址和 zip 的初步解析器。这是一个帮助您入门的 sn-p (https://bitbucket.org/snippets/mrrobwad/KR9Mg):

<cfset loc.SOURCETEXT = "123 ABC Street, Any Town, MA 12345">

<cfset loc.array_zip_code = REMatchNoCase("[-:.\s][0-9]{5}([-][0-9]{4})?",loc.SOURCETEXT)>
<cfif ArrayLen(loc.array_zip_code) GT 0>
    <cfset loc.ZIP = REReplaceNoCase(loc.array_zip_code[1],"[-:.\s]","","All")>
    <b>ZIP:</b>
    <cfdump var="#loc.ZIP#">
</cfif>
<br><br>
<cfset loc.street_types = "STREET|ST|DRIVE|DR|AVENUE|AVE|ROAD|RD|LOOP|COURT|CT|CIR|CIRCLE|LANE|LN|BOULEVARD|BLVD">
<cfset loc.array_street_type = REMatchNoCase("(\s)+(#loc.street_types#)[^a-zA-Z]",loc.SOURCETEXT)>
<cfif ArrayLen(loc.array_street_type) GT 0>
    <cfset loc.street_address_trimmed = Left(loc.SOURCETEXT,FindNoCase(loc.array_street_type[1],loc.SOURCETEXT)+Len(loc.array_street_type[1]))>
    <cfset loc.array_street_address = REMatchNoCase("(\d{1,5})+(\s([a-zA-Z])+)+",loc.street_address_trimmed)>
    <cfif ArrayLen(loc.array_street_address) GT 0>
        <cfset loc.ADDRESS = loc.array_street_address[1]>
        <b>ADDRESS:</b>
        <cfdump var="#loc.ADDRESS#">
    </cfif>
</cfif>

【讨论】:

  • 很接近了。该脚本(最初发布于 2016 年 3 月 31 日)没有识别邮政编码。 (地址以有效的美国 5 位邮政编码结尾。)我用逗号分隔地址和城市,逗号包含在 array_street_typestreet_address_trimmed 结果中。
  • 这很有趣。你能提供你从中提取的示例文本吗?
  • 删除末尾多余的未嵌套&lt;/cfif&gt;。试试这个地址123 ABC Street, Any Town, MA 12345。街道值以, 结尾,并且未检测到邮政编码。此处使用的示例格式 englishplus.com/grammar/00000085.htm 和许多其他地方。 (Post Office Box 203, Shelton, CT 06484 将状态返回为街道。)
  • 修复了嵌套并更新了示例代码以转储结果。我刚刚意识到我编写这段代码是为了专门匹配以 2 开头的邮政编码,所以我更新了这个示例以匹配以任何数字开头的邮政编码。此外,它是为处理住宅地址而不是邮政信箱而构建的,但您可以按照类似的逻辑来扩展它以匹配邮政信箱。
  • 我没有专门选择邮政信箱。这是我找到的链接中的示例地址格式(关于逗号和空格的使用)。邮政信箱很常见。 (免责声明:JGeoCoder 也不能正确解析,但“国际地址解析器”可以。(SmartyStreet API 除了验证它之外也可以。)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-11
  • 2010-10-13
  • 2021-11-17
  • 2015-06-20
相关资源
最近更新 更多