Большое количество сведений о клиентах, имеющееся в базах данных, хранятся в неудобном для автоматической обработки виде, например, адресная информация. Чаще всего она пишется в строки вида "г. Рязань ул. Электрозаводская 63". Насколько эта информация пригодна для автоматической обработки? Можно ли и нужно ли ее применять?
Я думаю, что нужно применять обязательно. Бизнес должен быть ориентирован на клиента. А для того, чтобы удовлетворить его запросы, желательно знать о клиенте как можно больше. Адрес – одна из важных составляющих информации о клиенте. Известно, что потребности людей в маленьких и больших городах различны. Потребности меняются даже в зависимости от района города, в котором живешь. Все эти сведения есть в адресе (город, улица и т.п.), но в совершенно непригодном для работы виде.
Вообще, любой анализ начинается со сбора информации об объекте. Чем больше мы знаем, тем качественнее проводимый анализ. И уж тем более обидно, когда сведения собраны, а получить от них практическую пользу невозможно.
Для нормального использования адресной информации необходимо разделить адрес на составляющие – разложить все "по полочкам".
Для данных, уже накопленных в организациях, разбить адреса на составляющие при помощи четких правил не представляется возможным. Я не знаю, есть ли четкие стандарты написания адреса, но даже если они есть, то практически никем не соблюдаются. В связи с этим адресная информация хранится как попало.
При работе с большими объемами данных вы наверняка столкнетесь с проблемой дублирования информации, когда один и тот же клиент вводится в список клиентов дважды. Компания с названием "Компьютер-сервис" есть, наверно, в каждом крупном городе. В таких случаях необходимо анализировать адрес. Вот тут и возникает проблема. Один и тот же адрес каждый вводит по-своему. Не стоит винить в этом сотрудников, т.к. они пишут так, чтобы поняли другие люди. Люди то поймут, а вот программа – нет.
Но задача решаема при помощи метода, описанного ниже.
Для начала нужно четко определиться с задачей. Наша цель – преобразовать строку адреса к форме.
Такая сложность формы связана с непростым административно-территориальным делением России. В состав краев входят автономные области и т.п. Возможно, будут случаи, которые не очень хорошо ложатся на предложенную форму, но с этим ничего не поделаешь. По большому счету указанная выше форма – это разумный компромисс между сложностью и качеством.
Человек обычно способен разобрать даже самый трудно различимый адрес. Поэтому попробуем проанализировать, как же он решает эту задачу. На мнение о том, что означает тот или иной элемент в строке, влияет следующее:
И хотя встречаются случаи, которые даже человек не всегда знает, как разобрать, есть особенности, достаточно точно характеризующие анализируемый объект. Следовательно, адрес можно автоматически разбирать, применяя для этого, например, нейросеть.
Задачи такого класса как разбор адреса хорошо решаются при помощи нейросетей. Но для того, чтобы их применить нужно, проделать следующее.
Как известно, нейросети работают только с числовой информацией, а в строке адреса встречаются как числа, так и строки. Описанные выше принципы разбора адреса человеком позволяют достаточно качественно закодировать строку адреса – задается код для каждой категории информации – строкам, числам, сокращениям и прочее.
За основу был взят список из 1000 адресов, написанных различными способами. Все эти адреса после кодирования были преобразованы в шаблоны.
Далее сканировался список адресов, и из них извлекались адреса, соответствующие уникальным шаблонам. Таких уникальных шаблонов оказалось 390. После этого "учитель" просмотрел все шаблоны и в каждом конкретном случае указал, к какой категории относится анализируемая часть адреса. Если встречались противоречия, т.е. такие случае, что под один и тот же шаблон подходит несколько категорий адреса, то "учитель" выбирал наиболее характерный объект. Таким образом была подготовлена обучающая выборка.
Обучающая выборка была пропущена через Neural Network Wizard. Результат обучения был сохранен в nnw-файле. Наиболее сложный участок был пройден. Есть способ кодирования/декодирования и обученная нейросеть.
Обученную нейросеть можно использовать уже где угодно. Причем после обучения не требуются большие вычислительные ресурсы. Можно ее встроить куда угодно.
Пропустив адресную информацию через систему разбора, вы получите следующее: