2011-12-29 95 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