All Projects → AMDmi3 → Streetmangler

AMDmi3 / Streetmangler

Licence: gpl-3.0
Russian street name database and format converter

Projects that are alternatives of or similar to Streetmangler

Osm4j Core
Core components of osm4j
Stars: ✭ 16 (-52.94%)
Mutual labels:  openstreetmap
Nominatim Ac
Elasticsearch backed place name autocomplete based on Open Street Map Nominatim data
Stars: ✭ 11 (-67.65%)
Mutual labels:  openstreetmap
Osmbc
Open Street Map Blog Collector
Stars: ✭ 21 (-38.24%)
Mutual labels:  openstreetmap
Osmium Contrib
Mixed more or less useful programs using the Osmium library
Stars: ✭ 18 (-47.06%)
Mutual labels:  openstreetmap
Osmium Filter
Fast filter for OSM data
Stars: ✭ 9 (-73.53%)
Mutual labels:  openstreetmap
Farms App
An Adobe AIR mobile app that uses the USDA Farmers Markets database, Google Directions API, OpenStreetMaps and the Geolocation API to find markets near users.
Stars: ✭ 12 (-64.71%)
Mutual labels:  openstreetmap
Osm2xmap
Converter from OpenStreetMap data format to OpenOrienteering Mapper format.
Stars: ✭ 5 (-85.29%)
Mutual labels:  openstreetmap
Osmquery
Query OSM data and add results to your ArcGIS project
Stars: ✭ 33 (-2.94%)
Mutual labels:  openstreetmap
Osmnx Examples
Usage examples, demos, and tutorials for OSMnx.
Stars: ✭ 863 (+2438.24%)
Mutual labels:  openstreetmap
Streetcomplete Mapstyle
🌎 Simple, minimalist yet modern mapstyle
Stars: ✭ 21 (-38.24%)
Mutual labels:  openstreetmap
Osm Testdata
OpenStreetMap Test Data.
Stars: ✭ 24 (-29.41%)
Mutual labels:  openstreetmap
Wikimama
Scripts to help matching OSM features to Wikidata items
Stars: ✭ 8 (-76.47%)
Mutual labels:  openstreetmap
Bitcoin Php
Bitcoin implementation in PHP
Stars: ✭ 878 (+2482.35%)
Mutual labels:  address
Osmproxy
OpenStreetMap tile proxy for REDAXO
Stars: ✭ 17 (-50%)
Mutual labels:  openstreetmap
Filemap.xyz
upload files to a geographic point. never memorize a link again.
Stars: ✭ 29 (-14.71%)
Mutual labels:  openstreetmap
Utymap
Highly customizable library for procedural world generation based on real map data
Stars: ✭ 825 (+2326.47%)
Mutual labels:  openstreetmap
Jhaddresspickview
省市区选择器,省市二级选择,省市区三级选择,PickView,地址选择器
Stars: ✭ 12 (-64.71%)
Mutual labels:  address
Mapbox Gl Js
Interactive, thoroughly customizable maps in the browser, powered by vector tiles and WebGL
Stars: ✭ 8,017 (+23479.41%)
Mutual labels:  openstreetmap
Cryptocurrency Address Detector
Detect which cryptocurrency an address corresponds to.
Stars: ✭ 30 (-11.76%)
Mutual labels:  address
Mapsforge
Vector map library and writer - running on Android and Desktop.
Stars: ✭ 885 (+2502.94%)
Mutual labels:  openstreetmap

streetmangler - реестр и конвертер названий улиц

Build Status Coverage Status

В российском OSM принято соглашение о правилах именования улиц, позволяющее (при соответствии ему подавляющей части базы, разумеется) избежать значительной части адресных ошибок, неполноты данных, упростить машинную обработку и просто использовать единый для всей страны стиль.

Изначально для проверки соответствия и приведения в соответствие соглашению названий улиц был применён эвристический подход, позволивший поднять долю корректно именованных улиц с 55% до 96%, одновременно сократив количество адресных ошибок по меньшей мере в 5 раз, или на ~100000 при общем количестве адресов в базе 600000-700000 (т.е. каждый 7-й адрес был ошибочным). Однако этот подход имеет свои ограничения в виде процента ложных срабатываний, достаточного для необходимости ручной проверки замен, что не позволяет выложить инструмент для исправления названий в общий доступ или выполнять исправления регулярно в автоматическом режиме.

Альтернативным решением является ведение словаря или реестра всех существующих названий улиц. Это позволит полностью избежать ложных срабатываний (помимо действительных ошибок в словаре), хотя и потребует значительной работы по наполнению базы, но если учесть что в эвристическом нормализаторе также используются словари (для определения частей речи) и он также требует ручной работы по проверке данных, новый подход видится гораздо более эффективным.

Также автор надеется что проект найдёт применение и за пределами OSM.

Возможности

На данный момент реализовано:

  • поиск точного совпадения
  • поиск неточного совпадения (разный регистр, разный порядок слов, сокращения статусной части)
  • поиск неточного совпадения с учётом орфографических ошибок
  • поиск названий с предположительно отсутствующей статусной частью
  • класс для обработки названий улиц, который можно использовать в том числе и отдельно от базы, например в конверторах
  • утилита для выделения названий улиц из OSM XML дампа, и их классификации

