2011-12-29 66 views
3

我正在与两个API进行交互,它们返回格式完全不同的地址。返回一个像“6 Avenue”,另一个返回地址为“6 Ave.我如何解决规范化问题?

我探索使用Normalic宝石,但由于某种原因,我的很多地址的返回格式不正确或空白:“6 Avenue”被返回为“Ave.”。

我也尝试了GeoCoder,但是每个API如Google和Yahoo都设置了配额。在开发测试我的应用几个小时后,这些配额将到期。这显然不会在生产中做到。

如果有一个库让我做一些类似于评估"6 Ave." == "6 Avenue"的事,那将会很棒。

+0

你的意思是6th Ave? Normalic应该处理这个问题。正如所写的,它看起来像缺少街道名称。 – 2011-12-30 04:23:39

回答

4

对于美国地址,USPS提供an address api。我的理解是没有收费,但您的目的需要与电子商务网站一起使用,以便在输入时验证广告。

对于清理数据库,USPS经常会将您发送给他们的(昂贵的)服务提供商之一供邮寄者使用。

1

红宝石的StreetAddress宝石应该照顾这对你:https://rubygems.org/gems/StreetAddress

下面是你的情况下,一些用法示例:

pry(main)> StreetAddress::US.parse("42 6 Ave., Washington, DC") 
=> 42 6 Ave, Washington, DC 
pry(main)> StreetAddress::US.parse("42 6 Avenue, Washington, DC") 
=> 42 6 Ave, Washington, DC 

所以,如果你通过解析法同时运行的API地址,它应该为你的两个标准化,并释放你的生活更多的思考,骑自行车和比萨消费。

+3

对于那些正在寻找解析器宝石的人来说,这只是一个警告:从我所知道的情况来看,除非你去到USPS之一或MelissaData之类的在线API,否则你不会找到100%的解决方案,甚至80%的解决方案其中我已经尝试过)。例如,StreetAddress不能很好地处理单元/公寓/套房号码,如果提供了C/O,Attn:或PO框,则完全中断。我们已经选择了Normalic,因为它更容忍畸形输入,但仍然不是很高兴。 – 2014-08-27 23:44:40