Версия 1.0
Авторы: Володько Екатерина, Моськов Алексей
Данное консольное приложение является реализацией геокодера (для российских адресов) на базе OSM и осуществляет прямое геокодирование (определяет координаты по заданному адресу) как для орфографически верных, так и ошибочных адресов
- Python версии 3
- Консольная версия:
console.py
- Создание баз данных:
create_db/
- Результаты профилирования:
profilers_data/
- Тесты:
tests/
- Обработка вводимых адресов:
words_parser/
Справка: ./console --help
Пример поиска координат адреса: ./console --address "г Екатеринбург улица Тургенева 4"
В ходе реализации геокодера было поставлено ограничение - работа с данными без запроса к сети, поэтому геокодер состоит из 2 смысловых частей: создание баз данных по России с необходимой информацией для геокодирования и, собственно, сам геокодер, который по введенному адресу определяет координаты.
Так как данные по России довольно объемные (6,3 ГБ в сжатом формате) и их обработка занимает продолжительное время, то предварительно уже составлены базы данных по регионам России, состоящие из 2 таблиц (1-я id и координаты, 2-я сам адрес (регион, населенный пункт, улица, номер дома) и id).Их можно найти в create_db.databases
. Также отдельно составлены базы данных с городами по регионам (можно найти в create_db.cities_by_region
).
В данной части реализовано прямое геокодирование как орфографически правильных адресов, так и вывод наиболее близких вариантов к введенным с ошибкой на основе алгоритма Дамерау-Левенштейна.
В основе этой части лежат классы:
words_parser.addressparser.Address_parser
, который парсит введенный адрес на регион, город, улицу, номер домаwords_parser.finder.CoordinatesFinder
, реализующий поиск координат в базах данных по распарсенному адресуwords_parser.algorithms.LevenshteinDistance
, представляющий реализацию алгоритма Дамерау-Левенштейна
Работа с консолью осуществляется через функцию console.input_data()
, которая обрабатывает введенный адресс и выводит результат геокодирования в отдельный файл формата JSON.
На модули words_parser.address_parser
, words_parser.algorithms
, words_parser.finder
написаны тесты, их можно найти в tests.test_words_parser.py
. Также в tests.test_create_db.py
находятся тесты на модуль create_db.csvparser
.