ruby - найти и заменить в строке общеупотребительный уличный суффикс - PullRequest
1 голос
/ 08 июня 2010

Почтовое отделение фактически публикует список часто используемых уличных суффиксов в адресах:

http://www.usps.com/ncsc/lookups/abbr_suffix.txt

Я хочу взять этот список и создать функцию ruby, которая принимает строку, берет последнее слово ("183 main strt" .split [''] .last) и, если оно соответствует любому из часто используемых уличных суффиксов "strt"), замените его официальным суффиксом стандарта почтовой службы ("st").

Есть ли лучший способ приблизиться к этому, чем массивный str.sub.sub.sub?

Ответы [ 4 ]

6 голосов
/ 08 июня 2010

Я бы поставил суффиксы в хеш, где общий суффикс - это ключ, а официальный суффикс - это значение. Затем вы можете посмотреть последнее слово в хэше.

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
1 голос
/ 09 июня 2010
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")
0 голосов
/ 07 января 2012

+ 1 для использования поставщика CASS - особенно тот, который предоставляет API, который всегда будет возвращать стандартизированные результаты для реальных адресов.Кроме того, некоторые службы фактически возвращают разделенные для вас адресные компоненты (например, уличный суффикс).Поскольку он был только что проверен с использованием данных и соглашений USPS, суффикс уже находится в предпочтительной форме USPS.Вот пример кода, который работает так же, как API:

https://github.com/smartystreets/LiveAddressSamples/blob/master/ruby/street_address.rb

Этот код вызывает SmartyStreets LiveAddress API (обратите внимание на поле 'street_suffix').Я инженер-программист в SmartyStreets и могу ответить на любые ваши вопросы.

0 голосов
/ 08 июня 2010

Вы можете создать массив со всеми этими распространенными суффиксами, повторить их с каждым методом и обработать их в вашей строке?

Это, безусловно, будет более элегантно, чем все эти многие подводные лодки.

...