从字符串中解析可用的街道地址、城市、州、邮政编码 [closed]

Parse usable Street Address, City, State, Zip from a string [closed]

提问人:Rob Allen 提问时间:8/19/2008 最后编辑:David BeaucheminRob Allen 更新时间:12/25/2022 访问量:162801

问:


想改进这个问题吗?更新问题,使其仅通过编辑这篇文章来关注一个问题。

8年前关闭。

问题:我有一个 Access 数据库中的地址字段,该数据库已转换为 SQL Server 2005。此字段将所有内容都集中在一个字段中。我需要将地址的各个部分解析为规范化表中的相应字段。我需要对大约 4,000 条记录执行此操作,并且它需要是可重复的。

假设:

  1. 假设地址在美国(目前)

  2. 假设输入字符串有时包含收件人(被收件人)和/或第二个街道地址(即套房 B)

  3. 国家可以缩写

  4. 邮政编码可以是标准的 5 位数字或 zip+4

  5. 在某些情况下存在错别字

更新:在回答提出的问题时,标准没有得到普遍遵守;我需要存储单个值,而不仅仅是地理编码和错误意味着拼写错误(上面更正)

示例数据:

  • A. P. Croll & Son 2299 Lewes-Georgetown Hwy, 乔治敦, DE 19947

  • 11522 Shawnee Road, 格林伍德, DE 19950

  • 144 Kings Highway, 西南多佛, DE 19901

  • 综合服务 2 Penns Way Suite 405 New Castle, DE 19720

  • Humes Realty 33 Bridle Ridge Court, 刘易斯, DE 19958

  • Nichols Excavation 2742 Pulaski Hwy 纽瓦克, DE 19711

  • 2284 Bryn Zion Road, 士麦那, DE 19904

  • VEI 多佛十字路口有限责任公司 蛇形路 1500 号,套房 100 巴尔的摩 MD 21

  • 580 North Dupont Highway 多佛尔, DE 19901

  • 邮政信箱 778 多佛尔,DE 19903

字符串 分析 sql-server-2005 街道地址

评论

0赞 Kevin Williams 9/23/2010
很好的问题和非常有趣的答案。从 zip 向后工作似乎是一个常见的主题,但如果您从客户那里获取原始数据,zip 可能不准确。例如,我猜大多数网站在 90210 中的地址数量不成比例。
4赞 mpen 12/28/2010
@Kevin:是的,因为你们美国人喜欢把我们加拿大人拒之门外,要求一个“邮政编码”,而不接受我们的邮政编码,从而迫使我们输入一些胡言乱语来绕过系统。不幸的是,我唯一知道的 zip 是 90210 :-)编辑:没关系...你显然住在离我几公里远的不列颠哥伦比亚省。你可能也会做同样的事情:-P
0赞 Jay Mooney 8/19/2008
几个问题: 1. 有分隔符吗?2. 字符串中的字段顺序是什么?3. 在发生数据错误时,您希望采取什么行为(例如,将地址推入 SQL 表中的单个字段,将其他字段留空)
2赞 Matt 6/24/2012
有关此问题的扩展概述,请参阅此 SO 问题

答:

3赞 pix0r 8/19/2008 #1

这并不能解决您的问题,但如果您只需要这些地址的经纬度数据,Google Maps API 将很好地解析非格式化地址。

6赞 Yaakov Ellis 8/19/2008 #2

地址的记录方式是否有任何标准?例如:

  1. 是否总是有逗号或换行符将 street1 与 street2 与 city 与 state 与 zip 分隔开?
  2. 地址类型(道路、街道、林荫大道等)是否总是拼写出来?总是缩写?每个中的一些?
  3. 定义“错误”。

我的一般答案是一系列正则表达式,尽管其复杂性取决于答案。如果根本没有一致性,那么你可能只能使用正则表达式(即:过滤掉邮政编码和州)获得部分成功,并且必须手动完成剩下的工作(或者至少非常仔细地检查其余部分以确保您发现错误)。

121赞 Tim Sullivan 8/19/2008 #3

我在这种解析上做了很多工作。因为存在错误,你不会得到 100% 的准确性,但你可以做一些事情来获得大部分结果,然后进行视觉 BS 测试。这是解决它的一般方法。它不是代码,因为写它非常学术,没有奇怪的东西,只是大量的字符串处理。

