• Где найти годный парсер адресов?

    trapwalker
    @trapwalker
    Программист, энтузиаст
    У вас в примере очень чистые аккуратные адреса.
    Не очень понятно что вы имели в виду под "разложить по полочкам" и какие именно вам нужны полочки.
    Общий подход для переработки таких массивов слабо структурированных данных следующий.
    1. Процесс переработки должен быть поэтапный. Каждый этап должен вносить минимальные не калечащие изменения в как можно бОльшую часть датасета.
    2. Каждый этап должен быть прозрачным. Затронутые модификацией значения можно для удобства контроля (глазами) дедуплицировать и сортировать. Это позволит легко увидеть любые аномалии.
    3. Нужно вести подробную статистику изменений на каждом этапе. Все выбросы статистики должны проверяться глазами: слишком короткое минимальное слово или число слов, слишком длинные слова или наборы, слишком большие или малые числа...
    4. На каждом этапе нужно сохранять предыдущее состояние датасета или держать исходное и иметь удобный инструментарий для быстрого полного накатывания всех этапов на исходный датасет. Иногда этапы имеет смысл переставить местами, потому что обнаружилось незамеченное ранее калечащее изменение пару этапов назад.
    5. Серия мелких правок простыми операциями предпочтительнее сложных алгоритмов и регэкспов. Например в вашем случае гораздо лучше серией прсотых и понятных реплейсов заменить "ул." на "улица", "пл." на "площадь" и т.д.
      Чтобы не городить сложные регекспы имеет смысл сплитнуть строки по словам и заменять слова целиком, либо одним из шагов добавить в начало и конец строки пробелы. Это упростит регекспы и не даст наделать незаметных сразу косяков.
      Затронутые реплейсами строки можно отсортирвоать и дедуплицировать для просмотра глазами. Вдруг у вас есть много переулков Плава-Лагуны, которые принято тоже так сокращать.
    6. Если у вас есть справочник улиц, можно все записи в обработанном датасете, для которых нашлось однозначное соответствие улицы из справочника, пометить специальным флагом и больше не трогать в них улицы. Остаток можно снова подвергнуть сортировке и дедупликации (заодно можно частотность посчитать) и вычищать массово или точечно начиная с чамых частых случаев реплейсами, регекспами, и т.д.

    В вашем случае:
    1. Разделите адреса по запятой, сохраните в отдельные поля. лучше CSV, а не в БД. Проще. При обнаружении больше двух (в вашем случае) запятых сразу падайте, кричите, считайте число таких случаев, решайте вручную, если их не много, делайте отдельный фильтр с фиксом на отдельном этапе если много.
    2. Отсортируйте и дедуплицируйте (на секундочку) все три столбца по отдельности, просмотрите глазами получившиеся множества, поищите проблемы. Автоматизируйте этот шаг, он вам понадобится еще не раз.
    3. Обработайте датасет серией очевидных реплейсов, которые снизят разнообразие. Устранятся сокращения, множественные варианты одного и того же написания, различия в регистрах букв.
    4. Вытащите из ФИАС каталог улиц. Можно взять в формате КЛАДР, там попроще может оказаться и в отдельном файле. Разметьте очищаемый датасет ссылками на найденные в справочнике улицы. Просмотрите дедуплицированные и отсортированные (по алфавиту и по частотности) оставшиеся улицы. Поищите стандартные проблемы, которые можно пофиксить автоматически, внесите ручные правки для узких частных случаев (но программно реплейсами в отдельном этапе, чтобы можно было повторно обработать исходный датасет).


    Если у вас датасет весь примерно такой, как в примере, то я за пару тысяч рублей его вам почищу независимо от его размера. Почти независимо.=)
    Ответ написан
    2 комментария
  • Куда монтировать /var/log?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    /var монтировать в /var
    /var/log, соответственно, в /var/log
    Ответ написан
  • Как удалить 3 первые строки в csv файле с помощью PHP?

    dimonchik2013
    @dimonchik2013
    non progredi est regredi
    три раза делай

    строка для удаления всегда же будет первой
    Ответ написан
    Комментировать
  • Что посоветуете выбрать для организации АТС в офисе (30 сотрудников), решение на Asterisk-е или "железе"?

    Zoominger
    @Zoominger
    System Integrator
    всех их необходимо сохранить, в том числе как внешние телефоны

    Asterisk.

    Расширение возможно будет до 40-50 телефонов и то с вероятностью 5%.

    Asterisk.

    Подключение другого (дополнительного) оператора и подключение к CRM Битрикс 24 с вероятностью 75% будет.

    Asterisk!

    Какой вариант Вы бы выбрали и почему?

    Уж точно не хреновину за 100k. Лучше поднимите Астериск на каком-нибудь простеньком сервере, а из сэкономленных денег выбейте себе премию. Это работает, проверено (я про премию, Астер тоже).
    Ответ написан
    Комментировать
  • Как правильно составить регулярное выражение в Asterisk?

    same=>n,ExecIf($[${REGEX("^7[3489]" ${callerid_1})}]?NoOp(NORMA):Set(callerid_1=74950000000))
    Ответ написан
    Комментировать
  • Как подключиться к Мультифон через pjsip и FreePBX 13?

    Раз за более, чем 2 года ответ никто не выложил, поделюсь рабочим конфигом для "голой" Asterisk:
    ;======================
    ;       МУЛЬТИФОН 
    ;======================
    [megafon-номертелефона]
    type=registration
    transport=transport-udp-nat
    outbound_auth=megafon-номертелефона
    server_uri=sip:multifon.ru
    client_uri=sip:номертелефона@multifon.ru
    fatal_retry_interval = 120
    forbidden_retry_interval = 240
    max_retries = 99999
    retry_interval=60
    expiration=120
    auth_rejection_permanent=no
    contact_user=megafon-номертелефона
    line = yes
    endpoint = номертелефона
    
    [megafon-номертелефона]
    type=auth
    auth_type=userpass
    password=вашпароль
    username=номертелефона
    
    [megafon-номертелефона]
    type=aor
    qualify_frequency=60
    contact=sip:multifon.ru
    
    [megafon-номертелефона]
    type=endpoint
    transport=transport-udp-nat
    context=megafon-номертелефона-in
    disallow=all
    allow=g722
    allow=alaw
    outbound_auth=megafon-номертелефона
    aors=megafon-номертелефона
    from_user=номертелефона
    from_domain=multifon.ru
    direct_media=no
    
    [megafon-номертелефона]
    type=identify
    endpoint=megafon-номертелефона
    match=multifon.ru


    где "вашномер" - номер в формате 79ХХХХХХХХХ
    вашпароль - ваш пароль от услуги
    transport-udp-nat - изменить на свой либо создать.
    Ответ написан
    1 комментарий
  • Как выбрать программиста с адекватной ценой за час?

    @cicatrix
    было бы большой ошибкой думать
    Знаете, это рынок.
    Представьте себе, не дай бог, у вас судебное разбирательство, и надо вам нанять адвоката. Один стоит 1000 р. в час, другой - 15000 р. в час. Как оценивать работу адвоката?

    Вообще, у программиста-фрилансера (как и у адвоката) должен быть опыт решения похожих задач в прошлом и лучше всего - рекомендательные письма / координаты предыдущих нанимателей, чтобы у них можно было поинтересоваться качеством его работы.
    Ответ написан
    25 комментариев