- PVSM.RU - https://www.pvsm.ru -
Довольно часто на Хабре появляются статьи с новыми алгоритмами автоматического разбора адресов, записанных одной строкой. Кроме этого, услуги по обработке адресов предоставляют различные it-компании. В статье мы расскажем как использовать свою адресную базу для выбора алгоритма автоматического разбора адресов, и на что стоит обратить внимание при тестировании и разработке алгоритмов адресных фильтров.
Эта статья для всех, кто хранит данные клиентов и хочет решить одну из следующих задач:
Задача автоматического разбора почтовых адресов кажется довольно простой на первый взгляд — бери да сопоставляй адресному справочнику (например, ФИАСу [1]) слова из входной строки. Но все, кто за неё берутся, утопают в большом количестве особенностей адресов…
Для начала представимся. Мы занимаемся задачей автоматизированного разбора адресов более 9 лет. За это время мы работали как с крупными компаниями, так и с небольшими фирмами. Мы накопили большую выборку адресов, описывающую формат данных заказчиков, чтобы хорошо понимать, как наши идеи влияют на качество обработки адресов в реальных системах.
В течение последнего года мы разрабатывали новую версию алгоритма (мы его называем адресным фильтром) с целью поставить точку в алгоритме разбора адресов.
Мы знаем три способа, как получить актуальные корректные адреса:
Первый вариант является лучшим, но не подходит тем, у кого уже есть большая база адресов сомнительного качества.
Второй вариант имеет большой процент хорошо разобранных адресов, но, как показывает наша практика, является дорогим и длительным.
Третий вариант сам по себе никогда не обеспечит такой процент хорошо разобранных адресов, как во втором варианте, но дешевле его и значительно быстрее.
Мы рекомендуем использовать синтезированный вариант из 2-го и 3-го пунктов:
Так вы получите большой процент разобранных адресов за приемлемую сумму.
Если вы решите использовать этот вариант или же разбирать адреса только автоматически, то необходимо будет правильно выбрать алгоритм для автоматического разбора данных. Как это сделать, мы расскажем дальше.
Для выбора алгоритма надо проанализировать результаты обработки некоторого объёма адресов разными алгоритмами. Кажется логичным взять часть адресов из реальных данных и дополнить их адресами с косметическими исправлениями, чтобы проверить, какой процент адресов с ошибками и опечатками будет распознан правильно.
Большинство наших заказчиков, кто впервые сталкивался с задачей автоматического разбора адресов, да и мы сами на первых порах думали, что исправление опечаток — это основное, что должен уметь любой уважающий себя алгоритм.
Впоследствии мы поняли, что исправление опечаток выглядит красиво лишь на этапе демонстраций, когда вместо проверки алгоритма на своих адресах заказчики выдумывают небывалые случаи, восторгаясь преобразованиями вида «ихонравова,, Масква, Юбилейной, М.К.» в «Московская обл, г Юбилейный, ул Тихонравова». В боевых условиях этот функционал не только не используется, но и вредит работе с основной базой адресов.
Наши исследования показывают, что в исходных адресах корпоративных систем редко встречается более 2% адресов с опечатками — среди всех наших клиентов процент таких систем меньше 5%. При этом большинство опечаток (около 95% от всех опечаток) носят системный характер, то есть это либо часто встречающаяся опечатка, например, Масква, либо исправление вида ул. 3ая Мытищинская >>> ул. 3-я Мытищинская или ул. Толстой >>> ул. Толстого. Эти опечатки можно описать конечным набором правил, который позволит их исправить.
Чем плохо исправление опечаток в общем случае? Производя исправление всех опечаток по n-граммам, расстоянию Левенштейна и т.п., алгоритм пытается притянуть адрес к справочнику с большим шансом получить совсем не то, что подразумевалось в исходном адресе. Кроме того, в исходном адресе может содержаться дополнительная информация, отсутствующая в адресном справочнике: название компании, бизнес-центра, как пройти от метро и т.д. В алгоритме с исправлением опечаток эти дополнения с большой долей вероятности будут восприняты как нормальный компонент адреса.
За 9 лет работы мы пришли к выводу, что необходимо делать исправление опечаток только по правилам, которые гарантируют, что данная опечатка может быть приведена только к корректным проанализированным вариантам.
Таким образом, мы советуем проверять алгоритмы только на реальных данных без искусственных искажений. Например, если у вас в базе есть адрес Москва Пушкина 13, то и используйте его, а не Маск Пушикино 13.
К алгоритмам с исправлением опечаток нужно относиться осторожно. Худшее, к чему может привести использование алгоритма с логикой исправления опечаток, описанной выше, — это получение неправильно разобранных адресов с хорошим кодом качества.
Любой алгоритм автоматического разбора адресов на вход принимает адрес, а на выходе — выдаёт его же в стандартизированном виде. Обычно он умеет возвращать признак, показывающий, уверен алгоритм в разборе адреса или нет. Такой признак обычно называют кодом качества.
Адреса наших заказчиков с хорошим кодом качества разбора автоматически уходят в бизнес-процессы, а с плохим кодом качества — отправляются на ручной разбор. Чем больше процент адресов с хорошим кодом качества, тем больше заказчик экономит на процессе ручной обработки адресов.
Таким образом, основным критерием выбора алгоритма становится процент адресов с хорошим кодом качества.
Часто забывают один важный момент: гораздо дешевле привести адрес с плохим кодом качества к хорошему вручную, чем исправлять последствия в системе, которые повлекут неправильно распознанные адреса с хорошим кодом качества.
Например, сейчас мы разрабатываем систему оценки стоимости недвижимости, где для каждого дома известна стоимость квадратного метра, которая используется для оценки платежеспособности клиента при выдаче кредита. Система автоматически анализирует новые объявления о продаже квартир в сети, стандартизирует адрес и корректирует среднюю стоимость в справочнике. В случае, если среди стандартизированных адресов будет много адресов с неправильным разбором и хорошим кодом качества, у нас будет много ошибок в справочнике, где вместо реальной средней стоимости квартиры она будет в несколько раз выше или ниже. Такие адреса сложно найти, при этом они оказывают сильное негативное влияние на бизнес-процессы.
Именно этим и плохо автоматическое исправление всех опечаток: алгоритм пытается притянуть заведомо плохой адрес к справочнику с хорошим кодом качества, чем увеличивает процент обратной ошибки, то есть процент адресов с хорошим кодом качества, но неправильно стандартизированных.
Сравнивая алгоритмы адресных фильтров, смотрите не только на процент адресов с хорошим кодом качества, но и на процент неправильно разобранных адресов с хорошим кодом качества. Лучше всего подготовить выборку из своих адресов, включающую случаи написания адресов повышенной опасности, а именно:
Когда мы подготовили тестовую выборку, дальше всё просто. Обрабатываем адреса различными алгоритмами и сравниваем их по критериям:
Задача автоматического разбора адресов не такая простая, как кажется на первый взгляд. Если вы решили выбрать алгоритм для разбора адресов или же написать свой, то нужно подойти к этому процессу правильно: проанализировать существующие адреса, сделать репрезентативную выборку для тестов. Надеемся, что эта статья поможет вам в этой работе и все ваши адреса будут разбираться автоматически и правильно.
P.S.: В течение месяца мы установим новую версию адресного фильтра, про которую шла речь в начале статьи, на dadata.ru [4]. Зарегистрируйтесь, чтобы быть в курсе и оказаться в числе первых исследователей нового алгоритма.
Спасибо chipQA [5] за помощь при подготовке статьи.
Автор: AlexGechis
Источник [6]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/programmirovanie/71913
Ссылки в тексте:
[1] например, ФИАСу: http://habrahabr.ru/company/hflabs/blog/230823/
[2] подсказок по адресам: http://dadata.ru/suggestions/
[3] хорошая зарплата: http://hh.ru/vacancy/11938386
[4] dadata.ru: http://dadata.ru
[5] chipQA: http://habrahabr.ru/users/chipqa/
[6] Источник: http://habrahabr.ru/post/240633/
Нажмите здесь для печати.