(现在你已经发布了一些示例数据,我做了一些小的改动)

  1. 向后工作。从接近末尾的邮政编码开始,采用两种已知格式之一:XXXXX 或 XXXXX-XXXX。如果未显示,您可以假设您位于下面的城市、州部分。
  2. 接下来,在zip之前,将是状态,它要么是两个字母的格式,要么是单词。你也知道这些会是什么 -- 它们只有50个。此外,您可以对单词进行发音,以帮助弥补拼写错误。
  3. 在此之前是城市,它可能与州在同一条线上。您可以使用邮政编码数据库根据邮政编码检查城市和州,或者至少将其用作 BS 检测器。
  4. 街道地址一般为一行或两行。如果有的话,第二行通常是套房号,但它也可以是邮政信箱。
  5. 在第一行或第二行上检测到一个名字几乎是不可能的,但如果它不是以数字为前缀(或者如果它以“attn:”或“attention to:”为前缀),它可能会给你一个提示,它是一个名字还是一个地址行。

我希望这能有所帮助。

评论

14赞 Mike Sherrill 'Cat Recall' 7/27/2011
虽然确实有 50 个州,但 USPS 表示,美国邮政服务领域内有 59 个双字母缩写,如果算上美国武装部队,则为 65 个。usps.com/send/official-abbreviations.htm
18赞 Tim Sullivan 7/27/2011
“只有 50 个”表示这个数字很小。它可能“只有 65 岁”,但这对于解决手头的问题并不重要。
4赞 Matt 10/28/2012
USPS 出版物 28 中也详细介绍了该算法
1赞 AdamSane 8/19/2008 #4

有一些数据服务,给定一个邮政编码,将为您提供该邮政编码中的街道名称列表。

使用正则表达式提取 Zip 或 City State - 找到正确的,或者如果出现错误,则两者兼而有之。 从数据源中提取街道列表 更正城市和州,然后更正街道地址。获得有效的地址行 1、城市、州和邮政编码后,您可以对地址行 2..3 进行假设

5赞 Jay Mooney 8/19/2008 #5

基于示例数据:

  1. 我会从字符串的末尾开始。解析邮政编码(任一格式)。读取第一个空格的末尾。如果未找到邮政编码,则错误。

  2. 修剪末尾,然后删除空格和特殊字符(逗号)

  3. 然后转到状态,再次使用空格作为分隔符。也许使用查找列表来验证 2 个字母的州代码和完整的州名称。如果未找到有效状态,则出错。

  4. 再次从末尾修剪空格和逗号。

  5. 城市变得棘手,我实际上会在这里使用逗号,冒着在城市中获得太多数据的风险。查找逗号或行首。

  6. 如果字符串中仍有剩余字符,请将所有这些字符都放入地址字段中。

这并不完美,但它应该是一个很好的起点。

6赞 user1921 8/20/2008 #6

另一个示例数据请求。

如前所述,我会从zip向后工作。

一旦你有了 zip,我会查询一个 zip 数据库,存储结果,然后从字符串中删除它们和 zip。

那会让你的地址一团糟。MOST(全部?)地址将以数字开头,因此在剩余的字符串中查找第一个出现的数字,并抓取从该数字到字符串(新)末尾的所有内容。那将是你的地址。该数字左边的任何内容都可能是收件人。

您现在应该将 City、State 和 Zip 存储在一个表中,并且可能有两个字符串,addressee 和 address。对于地址,检查是否存在“Suite”或“Apt.”等,并将其拆分为两个值(地址行 1 和 2)。

对于收件人,我会抓住该字符串的最后一个单词作为姓氏,并将其余部分放入名字字段中。如果你不想这样做,你需要在开始时检查称呼(先生、女士、博士等),并根据空格的数量对名字的组成方式做出一些假设。

我认为没有任何方法可以以 100% 的准确度进行解析。

17赞 Christopher Mahan 8/20/2008 #7

我过去做过这个。

要么手动完成,(构建一个漂亮的 gui,帮助用户快速完成),要么让它自动化并检查最近的地址数据库(您必须购买)并手动处理错误。

手动处理每个大约需要 10 秒,这意味着您可以每小时执行 3600/10 = 360,因此 4000 应该需要大约 11-12 小时。这将为您提供很高的准确率。

为了实现自动化,您需要一个最新的美国地址数据库,并根据该数据库调整您的规则。我建议不要花哨地使用正则表达式(很难长期维护,有很多例外)。与数据库进行 90% 的匹配,其余的手动完成。