Пока не реализовано:

  • поддержка других языков (хотя Komzpa использует белорусскую локаль)
  • утилита для самотестирования (сверка базы с ней же для поиска потенциальных ошибок)
  • утилита для замены названий улиц в OSM
  • утилиты для сверки с другими источниками, например КЛАДР

База

Данные берутся из OpenStreetMap. Используются все тэги addr:street и аналогичные (addr:street2, addr2:street и т.д.), name линейных объектов с тегом highway, за исключением bus_stop и emergency_access_point, а также name отношений указанных типов.

Формат базы тривиален - текстовый файл в кодировке UTF-8, по одному названию улицы на строку, текст после символа # считается комментарием и игнорируется, равно как и лишние пробелы.

Основной список улиц - data/ru/main.txt, см. также другие файлы в data/ru/.

Библиотека

Исходный код из директории lib/ может использоваться как с, так и отдельно от базы. Смотри README.API

Биндинги

Имеются swig-биндинги для python и perl, поддерживающие большую часть функционала библиотеки.

Сборка

Необходимые зависимости:

  • cmake
  • icu
  • expat2

Опциональные зависимости:

  • perl (для perl биндингов)
  • python (для python биндингов)
  • swig (для любых биндингов)

Сборка:

cmake . && make

Сборка без биндингов:

cmake -DWITH_PERL=NO -DWITH_PYTHON=NO . && make

Запуск тестов:

ctest -V

Утилиты

Единственная на данный момент утилита - process_names. Она позволяет загрузить из текстового файла или выбрать из OSM XML дампа названия улиц, сопоставить их с базой и классифицировать. По результатам можно получить статистику и списки найденных/не найденных улиц, которые можно далее использовать как для пополнения базы, так и для исправления названий в OSM.

Формат вызова:

process_names [-cdhsAN] [-p N] [-l locale] [-a tag] [-n tag] [-r type] [-f database] file.osm|file.txt|- ...

Аргументами может быть любое число файлов с расширениями .osm (обрабатывается как osm xml дамп), .txt (обрабатывается как текстовый список названий), а также символ -, который означает чтение osm xml дампа с stdin.

Опции:

-s дополнительно к статистике по уникальным названиям улиц считать статистику по каждому отдельному использованию названия. Немного замедляет работу утилиты.

-d сохранять списки улиц в файлы в текущем каталоге:

  • dump.all.txt - все названия из входного файла

  • dump.exact_match.txt - точные совпадения с базой

  • dump.canonical_form.txt - названия, требующие приведения к канонической форме

  • dump.spelling_fixed.txt - предположительно исправления опечаток

  • dump.stripped_status.txt - названия с пропущенной статусной частью

  • dump.no_match.txt - названия не найденные в базе

  • dump.no_match.full.txt - названия, не найденные в базе, приведённые к полной форме (т.е. в формат подходящий для пополнения базы)

  • dump.non_names.txt - предположительно, не названия улиц

-c при использовании опции -d также создавать списки названий улиц с количеством раз, сколько каждое название встречалось

  • dump.counts.all.txt - все названия

  • dump.counts.spelling_fixed.txt - предположительно, исправления опечаток

  • dump.counts.no_match.txt - названия, не найденные в базе

  • dump.counts.non_name.txt - предположительно, не названия улиц

-l указать локаль (по умолчанию и единственная доступная на данный момент - "ru_RU")

-p расстояние проверки орфографии (максимальное число ошибок в слове) (по умолчанию 1)

-f указать путь к базе данных (по умолчанию используется data/ru.txt из директории с исходниками проекта). Можно использовать эту опцию несколько раз, загружная несколько баз

-a указать тэг(и), из которых будут читаться адресные названия улиц (опцию можно указывать несколько раз). По умолчанию (если данная опция не указана) используются "addr:street", "addr:street1", "addr:street2", "addr:street3", "addr2:street", "addr3:street".

-A не использовать список адресных тэгов по умолчанию

-n указать тэг(и), из которых будут читаться названия у highway-объектов (опцию можно указывать несколько раз), По умолчанию (если данная опция не указана) используется только тэг "name"

-N не использовать список name-тэгов по умолчанию

-r указать тип(ы) отношений (тип - значение тэга type=), для которых будут использоваться name тэги. (addr тэги всегда обрабатываются для всех отношений)

-h показать краткую справку

Пополнение базы

Прежде всего, планируется постоянное пополнение базы данных. Эту работу можно условно разделить на 3 фазы:

  1. Доведение процента распознанных улиц до показателей эвристического нормализатора
  2. Добавление в базу всех улиц, присутствующих в OSM
  3. Периодический импорт новых названий, появляющихся в OSM

На данный момент проект находится на 1 фазе, совпадают с базой 61.52% уникальных названий улиц в России. Уровень эвристического нормализатора - 77.40%.

Возможно, для облегчения 3 фазы будет создана отдельная база с не-улицами (и, возможно, она будет использована для исправления OSM, потому что "name=грунтовка" - очевидно, ошибка).

В будущем возможно введение более развитой структуры базы, например с учётом различных написаний имён собственных в названиях (т.е. "улица Льва Толстого" vs. "улица Л.Н.Толстого") ([email protected])

Проверочные источники

Лицензия

Код распространяется под GPLv3. Полный текст лицензии находится в файле COPYING.

Названия улиц взяты из OpenStreetMap: http://www.openstreetmap.org/copyright

Автор

Дмитрий Маракасов [email protected]

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].