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

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

例如:

// 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对象的格式。

Googlemaps API非常适用于此。 例如,假设你被给予字符串“120 w 45 st nyc”。 将其传递到Googlemaps API,如下所示: http://maps.google.com/maps/geo?q=120+w+45+st+nyc ://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 ] } } ] } 

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

http://usaddress.codeplex.com/

好:1。无需数据库2.无需互联网查询3.非常准确

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

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

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

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

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

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

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

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

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

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