请在 http://pe.usps.gov/cpim/ftp/pubs/Pub28/pub28.pdf 处获得邮政地址标准 (USPS) 的副本,并注意到它有 130+ 页长。实现这一点的正则表达式将是疯狂的。

对于国际地址,所有赌注都已关闭。 美国工人将无法验证。

或者,使用数据服务。但是,我没有建议。

此外:当你在邮件中发送东西时(这就是它的用途,对吧?)确保你在信封上写上“地址更正请求”(在正确的位置)并更新数据库。(我们做了一个简单的gui,让前台人员这样做;实际分类邮件的人)

最后,当您清理数据时,查找重复项。

4赞 engtech 8/20/2008 #8

如果是人工输入的数据,那么您将花费太多时间尝试围绕异常进行编码。

尝试:

  1. 用于提取邮政编码的正则表达式

  2. 邮政编码查找(通过相应的政府数据库)以获取正确的地址

  3. 让实习生手动验证新数据是否与旧数据匹配

8赞 Kevin 8/20/2008 #9

这并不能解决您的问题,但如果 您只需要纬度/经度数据 这些地址,即 Google Maps API 将解析非格式化地址 挺好的。

很好的建议,或者您可以对每个地址执行 CURL 请求到 Google 地图,它将返回格式正确的地址。由此,您可以随心所欲地进行正则表达式。

13赞 Nicholas Trandem 8/20/2008 #10

我已经在地址处理领域工作了大约 5 年,真的没有灵丹妙药。正确的解决方案将取决于数据的值。如果它不是很有价值,请按照其他答案的建议将其扔进解析器。如果它甚至有点价值,你肯定需要让人工评估/纠正解析器的所有结果。如果您正在寻找一个完全自动化、可重复的解决方案,您可能需要与 Group1 或 Trillium 等地址更正供应商交谈。

14赞 Rob Allen 8/20/2008 #11

在这里的建议之后,我在 VB 中设计了以下函数,它创建了可传递的,尽管并不总是完美的(如果给出了公司名称和套件行,它结合了套件和城市)的可用数据。请随时评论/重构/对我大喊大叫,因为我违反了我自己的规则之一,等等:

Public Function parseAddress(ByVal input As String) As Collection
    input = input.Replace(",", "")
    input = input.Replace("  ", " ")
    Dim splitString() As String = Split(input)
    Dim streetMarker() As String = New String() {"street", "st", "st.", "avenue", "ave", "ave.", "blvd", "blvd.", "highway", "hwy", "hwy.", "box", "road", "rd", "rd.", "lane", "ln", "ln.", "circle", "circ", "circ.", "court", "ct", "ct."}
    Dim address1 As String
    Dim address2 As String = ""
    Dim city As String
    Dim state As String
    Dim zip As String
    Dim streetMarkerIndex As Integer

    zip = splitString(splitString.Length - 1).ToString()
    state = splitString(splitString.Length - 2).ToString()
    streetMarkerIndex = getLastIndexOf(splitString, streetMarker) + 1
    Dim sb As New StringBuilder

    For counter As Integer = streetMarkerIndex To splitString.Length - 3
        sb.Append(splitString(counter) + " ")
    Next counter
    city = RTrim(sb.ToString())
    Dim addressIndex As Integer = 0

    For counter As Integer = 0 To streetMarkerIndex
        If IsNumeric(splitString(counter)) _
            Or splitString(counter).ToString.ToLower = "po" _
            Or splitString(counter).ToString().ToLower().Replace(".", "") = "po" Then
                addressIndex = counter
            Exit For
        End If
    Next counter

    sb = New StringBuilder
    For counter As Integer = addressIndex To streetMarkerIndex - 1
        sb.Append(splitString(counter) + " ")
    Next counter

    address1 = RTrim(sb.ToString())

    sb = New StringBuilder

    If addressIndex = 0 Then
        If splitString(splitString.Length - 2).ToString() <> splitString(streetMarkerIndex + 1) Then
            For counter As Integer = streetMarkerIndex To splitString.Length - 2
                sb.Append(splitString(counter) + " ")
            Next counter
        End If
    Else
        For counter As Integer = 0 To addressIndex - 1
            sb.Append(splitString(counter) + " ")
        Next counter
    End If
    address2 = RTrim(sb.ToString())

    Dim output As New Collection
    output.Add(address1, "Address1")
    output.Add(address2, "Address2")
    output.Add(city, "City")
    output.Add(state, "State")
    output.Add(zip, "Zip")
    Return output
End Function

