邮局实际上在地址中发布了一个常用街道后缀的列表:
http://www.usps.com/ncsc/lookups/abbr_suffix.txt
我想用这个列表做一个ruby函数,它接受一个字符串,最后一个单词(“183main strt".split‘'.last),如果它匹配任何常用的街道后缀("strt"),就用官方的Postal Service Standard后缀("st")代替它。
有没有比大规模str.sub.sub更好的方法呢?
发布于 2010-06-08 12:40:52
我会将后缀放在一个散列中,其中公共后缀是键,官方后缀是值。然后,您可以在散列中查找最后一个单词。
SUFFIXES = { "ALLEE" => "ALY", "ALLEY" => "ALY" }
addy = "183 main allee"
last = addy.split.last.upcase
addy = addy[0..-last.length-1] + SUFFIXES[last] if SUFFIXES[last]
puts addy发布于 2010-06-09 23:22:46
STREET_SUFFIXES = { "ALLEE" => "ALY", "ALLEY" => "ALY" }
def fix_address(string)
string.gsub(/[^s]+$/) { STREET_SUFFIXES[$1.upcase] || $1 }
end
puts fix_address("183 main allee")发布于 2012-01-07 07:49:20
+1,用于使用CASS供应商--尤其是提供API的供应商,该API将始终返回真实地址的标准化结果。此外,一些服务实际上会为您返回已拆分的地址部分(例如街道后缀)。因为它只是使用USPS数据和约定进行了验证,所以后缀已经是USPS首选的形式。下面是一些像API这样的示例代码:
https://github.com/smartystreets/LiveAddressSamples/blob/master/ruby/street_address.rb
这段代码调用SmartyStreets LiveAddress API (注意'street_suffix‘字段)。我是SmartyStreets的一名软件工程师,可以回答您可能有的任何其他问题。
https://stackoverflow.com/questions/2994700
复制相似问题