Позволяет стандартизировать адреса, напечатанные от руки, и находить их соответствия в ФИАС. Поиск предлагает варианты адреса с ошибкой/отсутствием до 2 знаков, связано это с ограничениями elastic'а.
- 60Гб дискового пространства
- Python 3 + pandas, simpledbf и elasticsearch
- Elasticsearch 7+
- Полная БД ФИАС в формате dbf (https://fias.nalog.ru/Updates.aspx)
-
Скачать ФИАС (https://fias.nalog.ru/Updates.aspx) и распаковать
-
Запустить elastic и kibana
docker-compose up
- Установить зависимости
pip install -r requirements.txt
- Загрузить ФИАС в elasticsearch. Это обычно занимает около 9 часов.
python upload_fias.py --fiasdir Path/to/extracted/fias --delete
- Теперь можно пользоваться методами из api.py. Главный метод там — standardize(string) и get_addr([string])
import api
addr = "г. Москва, ул. Тверская, д.4"
list_of_addrs = ["г. Москва, ул. Тверская, д.4", "Москва, Коровий вал 3"]
norm_addr = api.standardize(addr)
list_norm_addrs = api.get_addr(list_of_addrs)
Задача: разбить одно поле (адреса) на несколько полей, таких как дом, улица, город итд Так как все адреса принципиально не отличаются друг от друга, то набор этих полей уже заранее известен. Порядок их в строке может незначительно меняться, но обычно он один и тот же: Индекс, город, улица, дом, корпус, квартира. Каждое из этих полей заполняется совершенно разными значениями, которые практически никогда не пересекаются, поэтому словарный подход здесь будет как никогда актуален. Вся идея свести задачу извлечения полей к задаче поиска адреса в базе данных. При этом некоторые поля, такие как адрес и номер дома гораздо более надёжно извлекать эвристически, нежели поиском.
Извлечение адресов происходит в следующие этапы:
- Детекция полей по шаблону
- Извлечение индекса
- Извлечение номера дома/корпуса
- Определение границ названия улицы/города
- Поиск улицы и города в БД ФИАС
- Поиск дома и корпуса для данной улицы в ФИАС
- api.py - методы для непосредственно использования проекта
- upload_fias.py - для первоначальной загрузки файлов в fias
- parsing.py - все методы для предобработки адреса, работают с самим текстом.
- tests.py - проверка качества
- ref/references.xlsx - референсная выборка для оценки качества
Если вы делаете форк проекта, я буду очень рад дополнить проект вашими изменениями. Присылайте pull-requests! Как оказалось, этот проект часто пригождается разным командам.
В данный момент требуется помощь с
- Упрощением разворачивания проекта. Скорее всего нужно переместить elasticsearch на внешний сервер и не разворачивать его локально.
- Улучшением качества выдачи самим elastic.
- Сокращением memory footprint. Распакованный ФИАС весит около 50Гб, а индексы на elastic весят порой больше 100Гб.