Переведите американские уличные и второстепенные сокращения в полную версию - PullRequest
0 голосов
/ 15 февраля 2012

Вот список ;Я делаю это, чтобы «нормализовать» набор данных адресов для облегчения поиска.

Я пытался использовать strtr () и str_ireplace () но это не работает хорошо.Вот более короткий набор списка для тестирования.

<?php
function street_abbreviations_regex($input) {
  $list = array(
    ' ave'  => ' avenue',
    ' blvd' => ' boulevard',
    ' cir'  => ' circle',
    ' ct'   => ' court',
    ' expy' => ' expressway',
    ' fwy'  => ' freeway',
    ' ln'   => ' lane',
    ' pky'  => ' parkway',
    ' rd'   => ' road',
    ' sq'   => ' square',
    ' st'   => ' street',
    ' tpke' => ' turnpike',
    ' n'    => ' north',
    ' e'    => ' east',
    ' s'    => ' south',
    ' w'    => ' west',
    ' ne'   => ' northeast',
    ' se'   => ' southeast',
    ' sw'   => ' southwest',
    ' nw'   => ' northwest',
  );
//   $input = strtr(strtolower($input), $list);
  $input = str_ireplace(array_keys($list), array_values($list), strtolower($input));
  $regex_street = (preg_replace("/[^A-Za-z0-9]/", "", $input));
  return $regex_street;
?>

Вход

echo street_abbreviations_regex('10 E Union St.') . " <br>\n";
echo street_abbreviations_regex('10 E Union Street') . " <br>\n";

Выход из strtr ()

10eastunionsoutht
10eastunionsouthtreet

Выход из str_ireplace ()

10eastunionsouthtreet
10eastunionsouthtreetreet

1 Ответ

1 голос
/ 16 февраля 2012

Я работаю в компании под названием SmartyStreets , где мы занимаемся разбором, стандартизацией и т. Д. ... и я скажу, что задача, которую вы пытаетесь выполнить, на самом деле невероятно сложна.Я знаю по своему опыту!

Вместо того, чтобы перечислять все типы ввода - действительные и недействительные - это будет превосходить любое регулярное выражение, поверьте мне, адреса бывают разных форм и размеров;и точно стандартизировать результаты нелегко.

USPS сертифицировала несколько провайдеров для выполнения нормализации адресов с использованием их официальных данных.Посмотрите на CASS-сертифицированные услуги.Вы можете начать поиск с LiveAddress API (это бесплатно).Это действительно легко использовать с PHP (потому что LiveAddress возвращает строку JSON с PHP-анализом ).

С любыми дополнительными вопросами по этому поводу, я буду рад лично ответить на них.

...