Как многим уже известно, последний месяц я занимался, как и собирался, общероссийским реестром топонимов. Думаю, пришло время его анонсировать.
Проект назвается streetmangler, лежит тут https://github.com/AMDmi3/streetmangler и состоит из базы названий улиц, C++ библиотеки для работы с ней и утилиты, позволяющей выбрать из дампа .osm улицы, сравнить с базой и классифицировать.
Что умеет: всё то же, что и старый нормализатор (т.е. сказать, правильно ли написано название, в противном случае по возможности предложить исправление), быстрее, без костылей и с дополнительными возможностями плюс функциональность моего Perl модуля Geo::Names::Russian::Mangle, т.е. возможность конвертировать адреса в нужный формат (например, “улица Ленина” → “Ленина ул.” для навигаторов).
- быстрее, потому что на C++. Россия парсится за 4 минуты.
- есть биндинги к Python, в планах также Perl
- улицы сравниваются с базой, поэтому вероятность ложных срабатываний (по крайней мере по части канонического написания) крайне мала и возможна только при ошибках в базе. На данный момент всё, что добавляется в базу я кропотливо просматриваю, а в будущем планируется также сверка с КЛАДР и базы с самой собой, что позволит выявить закравшиеся ошибки, если таковые будут
- более продвинутая классификация улиц. Кроме канонической формы (т.е. полная статусная часть с правильной стороны) ищутся опечатки с произвольной глубиной:
улци 50 лет Октября|улица 50 лет Октября
ульвар Яна Райниса|бульвар Яна Райниса
уляца Зимняя|Зимняя улица
а также автоматически определяется отсутствие статусной части.
- возможность задавать свои правила написания статусных частей и добавлять поддержку новых языков.
Основной минус проекта вытекает из того же, из чего вытекают плюсы, а именно из наличия базы и того факта, что она должна быть полной. На данный момент 42.94% уникальных названий улиц в OSM совпадают с базой (старый нормализатор давал 77.40% +/- ошибки в обе стороны). По общему количеству названий (т.е. название с улицы + со всех addr:street на домах) 84.33% и 96.29% соответственно. В общем, наполнена пока только половина базы, но, во-первых, пополнение продолжается, во-вторых, “уникальные” неправильно написанные названия из OSM рано или поздно будут исправлены, и в будущем старый нормализатор будет обогнан.
Планы:
- перевод нормализации названий на новые рельсы. Собственно, я уже некоторое время ей не занимался, так что число ошибок возросло, но теперь вместо ручной проверки списка замен можно будет исправлять всю Россию автоматически ежедневно с выкладыванием лога замен, для чего, наверное, стоит зарегистрировать нового пользователя. Это, разумеется, касается только приведения к канонической форме, опечатки всегда будут проверяться руками (особенно при неполной базе)
- наверное, стоит запилить просматривалку по аналогии с addresses.amdmi3.ru
- дальнейшее пополнение и проверка базы. Нужно как минимум догнать старый нормализатор.
- потихоньку начать (пока ручное) исправление улиц - канонические формы по областям и отдельные опечатки по всей России. Чем правильнее данные в OSM, тем легче пополнять базу.
Да, проект уже используется в поиске на http://openstreetmap.by, и если ваша улица написана неправильно или её нет в базе, находиться она не будет, так что исправляйте названия в OSM и присылайте добавления к базе.