Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Алгоритмы > анализ строки адреса


Автор: dinaria 1.7.2011, 09:55
Здравствуйте, нужно решить программно следующую задачу:
1) есть база плательщиков с адресами; единообразного заполения адреса нет, т.е. адрес может быть написан по-разному
пример:Вышний Волочек,г.Вышний Волочек,КОТОВСКОГО,44 ;
    
2) мне нужно адресную строку разбить на следующие составляющие:район, населенный пункт, 
населенный пункт второго уровня,улица, дом, квартира;и загнать все это в dbf таблицу  в соответствующими полями)

в адресе всегда есть район, населенный пункт и дом, а населенный пункт второго уровня, 
улица и квартира могут отсутствовать)

мне бы алгоритм, который бы все это делал)может кто-нибудь уже сталкивался с такой задачей)
поделитесь опытом, пожалуйста)

Автор: nworm 1.7.2011, 11:14
Это обычно вручную делают, если нужно точности достичь. Робот всё равно хоть раз да ошибётся.

Причина - ошибки при вводе данных. 
Пожалуй лучший пример, Комск вместо толи Томск, толи Омск. 
И дальше надо по улицам и домам выверять. 
Роботы это в настоящее время не делают.

Можно делать полуавтоматические системы с апрувингом.
То есть после работы программы модератор всё проверяет.

Дальше смотрите, какие разделители в тексте, обращаете внимание на Индекс (самое, видимо, хорошее поле).
Ну и заносите всё в свою базу данных.


Автор: dinaria 1.7.2011, 13:10
Спасибо за ответ)скорее всего буду делать нормализацию адресов)

Автор: _Y_ 4.7.2011, 12:07
Я делал нечто подобное для списков научных журналов: названия, годы издания, издатель, адрес издателя. Получился полуавтомат с немаленькой базой данных. Работал примерно так.
  • Отсканированный текст разделялся по очевидным разделителям - у меня это были запятые, точки, точки с запятыми.
  • Каждый блок анализировался на структуру. Т.е. к каждому блоку прикладывался каждый шаблон. Например, если говорим о почтовом индексе, то содержащий его блок должен парситься в 6-значное целое число. Т.е. каждый блок пробуетя не получится из него 6-значное число. Ну и т.п.
  • Если поле удавалось проидентифицировать, например, как название журнала, оно сравнивалось и имеющимся в базе списком названий.
  • Если такого журнала не было - вылезало окошко спрашивающее новый ли это журнал или синоним уже имеющегося (например "Журнал Физической Химии" и "ЖФХ" это одно и то же). База, естественно имела и список синонимов. После запроса ответ запоминался в базе.
Таким образом после сотни-другой выскочивших окошек, база уже с большинством случаев справлялась сама.

В Вашем случае есть проблема. У меня адресов было не так уж и много - сколько издательств столько и адресов. У вас же названий улиц может быть ну ооочень много.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)