@Alexchexes

Как парсить почтовые адреса (своя реализация)?

1. Есть адреса РФ, записанные в произвольной форме, например:
ижсталь 1 2 16-я 1 массив 1 литер а
Который нужно привести к такому виду:
Удмуртская Респ, Завьяловский р-н, тер. СНТ Ижсталь-1-2, ул Массив 1-16-я, д 1А


2. Есть федеральный справочник ФИАС/ГАР, в котором хранятся все ныне существующие адреса

3. Есть своя база данных, в которой хранятся адреса в правильной ФИАСовской форме, разбитые по полям, но в ней не все адреса ФИАСа, а только те, с которыми мы работаем (есть предположительно все населённые пункты РФ, но вот снт, улицы, и дома есть уже не все, их слишком много)

4. Есть входные данные в виде списков из таких произвольных адресов, которые могут быть более-менее нормальными (г москва ул тестовская 1) а могут быть чем-то вроде примера выше.

5. Нужно, при обработке входных данных, обращаясь в первую очередь к своей базе данных (а не к ФИАС), находить, есть ли у нас такой адрес как Удмуртская Респ, Завьяловский р-н, тер. СНТ Ижсталь-1-2, ул Массив 1-16-я, д 1А, если нет адреса с точностью до дома, то находить посёлок типа тер. СНТ Ижсталь-1-2, если и его нет, то хотя бы находить район Завьяловский р-н в регионе Удмуртская Респ.
После такой первичной проверки, уже делать запрос в сервис распознавания адресов типа API Яндекса, Дадаты, Гугла и т.д.

Этот вопрос о том, как можно уверенно находить в БД PostgreSQL почтовый адрес, содержащий цифры в названии населённого пункта (СНТ Ижсталь-1-2) или в названии улицы (ул Массив 1-16-я), при том что в исходной строке для поиска всё это записано в другом порядке, формы слов могут отличаться или частично отсутствовать составные части, а ещё и номер дома прилеплен без разделителя к названию улицы/нас.пункта.

Осложняет ситуацию (наверное) ещё и тот факт, что улицы в адресе иногда нет, идёт название населённого пункта и сразу же номер дома, например СНТ Ижсталь 1 2 75, имея в виду СНТ Ижсталь-1-2, д 75, и это будет правильный, реально существующий адрес.

Как бы вы подступились к этой задаче на уровне приложения, на уровне базы данных?
  • Вопрос задан
  • 180 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы