Скажу так без человеческого вмешательства не обойтись.
Подогнать конечно можно под какой-то шаблон, но вероятность ошибки очень велика.
У меня два проекта, в которых я решал эти задачи. Адреса в одном и том же наборе могут быть, как и структурированные по принципу 9 запятых (это самый простое, можно вычленять автоматически и предлагать подходящие человеку для принятия решения), так же и такие, которые, как говориться: «как бог на душу положит» — это вообще самый не решаемый вариант =)
Что я делаю:
1. Внедрил КЛАДР в свою систему. Конвертировал их данные в древовидную структуру в одной таблице и еще одна таблица с сокращениями.
2. Формируем свои таблицы справочники Регионы, Районы, Города, Улицы. Потому что, КЛАДР это только источник данных к нему нельзя привязывать реальные адреса. Так как при обновлении, не которые записи КЛАДРа могу перейти в состояние не действительных и их ид будут не валидны. Ну то есть храним адреса в своем формате.
Поиск:
1. Если адрес, подается разбору по 9 запятым или меньше, то пробуем найти его в КЛАДР (в КЛАДРе есть не все) по этому анализируется так-же и наши справочники. пункт 3. иначе пункт 2.
2. Если адрес, не поддается разбору. Выводим диалог выбора из классификатора. Пользователь пытается найти адрес, если находи пункт 5, иначе пытается собрать приблизительно соответствующий, допустим в классификаторе нет нужной улицы в нужном городе или населенного пункта в район, такое встречается, выбираем другую улицу и формируем адрес и переходим к пункту 3.
3. Если удается собрать адрес или его часть, то показываем диалог редактирования адреса. Пользователь корректирует и сохраняет, пункт 4.
4. Программа ищет во входящем наборе подобные адреса, которые отличаются каким либо признаком допустим домом, корпусом. И предлагает их привязать к только что созданному. ну или пункт 2.
Ну вообщем что-то приблизительно так.
Но проще всего всю ответственность свалить на оператора, который должен корректно импортировать адреса. Нашу совесть ложиться только помочь более или менее облегчить его муки.
P.S. А вы пробовали анализировать фармацевтический ассортимент =) только человек или гигантская база знании и умный ии решат такую задачу, ваша задача из этого же разряда =)