哪里是一个好的地址解析器

时间:2009-02-05 22:12:09

标签: c# parsing opensocial street-address

我正在寻找一个好的工具,可以使用完整的邮件地址,格式化显示或与邮件标签一起使用,并将其转换为结构化对象。

例如:

// Start with a formatted address in a single string
string f = "18698 E. Main Street\r\nBig Town, AZ, 86011";

// Parse into address
Address addr = new Address(f);

addr.Street; // 18698 E. Main Street
addr.Locality; // Big Town
addr.Region; // AZ
addr.PostalCode; // 86011

现在我可以使用RegEx来做到这一点。但棘手的部分是保持足够通用以处理世界上的任何地址!

我确信必须有一些可以做到的事情。

如果有人注意到,这实际上是opensocial.address对象的格式。

7 个答案:

答案 0 :(得分:24)

Googlemaps API非常适用于此。例如,假设你被给予字符串“120 w 45 st nyc”。将其传递到Googlemaps API,如下所示:http://maps.google.com/maps/geo?q=120+w+45+st+nyc,您会得到以下回复:

{
  "name": "120 w 45 st nyc",
  "Status": {
    "code": 200,
    "request": "geocode"
  },
  "Placemark": [ {
    "id": "p1",
    "address": "120 W 45th St, New York, NY 10036, USA",
    "AddressDetails": {"Country": {"CountryNameCode": "US","CountryName": "USA","AdministrativeArea": {"AdministrativeAreaName": "NY","Locality": {"LocalityName": "New York","Thoroughfare":{"ThoroughfareName": "120 W 45th St"},"PostalCode": {"PostalCodeNumber": "10036"}}}},"Accuracy": 8},
    "ExtendedData": {
      "LatLonBox": {
        "north": 40.7603883,
        "south": 40.7540931,
        "east": -73.9807141,
        "west": -73.9870093
      }
    },
    "Point": {
      "coordinates": [ -73.9838617, 40.7572407, 0 ]
    }
  } ]
}

答案 1 :(得分:7)

如果您正在寻找一个简单解决方案的地址解析器,请尝试以下方法:

http://usaddress.codeplex.com/

○: 1.无需数据库 2.无需上网查询 3.非常准确

为: 1.无法确认它是否是真实地址 2.仅适用于美国地址 3.在C#中,使用.NET 3.5或更高版本

答案 2 :(得分:4)

您可以尝试Experian Address Verification。它有问题,但几乎像宣传的那样有效。

答案 3 :(得分:3)

由于没有像@duffymo所说的那样简单的解决方案,下一个最好的方法可能是重新考虑设计。如果是用户表单,请妥协并让用户填写。如果您追溯性地解析数据,则使用非常严格的正则表达式来根据某些条件解析地址(国家/地区为美国)。然后对剩下的那些进行第二次传递,依此类推。我采用了这种方法,这是唯一可靠的方法。

采用通用正则表达式方法的另一个设计问题是它会为坏地址生成误报。如果你向这些人发送蜗牛邮件,它将最终弹跳,你将有更多的工作在你的手上试图找出哪些回来或继续发送邮件到错误的地址。

答案 4 :(得分:3)

我最近尝试过RecogniContact。它是一个解析美国和欧洲地址的Windows COM组件。您可以从网站上进行测试。

http://www.loquisoft.com/index.php?page=8

答案 5 :(得分:3)

如前所述,这不是一个小问题。除了国际地址之外,最大的问题之一是地址没有标准格式,而且地址无法告诉您它是否格式正确,即它不像信用卡号那样自我验证

因此,您必须依靠外部真相来确保地址真实。这是地址验证服务融入其中的地方。根据您的业务需求和应用程序要求,您可能正在查看地址列表的一次性“批量”清理,或者可能是实时/实时地址验证服务。有许多优秀的提供商(费用各不相同)可以轻松解决这个问题。

我应该提一下,我是SmartyStreets的创始人。我们做CASS-certified address verification。我们将把您未格式化的/原始地址转换为已经清理,标准化和验证/确认的地址。根据您的清单大小,成本通常只有几美元,周转时间几乎是即时的 - 通常是几分钟。

答案 6 :(得分:0)

对于加拿大地址,我使用了一个名为Street Perfect的地址。我们必须将c++代码包装在某些.net中,以使其可以重用于我们的目的,但这很容易。