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
, и это будет правильный, реально существующий адрес.
Как бы вы подступились к этой задаче на уровне приложения, на уровне базы данных?