Private Function getLastIndexOf(ByVal sArray As String(), ByVal checkArray As String()) As Integer
    Dim sourceIndex As Integer = 0
    Dim outputIndex As Integer = 0
    For Each item As String In checkArray
        For Each source As String In sArray
            If source.ToLower = item.ToLower Then
                outputIndex = sourceIndex
                If item.ToLower = "box" Then
                    outputIndex = outputIndex + 1
                End If
            End If
            sourceIndex = sourceIndex + 1
        Next
        sourceIndex = 0
    Next
    Return outputIndex
End Function

传递函数“A. P. Croll & Son 2299 Lewes-Georgetown Hwy, Georgetown, DE 19947”返回:parseAddress

2299 Lewes-Georgetown Hwy
A. P. Croll & Son  
Georgetown
DE
19947
92赞 James A. Rosen 8/20/2008 #12

我认为将问题外包是最好的选择:将其发送给Google(或Yahoo)地理编码器。地理编码器不仅返回纬度/经度(此处不感兴趣),还返回地址的丰富解析,并填写了您未发送的字段(包括 ZIP+4 和县)。

例如,解析“1600 Amphitheatre Parkway, Mountain View, CA”会生成

{
  "name": "1600 Amphitheatre Parkway, Mountain View, CA, USA",
  "Status": {
    "code": 200,
    "request": "geocode"
  },
  "Placemark": [
    {
      "address": "1600 Amphitheatre Pkwy, Mountain View, CA 94043, USA",
      "AddressDetails": {
        "Country": {
          "CountryNameCode": "US",
          "AdministrativeArea": {
            "AdministrativeAreaName": "CA",
            "SubAdministrativeArea": {
              "SubAdministrativeAreaName": "Santa Clara",
              "Locality": {
                "LocalityName": "Mountain View",
                "Thoroughfare": {
                  "ThoroughfareName": "1600 Amphitheatre Pkwy"
                },
                "PostalCode": {
                  "PostalCodeNumber": "94043"
                }
              }
            }
          }
        },
        "Accuracy": 8
      },
      "Point": {
        "coordinates": [-122.083739, 37.423021, 0]
      }
    }
  ]
}

现在这是可解析的了!

评论

4赞 David 5/18/2009
由于这是一个批处理过程,我还建议使用线程池进行地理编码,以便您可以一次提交多个地址(谷歌是否支持任何类型的批处理接口?
0赞 Christopher Mahan 1/2/2010
这对地址行第二行(问题中的品脱 5)没有真正的帮助
71赞 Jay 3/20/2010
对于商业和/或非公共用途,服务条款通常是限制因素。
0赞 Peter DeWeese 5/3/2012
这是一个很好的解决方案,但在某些情况下,Google/Yahoo 不会返回结果,例如新地址和数据库中缺少的地址。
0赞 Hector 3/30/2015
这将是一个很好的解决方案,“如果”谷歌没有限制对其 MAPS API 的批量调用
3赞 Walter Scott 5/12/2009 #13

RecogniContact 是一个 Windows COM 对象,用于分析美国和欧洲地址。您可以直接在 http://www.loquisoft.com/index.php?page=8 上尝试

评论

0赞 Luke Van In 2/10/2017
RecogniContact 似乎不对公众开放。访问权限需要提交联系表单,但没有回复。也许其他人知道如何与他们取得联系。
6赞 We Know 2/8/2010 #14

试 www.address-parser.com。我们使用他们的网络服务,您可以在线测试

评论

1赞 jspooner 11/27/2011
这适用于在大型 html 文档中查找地址之类的事情。我只是希望他们有一个REST接口而不是SOAP。感谢您分享此链接。
1赞 Matt 5/9/2013
如果您与他们有关联,则需要披露这一点。
1赞 Toaster 11/3/2014
如果他们给出价格估算,而不是要求我在给出价格之前告诉他们他们的服务有多有价值,那就太好了。
7赞 weston 9/18/2010 #15

詹姆斯·罗森(James A. Rosen)建议的解决方案为+1,因为它对我来说效果很好,但是对于完成者来说,这个网站是一本引人入胜的读物,也是我在记录全球地址时看到的最佳尝试:http://www.columbia.edu/kermit/postal.html

1赞 Shawn 10/1/2010 #16

我不知道这有多可行,但我还没有看到提到这一点,所以我想我会继续提出这个建议:

如果您严格在美国...获取包含所有邮政编码、州、城市和街道的庞大数据库。现在在您的地址中查找这些。您可以通过测试您找到的城市是否存在于您找到的州,或者通过检查您找到的街道是否存在于您找到的城市中来验证您找到的内容。如果不是,约翰很可能不是约翰的街道,而是收件人的名字......基本上,尽可能多地获取信息,并根据它检查您的地址。 一个极端的例子是获取美国所有地址的列表,然后找到哪个地址与您的每个地址最匹配......

2赞 anand 1/22/2011 #17

由于单词有出错的可能性,请考虑使用SOUNDEX结合LCS算法来比较字符串,这将有很大帮助!

3赞 CoolDude 10/15/2011 #18

你可能想看看这个!!http://jgeocoder.sourceforge.net/parser.html对我来说就像一个魅力。

25赞 Nicholas Piasecki 12/25/2011 #19

最初的海报可能已经很久了,但我尝试将 geocoder.us 使用的 Perl Geo::StreetAddress:US 模块移植到 C#,将其转储到 CodePlex 上,并认为将来偶然发现这个问题的人可能会发现它很有用:

美国地址解析器

在项目的主页上,我试图谈论它的(非常真实的)局限性。由于它不受 USPS 有效街道地址数据库的支持,因此解析可能模棱两可,无法确认或否认给定地址的有效性。它可以尝试从字符串中提取数据。

它适用于需要获取一组数据的情况,这些数据主要位于正确的字段中,或者想要提供数据输入的快捷方式(允许用户将地址粘贴到文本框中,而不是在多个字段中按 Tab 键)。它用于验证地址的可送达性。

它没有试图解析出街道线以上的任何东西,但人们可能会摆弄正则表达式以获得相当接近的东西——我可能会在门牌号处将其断开。

2赞 komal 10/9/2012 #20

使用 google API

$d=str_replace(" ", "+", $address_url);
$completeurl ="http://maps.googleapis.com/maps/api/geocode/xml?address=".$d."&sensor=true"; 
$phpobject = simplexml_load_file($completeurl);
print_r($phpobject);

评论

1赞 Jamie Bull 10/19/2012
这可能违反了 ToS,但看起来它应该有效 - 尽管重新阅读问题,但它并不完全符合要求。
13赞 Matt 5/9/2013 #21

SmartyStreets 具有一项新功能,可以从任意输入字符串中提取地址。(注意:我不在SmartyStreets工作。

它成功地从上述问题中给出的示例输入中提取了所有地址。(顺便说一句,这 10 个地址中只有 9 个有效。

以下是一些输出:在此处输入图像描述

下面是同一请求的 CSV 格式输出:

ID,Start,End,Segment,Verified,Candidate,Firm,FirstLine,SecondLine,LastLine,City,State,ZIPCode,County,DpvFootnotes,DeliveryPointBarcode,Active,Vacant,CMRA,MatchCode,Latitude,Longitude,Precision,RDI,RecordType,BuildingDefaultIndicator,CongressionalDistrict,Footnotes
1,32,79,"2299 Lewes-Georgetown Hwy, Georgetown, DE 19947",N,,,,,,,,,,,,,,,,,,,,,,
2,81,119,"11522 Shawnee Road, Greenwood DE 19950",Y,0,,11522 Shawnee Rd,,Greenwood DE 19950-5209,Greenwood,DE,19950,Sussex,AABB,199505209226,Y,N,N,Y,38.82865,-75.54907,Zip9,Residential,S,,AL,N#
3,121,160,"144 Kings Highway, S.W. Dover, DE 19901",Y,0,,144 Kings Hwy,,Dover DE 19901-7308,Dover,DE,19901,Kent,AABB,199017308444,Y,N,N,Y,39.16081,-75.52377,Zip9,Commercial,S,,AL,L#
4,190,232,"2 Penns Way Suite 405 New Castle, DE 19720",Y,0,,2 Penns Way Ste 405,,New Castle DE 19720-2407,New Castle,DE,19720,New Castle,AABB,197202407053,Y,N,N,Y,39.68332,-75.61043,Zip9,Commercial,H,,AL,N#
5,247,285,"33 Bridle Ridge Court, Lewes, DE 19958",Y,0,,33 Bridle Ridge Cir,,Lewes DE 19958-8961,Lewes,DE,19958,Sussex,AABB,199588961338,Y,N,N,Y,38.72749,-75.17055,Zip7,Residential,S,,AL,L#
6,306,339,"2742 Pulaski Hwy Newark, DE 19711",Y,0,,2742 Pulaski Hwy,,Newark DE 19702-3911,Newark,DE,19702,New Castle,AABB,197023911421,Y,N,N,Y,39.60328,-75.75869,Zip9,Commercial,S,,AL,A#
7,341,378,"2284 Bryn Zion Road, Smyrna, DE 19904",Y,0,,2284 Bryn Zion Rd,,Smyrna DE 19977-3895,Smyrna,DE,19977,Kent,AABB,199773895840,Y,N,N,Y,39.23937,-75.64065,Zip7,Residential,S,,AL,A#N#
8,406,450,"1500 Serpentine Road, Suite 100 Baltimore MD",Y,0,,1500 Serpentine Rd Ste 100,,Baltimore MD 21209-2034,Baltimore,MD,21209,Baltimore,AABB,212092034250,Y,N,N,Y,39.38194,-76.65856,Zip9,Commercial,H,,03,N#
9,455,495,"580 North Dupont Highway Dover, DE 19901",Y,0,,580 N DuPont Hwy,,Dover DE 19901-3961,Dover,DE,19901,Kent,AABB,199013961803,Y,N,N,Y,39.17576,-75.5241,Zip9,Commercial,S,,AL,N#
10,497,525,"P.O. Box 778 Dover, DE 19903",Y,0,,PO Box 778,,Dover DE 19903-0778,Dover,DE,19903,Kent,AABB,199030778781,Y,N,N,Y,39.20946,-75.57012,Zip5,Residential,P,,AL,

我是最初编写该服务的开发人员。我们实现的算法与此处的任何特定答案略有不同,但每个提取的地址都根据地址查找 API 进行验证,因此您可以确定它是否有效。每个经过验证的结果都是有保证的,但我们知道其他结果不会是完美的,因为正如本线程中已经非常清楚地表明的那样,地址是不可预测的,即使有时对人类也是如此。

评论

2赞 ftrotter 10/15/2017
Smartystreets 非常擅长他们所做的事情。很高兴听到这是他们支持的 API。
2赞 Sachin Prasad 11/2/2013 #22

对于 ruby 或 rails 开发人员来说,有一个不错的 gem 可用,称为 street_address。 我一直在我的一个项目中使用它,它完成了我需要的工作。

我遇到的唯一问题是,每当一个地址采用这种格式时,它都会返回 nil,因此我不得不将“P. O. Box”替换为“”,然后它能够解析它。P. O. Box 1410 Durham, NC 27702

评论

0赞 Kim Ryan 11/14/2016
指向上述模块的链接已损坏,请改用以下命令: search.cpan.org/~kimryan/Lingua-EN-AddressParse
3赞 Kim Ryan 10/1/2014 #23

由于数据中潜在的歧义,这种类型的问题很难解决。

这是一个基于 Perl 的解决方案,它定义了一个基于正则表达式的递归下降语法树,用于解析许多有效的街道地址组合: http://search.cpan.org/~kimryan/Lingua-EN-AddressParse-1.20/lib/Lingua/EN/AddressParse.pm .这包括地址中的子属性,例如: 地址: 12 1st Avenue N Suite # 2 Somewhere CA 12345, USA

它类似于上面提到的 http://search.cpan.org/~timb/Geo-StreetAddress-US-1.03/US.pm,但也适用于非美国的地址,例如英国、澳大利亚和加拿大。

下面是其中一个示例地址的输出。请注意,需要首先从“A. P. Croll & Son 2299 Lewes-Georgetown Hwy, Georgetown, DE 19947”中删除名称部分,以将其减少为“2299 Lewes-Georgetown Hwy, Georgetown, DE 19947”。这可以通过删除所有数据(直到字符串中找到的第一个数字)轻松实现。

Non matching part       ''
Error                   '0'
Error descriptions      ''
Case all                '2299 Lewes-Georgetown Hwy Georgetown DE 19947'
COMPONENTS              ''
country                 ''
po_box_type             ''
post_box                ''
post_code               '19947'
pre_cursor              ''
property_identifier     '2299'
property_name           ''
road_box                ''
street                  'Lewes-Georgetown'
street_direction        ''
street_type             'Hwy'
sub_property_identifier ''
subcountry              'DE'
suburb                  'Georgetown'
1赞 hassansin 12/13/2014 #24

有 perl 的 javascript 端口 Geo::StreetAddress::US 包:https://github.com/hassansin/parse-address 。它是基于正则表达式的,并且运行良好。