Позначення адрес в Україні - нові правила (обговорення)

У нас виходить, що настанови про порядок слів стосуються одночасно і адресних теґів і самих назв вулиць, майданів та інших обʼєктів. Чи варто розділити пропозицію на дві частини і представляти їх на затвердження окремо?

Зараз це частина статті «назви». Я б так і залишив. Можливо варто написати в цій же статті рекомендації й щодо інших географічних назв: парків, скверів, гір, річок тощо. В UK:Адреси краще ясніше розписати про адресні теґи, у яких випадках їх застосовувати; доповнити прикладами і т. і.

На мою думку, розділяти пропозицію на дві частини не варто, адже і в теґ name і в теґ addr:street заноситиметься одна й та ж назва

В ідеалі було би прописати тег addr:distance=*, де б за замовчуванням дистанція вимірювалась у кілометрах (аналогічно з тим, як працює тег distance=*). Для наведеного вище прикладу:

addr:street=а\д Дніпро-Царичанка-Кобиляки-Решетилівка
addr:distance=43

Я б волів не придумувати нові теґи.

addr:distance=*addr:distance | Keys | OpenStreetMap Taginfo – всього два випадки застосування десь в Італії.

1 Like

@darkonus, можеш сказати, коли ти зможеш презентувати рекомендації по написанню назв вулиць?

Якщо ніхто не хоче нічого обговорити чи додати, рекомендації готові:
Правила написання повних назв вулиць - Google Docs

2 Likes

Записав невелику презентацію про правила написання назв вулиць

1 Like

Дивлюся, ти вирішив прибрати частину про використання слва «бічна/бічний». Може це й краще. Дуже важко пересічному користувачу в більшості випадків визначити чи є слово бічна/бічний частиною валсною назви, чи частиною родового позначення.

так, прибрав, бо питання дискусійне

Пропоную варіант з доповненнями від @darkonus та прикладами. Якщо не буде якихось суттєвих зауважень цей текст можна перенести до Uk:Адреси - OpenStreetMap Wiki.

Адреси

Адреси дозволяють визначити знаходження місця (розташування місця на місцевості) не тільки за його координатами, а й за його адресою, яка утворюються на підставі даних про територіальний поділ (key:place).

Адресою об’єкта нерухомого майна (далі – адреса) є унікальна структурована сукупність реквізитів, що використовуються для ідентифікації об’єкта та визначення місця його розташування на місцевості.

Адреса присвоюється об’єктам будівництва, будинкам, будівлям, спорудам, квартирам, гаражним боксам, машиномісцям, іншим житловим та нежитловим приміщенням, які є самостійними об’єктами нерухомого майна.

Адреса не присвоюється: 1) тимчасовим спорудам; 2) будівлям та спорудам, що є приналежністю відповідної будівлі або споруди або їх складовою частиною; 3) іншим об’єктам нерухомого майна, перелік яких визначається Кабінетом Міністрів України в Порядку присвоєння адрес об’єктів нерухомого майна (далі - Порядок присвоєння адрес). [1]

Індивідуальні (садибні) житлові будинки, садові, дачні будинки, які будуються (збудовані) на земельній ділянці, право власності на яку зареєстровано в Державному реєстрі речових прав на нерухоме майно (крім будинків, які містять дві та більше квартир, споруджених відповідно до законодавства)

Адресою індивідуальних (садибних) житлових будинків, садових, дачних будинків, які будуються (збудовані) на земельній ділянці, право власності на яку зареєстровано в Державному реєстрі речових прав на нерухоме майно (крім будинків, які містять дві та більше квартир, споруджених відповідно до законодавства) вважається місце розташування земельної ділянки, на якій споруджено відповідний будинок, згідно із відомостями Державного реєстру речових прав на нерухоме майно. [2]

Визначення реквізитів адреси

Відповідно до п.4 статті 26³ Закону адреса складається з:

назва держави (Україна)
: це то що може бути в значенні теґу addr:country=UA.

назва області
: (назва адміністративно-територіальної автономії у складі України – для об’єктів, розташованих на території Автономної Республіки Крим) – може бути в значенні теґу addr:state=*.

назва району
: для населених пунктів районного підпорядкування – може бути в значенні теґу addr:district=*.

назва населеного пункту,
: а для об’єктів, розташованих за його межами, – назва найближчого населеного пункту (об’єднаної територіальної громади), розташованого у межах відповідного району (об’єднаної територіальної громади) – відповідно addr:city=*.

Однак, виходячи з принципу топологічної вкладеності територій – [Україна [Область [Район [Населений Пункт]]]] ми не використовуємо наведені вище теґи (addr:country=*, addr:state=*, addr:district=*, addr:subdistrict=*, addr:city=*) для кожної окремої адреси. Ці компоненти адреси наслідуються з назв (name=*) відповідних полігонів, позначених теґами place=country/state/district/city/village/…, через те, що вони територіально входять в полігони вищого рівня (де найвищім з точки зору адреси є place=country), і мають використовуватись (автоматично оброблятись) геокодерами для прямого геокодування та складати адресу для заданих координат при зворотньому геокодуванні. Див докладніше Адміністративно-територіальний устрій України.

назва вулиці,
: площі, майдану, шосе, проспекту, бульвару, алеї, провулку, узвозу тощо (далі - вулиця) (за наявності) – addr:street=* (або addr:place=*), значення теґу має збігатися зі значенням теґу name=* лінії вулиці, додається до обʼєкта нерухомості, що має адресу.

номер об’єкта (будинку, будівлі, споруди)
: addr:housenumber=*.

номер корпусу
: для об’єктів, які складаються з декількох корпусів – addr:unit=*.

номер квартири,
: гаражного боксу, машиномісця, іншого житлового та нежитлового приміщення – addr:room=* addr:door=*, яке є самостійним об’єктом нерухомого майна (за наявності). (Діапазон квартир/приміщень, що знаходяться за дверима (підʼїзду) позначаєеться за допомогою теґа addr:flats=*.)

кімната
: в комунальній квартирі, окрема частина нежитлового приміщення, паркомісце – addr:door=* addr:room=*.

Перелік гідрографічних, соціально-економічних, природно-заповідних або інших подібних об’єктів, які можуть використовуватися як реквізит адреси на певній території, затверджується відповідним виконавчим органом сільської, селищної, міської та районної у місті ради, місцевою державною адміністрацією. Для їх теґування використовується теґ addr:place=*.

Додатково може зазначатись поштовий індекс (addr:postcode=*) державного оператора поштового звʼязку Укрпошта. Поштовий індекс – набір символів, що додається до поштової адреси для полегшення сортування пошти.

Визначення реквізитів адреси “назва держави”, “назва адміністративно-територіальної одиниці”, “назва району”, “назва населеного пункту”, “назва об’єднаної територіальної громади”

Назва держави – Україна. Зазначається мультиполігону, що охоплює всю територію країни, теґами place=country + name=Україна.

Назва адміністративно-територіальної одиниці (Автономна Республіка Крим, області, м. Київ та м. Севастополь), визначається відповідно до частини другої статті 133 Конституції України.

Назви району (для населених пунктів районного підпорядкування), населеного пункту, сільської ради визначаються відповідно до Кодифікатора адміністративно-територіальних одиниць та територій територіальних громад, затвердженого наказом Мінрегіону від 26 листопада 2020 р. № 290 (із змінами) та постанов Верховної Ради України, згідно з якими створюються, змінюються, перейменовуються, ліквідуються райони.

Назва об’єднаної територіальної громади визначається згідно з Кодифікатором адміністративно-територіальних одиниць та територій територіальних громад, затвердженим наказом Мінрегіону від 26 листопада 2020 р. № 290 (із змінами). Докладніше дивись – Територіальний устрій у Wiki OSM.

Визначення реквізиту адреси “назва вулиці”

Повну назву вулиці, провулку, проспекту, бульвару, мікрорайону тощо (далі — повна назва вулиці) записуємо українською у відповідні теґи (див. addr:street=* або addr:place=*, name=*). Повна назва вулиці, зазвичай, складається з родового позначення та власної назви.

Порядок слів у повних назвах вулиць

Якщо власна назва вулиці є прикметником, спочатку записуємо власну назву, а потім родове позначення: Айдарівська вулиця, Бічний провулок, Соборна площа, Дніпровська набережна, Торецько-Набережна вулиця, Донецьке шосе, Конотопський тупик, Європейський бульвар, Ломівський житловий масив, Юзикове урочище, Лісова просіка.

Якщо власна назва вулиці не є прикметником, спочатку записуємо родове позначення, а потім власну назву: вулиця Шевченка, провулок 8 Березня, майдан Незалежності, площа Свободи, набережна ім. В. Стефаника, узвіз Грузевича, тупик Червона Балка, урочище Соколова Гора, мікрорайон Сокіл-1, просіка Лужки.

Написання родових позначень

Родове позначення записуємо повністю, кожне слово з маленької літери: вулиця, площа, майдан, набережна, шосе, тупик, бульвар, проспект, просіка, алея, провулок, завулок, проїзд, вʼїзд, зʼїзд, роз’їзд, узвіз, спуск, лінія, житловий масив, мікрорайон, присілок, урочище, дорога, шосе, бічна вулиця, бічний провулок тощо.

Якщо в повній назві слова брід, вал, ворота, міст, шлях, яр, бічна і т. ін. вже не сприймаються як родові позначення і стали частиною власної назви, пишемо їх з великої літери: вулиця Вічевий Майдан, вулиця Добрий Шлях, вулиця Тупий Провулок, вулиця Очеретинський Завулок, вулиця Ярославів Вал, просіка Урочище Карпова, вулиця Бічна Богдана Хмельницького, Бічний Спадистий провулок.

Написання власних назв

Власні назви пишемо з великої літери (незалежно від кількості їх складників), крім родових позначень та службових слів: Польова, ім. Лесі Українки, Зелена, Крива Нива, Зелений Гай, Братів Тупчиєнкових, 8 Березня (але 24 серпня 1991 року), Сестер Сломницьких, 50-річчя Ради Європи, Вірі, Надії, Любові, 75-річчя ФК «Шахтар», Героїв Полку «Азов», вулиця Тараса Бобанича «Хаммера».

Якщо на табличках вказане імʼя та прізвище, лише прізвище чи псевдонім особи, записуємо їх у звичайному порядку: Шевченка, Михайла Грушевського, Винниченка, Богдана Ільківа, Марка Вовчка. Якщо ж на вуличних табличках вказані ініціали, записуємо їх перед прізвищем особи, через нерозривні пробіли ( ): Т. Шевченка, І. І. Руденка, А. Головатого. Не варто розшифровувати ініціали, якщо на вуличних табличках цього не зроблено.

Складники власних назв, що називають титули, посади, фах тощо пишемо перед імʼям особи з великої літери: Генерала Кульчицького, Князя Ярослава Мудрого, Академіка Заболотного. Також з великої літери пишемо назви зі словами святий, пресвятий: Святого Архангела Михаїла, Святої Анни, Пресвятої Марії.

На місці власної назви може бути літера: лінія А, вулиця А, 1-ша лінія А.

Рекомендується використовувати апостроф ʼ (U+02BC), лапки « та » (U+00AB та U+00BB, відповідно), дефіс - (U+002D), тире (U+2013), довге тире (U+2014). Римські цифри записуються літерами латинської абетки: I = 1, X = 10, С = 100, М = 1000, V = 5, L = 50, D = 500.

Номери у повних назвах вулиць

Часто є кілька паралельних чи сусідніх вулиць що мають однакову власну назву, але різні номери: 1-ша лінія Лесі Українки та 2-га лінія Лесі Українки і т. д. На початку повних назв таких вулиць пишемо числівник та буквене нарощення через дефіс.

Нарощення має бути:

  1. однолітерним, якщо перед останньою літерою числівника стоїть літера, що позначає голосний звук: третій — 3-й, третьою — 3-ю;
  2. дволітерним, якщо перед останньою літерою числівника стоїть літера, що позначає приголосний звук: третє — 3-тє, третього — 3-го.

Приклади: 1-ша Південна вулиця, 1-й Болгарський провулок, 3-й завулок 8 Березня, 3-й проїзд Юрія Левади, 3-й Набережний тупик, 2-га Набережна вулиця, 1-й в’їзд Автомобілістів, 10-та лінія Лесі Українки.

У настановах української Вікіпедії можна прочитати детальніше про правила нарощення порядкових числівників.

Номер може не стосуватися повної назви вулиці, а бути частиною власної назви: вулиця 1-ша Плотина, вулиця 2-га Плотина, вулиця 295-ї Херсонської Дивізії, житловий масив Сокіл-1. Іноді повна назва вулиці може складатися лише з номера та родового позначення: 10-та вулиця, 1-й тупик, 24-та лінія, 1-й тупик 24-ї лінії, 15-й мікрорайон.

Утворення від назви основного обʼєкта

Це правило використовується для випадків коли поряд з основною вулицею чи обʼєктом є сусідні пронумеровані «лінії», «проїзди», «квартали» тощо, складником назви яких є назва основної вулиці чи обʼєкта. Такі складні назви записуємо у порядку: номер, родове позначення, повна назва основної вулиці чи обʼєкта у родовому відмінку, наприклад: Набережна вулиця річки Псел, Лівонабережна вулиця річки Камʼянки, 1-й провулок Паркової вулиці, 3-й проїзд Стадіонної вулиці, 2-й проїзд вулиці Рунге, 10-та лінія вулиці Менделєєва, 1-ша Набережна вулиця річки Стрілки, 2-га Набережна вулиця річки Стрілки.

Визначення реквізитів адреси “номер об’єкта (групи будівель та споруд підприємства (як єдиного майнового комплексу), будівлі, споруди)”, “номер корпусу об’єкта”

Для нумерування об’єктів використовуються арабські цифри. Номер об’єкта може також містити літеру. Літера використовується у разі, коли відсутня можливість забезпечити послідовну нумерацію будівель, розташованих вздовж вулиці (наприклад, у разі будівництва двох чи більше будівель замість однієї, поділу будівель на дві чи більше блокованих).

Для нумерації об’єктів використовуються великі літери українського алфавіту в такій послідовності: “А”, “Б”, “В”, “Г”, “Д”, “Е”, “Ж”, “И”, “К”, “Л”, “М”, “Н”, “П”, “Р”, “С”, “Т”, “У”, “Ф”, “Х”, “Ц”, “Ч”, “Ш”, “Ю”, “Я”.

Літера зазначається після номера через дефіс. ("-" HYPHEN-MINUS Unicode: U+002D, UTF-8: 2D)

addr:housenumber=1-Б
addr:housenumber=1-Ж

До адреси декількох об’єктів під одним номером (об’єктів, що складаються з декількох корпусів) додається номер об’єкта (корпусу, ділянки або будинку (садового, дачного), гаражу, елінгу, ангару тощо), який позначається арабською цифрою через пробіл після слова, що характеризує об’єкт (“корпус”, “гараж” тощо) (наприклад, № 12, корпус 1; № 4, гараж 112).

addr:housenumber=12 + addr:unit=корпус 1
addr:housenumber=4 + addr:unit=гараж 112

Реквізит адреси «номер корпусу» (addr:unit=*) може застосовуватися для існуючих об’єктів з поділом на корпуси та для об’єктів будівництва, що за проектною документацією визначені як єдиний (комплексний) об’єкт, та складається з окремо розташованих або зблокованих будівель. Наприклад, корпуси ликарень, навчальних закладів, установ та житлових будинків.

Для об’єктів, що є окремою частиною об’єкта (місце, паркомісце або машиномісце, вбудований гараж тощо), застосовується реквізит адреси “номер окремої частини об’єкта” (addr:flats=ʼ*) відповідно до розділу “Визначення реквізиту адреси “номер окремої частини об’єкта” Порядку. Для вбудованих та прибудованих приміщень, господарських будівель та споруд, гаражів, інших об’єктів у складі садиби, садового, дачного будинку окрема нумерація не застосовується.

Визначення реквізиту адреси “номер окремої частини об’єкта” (квартири, приміщення, й т.і.)

Окремі частини об’єкта (квартири, приміщення тощо) нумеруються арабськими цифрами.

addr:door=1

Квартири, нежитлові приміщення та місця для паркування (машиномісця) у вбудованих автостоянках у багатоквартирних житлових будинках нумеруються окремо.

Для підземних споруд, підвальних підземних приміщень (зокрема для вбудованих автостоянок, паркінгів) перед номером ставиться літера “п” із зазначенням номера підвального поверху.

addr:door=п 1 + addr:floor=-1

Для вбудованих автостоянок, паркінгів тощо машиномісця нумеруються окремо від нежитлових приміщень та квартир із додаванням літер “п/м” перед номером.

addr:door=п/м 23

Для існуючих комунальних квартир та приміщень у гуртожитках у разі потреби до реквізиту адреси «номер окремої частини об’єкта» додається номер кімнати, яка позначається арабською цифрою через пробіл після слова «кімната» (наприклад, квартира 12, кімната 1; приміщення 6, кімната 3).

addr:door=12 + addr:room=1
addr:door=6 + addr:room=3

Обʼєктам переліченим в Додатку Положення адреси не призначаються.

Як мапити

Загальні випадки

Адреса додається до обʼєкта, якому вона належить. Зазвичай це полігон (замкнена лінія чи звʼязок) з теґом теґом building=*, але це може бути також окрема точка або полігон з будь-якими іншими теґами. Див. #Розширене теґування.

Адреса будинку

Номер обʼєкта зазначається за допомогою теґа addr:housenumber на (мульти)полігоні споруди, за відсутності будинку на ділянці – на точці, чи на самій діляці. Див. #Адреси без споруд.

Назва вулиці

Частина адреси «назва вулиці» додається за допомогою теґа addr:street=* або addr:place=*. Значення цих теґів має збігатись зі значенням теґа name=* відповідної вулиці чи місця (мікрорайона, квартала, місцевості). Докладніше про назви вулиць #Визначення реквізиту адреси «назва вулиці».

Звʼязування будинків та вулиць за допомогою звʼязку assosiatedStreet

Окрім (чи замісць) додавання до обʼєктів частини адреси «назва вулиці» можна скористатись адресними звʼязками – Relation:associatedStreet. Не є помилкою застосування обох підходів разом. Адресний обʼєкт може містити частину адреси «назва вулиці» (addr:street=*) і одночасно входити до складу адресного звʼзку.

Назва зʼязку, значення теґу name=* звʼязку, має збігатись зі значенням теґу name=* самої вулиці. Членами звʼязку мають бути відрізки ліній, що позначають вулицю, з роллю street, та обʼєкти, що містять частину адреси «номер обʼєкта» – addr:housenumber=*, з роллю house.

Розширене теґування

Поштові індекси

Частина адреси «поштовий індекс» зазначається за допомогою теґу addr:postcode=*, він додається до точки чи (мульти)полігону, що позначає обʼєкт, що містить адресу. В значення теґу записується поштовий індекс державного оператора поштового зʼязку «Укрпошта». Застосування цього теґу не є обовʼязковим.

У випадку, коли всі обʼєкти вздовж вулиці мають однаковий поштовий індекс, його варто додавати до адресного звʼязку за допомогою теґу postal_code=*.

Також замісць додавання поштовошго індексу до кожної окремої адреси чи до адресного звʼязку, можна окреслити територію обслуговування поштового відділення (мульти)полігоном та позначити її як звʼязок boundary=postal_code. Докладніше – Tag:boundary=postal_code.

Якщо населений пункт обслуговується одним поштовим відділенням, до (мульти)полігону place=* цього НП додається теґ postal_code=індекс поштового відділення. До будинків і адресних звʼязків НП його додавати не варто.

Номер корпусу

Для об’єктів, які складаються з декількох корпусів для додавання цієї частини адреси використовується теґ addr:unit=*.

Комлекс будівель, що складається з копусів зі спільнім входом, вхід до якого здійсюється через центральний вхід

конутр комплексу (мультиполігон) містить спільні частини адреси

  • type = multipolygon

  • building = yes

  • addr:housenumber = 1

  • addr:street = вулиця Міська

    корпуси А, Б, В:

    • addr:unit = корпус А (Б, В - відповідно)
    • building:part = yes
    • name = Західний корпус (тут власна назва корпусу, не є частиною адреси, зазначається за наявності)

    центральний вхід до комплексу (вхід у корпусі Б)

    • entrance = main
Комплекс будівель, що складається з корпусів з власними входами

контур комплексу (мультиполігон, який складається з набору конутрів корпусів) містить спільні частини адреси

  • type = multipolygon

  • building = yes

  • addr:housenumber = 1

  • addr:street = вулиця Міська

    корпуси А, Б, В:

    • addr:unit = корпус В (А, Б - відповідно)
    • building:part = yes
    • name = Східний корпус (тут власна назва корпусу, не є частиною адреси, зазаначається за наявності)

    вхід (входи) до кожного з корпусів позначається теґом entrance = yes, докладніше див #Підʼїзди та входи.

Комплекс будівель, корпуси якого дотичні один до одного (мають спільні стині)

Дивіться #Комплекс будівель, що складається з корпусів з власними входами

Підʼїзди та входи

Багатоквартирні будинки, офісні комплекси й таке інше зазвичай мають кілька входів (підʼїздів), які ведуть до різних квартир, приміщень. Вони позначаються точками на контурі будівлі, які можуть мати наступні теґи:

  • entrance=* – загальний теґ для позначення входів
    entrance=staircase – вхід до під’їзду
    entrance=home – вхід до окремого помешкання (наприклад, у приватному будинку)

    Додатково можна позначити

    • ref=* – номер під’їзду

    • addr:flats=* – діапазон квартир, які знаходться за дверима

    • access=* – доступ до під’їзду, access=private – якщо є домофон, чи доступ є лише особи у якої є ключ.

      Елемент Опис Теґи
      node Третій під’їзд, у якому знаходяться квартири з 73 по 108 з домофоном entrance=staircase
      ref=3
      addr:flats=73-108
      access=private
      node Другий під’їзд, у якому знаходяться квартири з 41 по 43 і з 45 по 80 entrance=staircase
      ref=2
      addr:flats=41-43;45-80
      node Вхід тільки до четвертої квартири entrance=home
      addr:door=4

Позначення адрес окремих приміщень

За наявності докладно замапленого плану споруди (Див. Simple Indoor Tagging), до кожного окремого приміщення, квартири, паркомісця може бути додано частину адреси «номер окремої частини обʼєкта» (Див. #Визначення реквізиту адреси “номер окремої частини об’єкта” (квартири, приміщення, й т.і.)). Для додавання номерів квартир, приміщень вікористовується теґ addr:door=*.

Адреси без споруд

За відсутності споруди адреса може позначатись земельній діляці. Це такі випадки, коли споруду на діляці було знесено, або ще не збудовано. (Див. landuse=greenfield, landuse=brownfield). В такому випадку теґ addr:housenumber=* додається до контуру, яким позначено земельну ділянку.

Зважте також на додавання частини адреси «назва вулиці» addr:street=* (або addr:place=*).

Також розгляньте можливість додавання ділянки до адресного звʼязку з роллю house.

За неможливості визначити точні межі ділянки (наприклад, якість аерофотознімків занизька, або відсутня інформація про план забудови території), поставте точку десь в середині ділянки, ближче до її центру, та додайте до неї частину адреси «номер обʼєкта» та «назва вулиці», також додайте її до адресного звʼязку.

Якщо у вас є вибір позначити адресу на ділянці (території промислового підприємства, установи чи організації) чи на головній споруді на ній – краще надавати перевагу додаванню адреси саме на головну споруду. Не треба додавати (дублювати) адресу на інші обʼєкти на цій території, якщо вони не мають власної адреси.

Елемент Опис Теґи
area земельна ділянка без споруд (споруди знесено або залишились рештки) в приватному секторі межі якої можна визначити place=plot
landuse=brownfield
addr:housenumber=10
addr:street=вулиця Добрий Шлях
node межі земельної ділянки визачити неможливо addr:housenumber=18-А
addr:street=Лісова просіка

#Адреса будинку | #Назва вулиці | #Звʼязування будинків та вулиць за допомогою звʼязку assosiatedStreet.

Будівлі на розі, що мають адресу по обох вулицях

У випадках знаходження споруди на розі вулиць, вона може мати адресу як по одній, так і по іншій вулиці. Для додавання адрес можна скористатись одним зі способів:

  1. Перша адреса позначається як звичайно, на (мульти)полігоні будівлі, друга адреса додається до адресної точки в середині будівлі, бажано у тій частині будівлі, що знаходиться ближче до потрібної вулиці (Див. #Адреса будинку | #Назва вулиці).

    Яку адресу додавати до контуру споруди:

    • Найчастіше вживану адресу – на контур, усі інші – на точки;
    • Адресу по більш важливій вулиці – на контур, усі інші – на точки;
    • Адреси по всім взаємно паралельним вулицям – на контур, усі інші – на точки;
  2. Залишити контур будівлі без адреси, натомість додати адреси до відповідних адресніх точок в середині контуру будівлі, кожна точка має бути ближче до відповідної вулиці.

  3. Створити два звʼязки (мультиполігони), по одному для кожної адреси, де один контур будівлі буде членом обох звʼязків. Додати адресу до кожного звʼязку окремо (якщо ви вже знаєте як працювати зі звʼязками).

Під час мапінгу міста або іншого населеного пункту зважте на одноманітність обраного підходу. В майбутньому це полегшить внесення змін та підтримання даних в актуальному стані.

Також зважте на можлівість створення (оновлення) адресних звʼязків для доданих чи змінених адрес.

Див. #Звʼязування будинків та вулиць за допомогою звʼязку assosiatedStreet.

Адресація за мікрорайонами, кварталами та т.і.

У випадках, коли частина адреси «назва вулиці» не є лінійним обʼєктом (вулицею, проспектом й т.і), а натомість є назвою місцевості, замість теґа addr:street=* використовується теґ addr:place=*, до якого вноситься назва місцевості. Використання обох теґів одночасно важаєтся помилкою. Також назва місцевості зазначається в тезі name=* адресного звʼязку. В такому випадку до адресного звʼязку лінійній обʼєкт з теґом highway=* не додається через його відстуність.

Звʼязок Члени звʼязку
type=associatedStreet
name=житловий масив Покровській
name:uk=житловий масив Покровській
addr:housenumber=*
addr:place=житловий масив Покровській

Див. #Адреса будинку | #Назва вулиці | #Звʼязування будинків та вулиць за допомогою звʼязку assosiatedStreet

Вулиці з однаковими назвами у межах міста

Якщо у різних районах міста знаходяться вулиці з тотожними назвами, до адреси варто додавати теґ addr:suburb=* з назвою району, щоб уникнути двозначностей, коли частини адреси «номер обʼєкта» є повторюваними. Теґ addr:suburb=* варто додавати до адресного звʼязку замість його додавання кожному адресному обʼєкту. Крім цього варто окреслити межі районів, позначити їх place=suburb та додати їх назви, це допоможе сервісам геокодування розрізняти адреси в різних районах навіть за відсутності addr:suburb=*. Докладніше про позначення частин населених пуктів дививсь опис теґу place=*.

Звʼязок 1 Звʼязок 2
type=associatedStreet
name=Космонавтів вулиця
name:uk=Космонавтів вулиця
addr:suburb=Весняний район
type=associatedStreet
name=Космонавтів вулиця
name:uk=Космонавтів вулиця
addr:suburb=Лісовий район

Якщо вулиця починається в одному районі та закінчеється в іншому районі і нумерація обʼєктів вздовж неї є консистентною, такого робити не треба.

Будівлі за межами населеного пункту

Зазвичай прив’язування вулиць та адрес до населеного пункту відбувається за допомогою принципу геометричної вкладеності. Тобто, вулиця чи адреса відноситься до населеного пункту, коли знаходиться всередині його полігону place=*.

Обʼєкти, що знаходяться за межами населених пунктів, наприклад АЗС, отримують адресу по найближчому населеному пункту, у реквізиті адреси «назва вулиці» зазначається ділянка лінійного об’єкта між двома роздільними пунктами та значенням кілометражу об’єкта в межах відстані між роздільними пунктами та словом “кілометр” у відповідному відмінку

Приклад, адреса АЗС WOG на трасі Дніпро - Решетилівка, яка знаходиться за межами населеного пункту.

addr:city = Лобойківка
addr:street = дорога Дніпро-Царичанка-Кобиляки-Решетилівка, 43км,
або замість addr:street використовуємо addr:place, в залежності від конкретних випадків.

якщо є номер обʼєкта
addr:housenumber = 143 (тут номер вигаданий)

або може бути й назва
addr:housename = АЗС WOG

або, якщо, немає а ні номера, а ні назви обʼєкта – nohousenumber=yes.

Примітка, адресу можна дізнатись з чеку АЗС.


  1. Стаття 26³ “Адреса об’єкта нерухомого майна” Закону Про регулювання містобудівної діяльності. ↩︎

  2. Стаття 26⁴. Особливості присвоєння, коригування адреси після запровадження електронної системи щодо об’єктів, право на виконання будівельних робіт щодо яких отримано до запровадження такої системи Закону Про регулювання містобудівної діяльності. ↩︎

1 Like

@andygol, перечитав, суттєвих зауважень не маю. Гарна робота :+1:

UPD: Наскільки актуальна ця рекомендація?

Наприклад, є полігон житлової зони з landuse=residential, residential=rural по межі всього кварталу. Виходить що для окремої земельної ділянки без забудови треба додавати менший полігон з тими самими теґами + адресою. Може краще замість теґів landuse=residential, residential=rural записати place=plot?

addr:subdistrict де?

Слушне зауваження. Якось про place=plot я забув.

UPD. Вніс зміни

1 Like

Якщо будемо приводити назви вулиць до нових правил теґування, можуть стати в пригоді Великий електронний словник та Генеральний регіонально анотований корпус. Їх можна взяти як джерело для аналізу і розмітки слів у назвах вулиць.

Наприклад, можна взяти назви що складаються з двох слів і визначити чи є друге слово прикметником. Таким чином більшість простих варіантів [прикметник][іменник] можна буде відсіяти автоматично.

Ще варіант — розпізнати імена та прізвища щоб потім автоматично переставити їх у правильному порядку [імʼя][прізвище]:

Кирія Івана → Івана Кирія

Всі складні варіанти назв що залишиться після такого автоматичного опрацювання можна буде зібрати в ґуґл-таблицю і опрацювати вручну.

1 Like

Треба підготувати план робіт по переходу на нову схему зазначення адрес.

Визначитись в першу чергу з валідатором, який би підсвічував адреси що були додані не за запропонованою схемою. Можливо, для початку створити якийсь запит в Оверпас. Вже після цього можна буде думати про якісь автоматизовані варіанти виправлень, створення валідатора для JOSM тощо.

1 Like

Потрібно прописати формат запису назви дороги:

  • а/д / автодорога / дорога
  • пункти дороги розділяються “пробіл + тире + пробіл” (U+0020 + U+2013 + U+0020)
  • індекси доріг подаються між двома скісними рисками (U+002F): /М-01/

Ще було б непогано уточнити, чи скорочувати назву іншої дороги лише до індекса в назві дороги, на якій розташований об’єкт - в окремих областях в назвах місцевих доріг розписують назви інших доріг, які є проміжними пунктами, повністю; іноді це може відбуватись в 3 шари, якщо проміжна дорога також містить назву іншої дороги в назві.

Щодо стандартизації формату запису самих індексів (О ****** / О-****** / О****** / О-**-**-**) навіть не буду починати - цієї стандартизації наразі не існує.

UPD: ще було би непогано прописати рекомендацію додавати name:etymology:wikidata=*.

1 Like

Про дороги пропоную винести в окреме обговорення.

З того, що я зрозумів - задача приведення до нового формату легко ділиться на менші незалежні задачі

  1. Приведення addr:housenumber
    1.1. Заміна формату суфіксів-літер на формат “1-А”
    1.2. Заміна схеми позначень адрес з корпусами на нову з addr:unit. Тобто addr:housenumber=1 к1 треба замінити на addr:housenumber=1, addr:unit=корпус 1. (Тут було б добре ще додати приклади з малими і великими літерами)
  2. Приведення addr:street/place та назв вулиць, майданів, тощо до нової схеми

Як на мене привести addr:housenumber буде дуже просто. Стосовно другої частини, я поки що не знаю, як це швидко зробити. Тут є різні проблеми:

  • Ледяний вулиця нам треба привести до вулиця Ледяний, незважаючи на те, що Ледяний - прикметник. бо тут невідповідні роди для слів вулиця та Ледяний

Велику частину назв можна поправити за наступним алгоритмом. В українській мові прикметники закінчуються на “а” (“я”) - жіночий рід, “ий” (“ій”, “-й” - числова форма) - чоловічий, “е” (“є”) - середній. Тобто для вулиці, якщо хоч одне слово закінчуються не на “а” , “я”, то слово вулиця треба переносити в початок, бо це точно не прикметник. Те ж саме для проспекту, тільки тут закінчення “ий” , “ій”, бо проспект чоловічого роду. Можна ще спробувати скласти список основних імен в родовому відмінку і теж обернути для них слово вулиця наперед. А інші треба ще думати або розмітити вручну, якщо їх не дуже багато

Приклад: Гонти вулиця можна автоматично переносити слово вулиця наперед, бо слово Гонти закінчуються на “и”, тобто не є прикметником жіночого роду

Зараз, коли вільний час пишу маленьку програмку, яка буде автоматично/напівавтоматично робити таблицю замін, яку викладу в відкритий доступ, якщо ще буде потрібно. На базі неї можна вже робити пакетні заміни назв або якісь валідатори. Але не можу обіцяти, що це буде швидко, маю інші справи, то ж якщо хтось зможе зробити це швидше, то буде дуже добре

1 Like

@muchichka_s написати програму — це було б чудово! Тому що я, наприклад, маю дуже мало досвіду в програмуванні. Хотів би поділитися ще знахідкою. Є демонстраційний проєкт LanguageTool API NLP UK. За допомогою скрипта TagText.groovy можна теґувати слова. Нижче додам приклад що є на вході і на виході.

Вхідний файл (у кінці рядків крапки щоб скрипт розпізнавав окремі назви як речення):

1-й Болгарський провулок.
1-й Лісний тупик.
1-й Осінній проїзд.
1-й Пересипський узвіз.
1-й Нижньогиївський узвіз.
1-й провулок Вишневського.
1-й проїзд Автомобілістів.
1-й проїзд вулиці 8 Березня.
1-й проїзд Азовської вулиці.
1-й тупик Верхній Вал.
2-й тупик Лисенка.
1-й тупик Лубенської вулиці.
6-й тупик вулиці М. Г. Гоженко.
1-й тупик.
тупик 24-ї лінії.
1-ша вулиця Лесі Українки.
1-ша вулиця Слободка.
1-ша лінія Зарічного кварталу.
3-тя лінія Шкільного провулку.
5-та лінія Степового кварталу.
1-ша лінія Панський Шлях.
1-ша лінія А.
10-й квартал.
15-й мікрорайон.
10-та вулиця.
2-а Ізюмська вулиця.
1-ша Гайдамацька вулиця.
1-ша Госпітальна вулиця.
1-ша Очеретна вулиця.
2-га Головна алея.
2-й провулок Омеляна Грабця.
2-й проїзд.
2-й проїзд Академіка Вернадського.
24-та лінія.
3-й проїзд Юрія Левади.
2-й в'їзд Червона Алея.
3-тя Мар'янівська лінія.
5-й провулок Гніванського шосе.
7 км дороги Н-08.
автомобільна дорога М-06.
Айдарівська вулиця.
Берегова вулиця.
Очаківська вулиця.
П'ятихатна вулиця.
алея Зірок.
алея Слави.
алея Сміливості.
Аркадійська алея.
Бердичівський майдан.
Привокзальний майдан.
бульвар Кучеревського.
бульвар Рубіновий.
бульвар Слави.
Вітрильний провулок.
вулиця 8 Березня.
вулиця 93-ї Холодноярської Бригади.
вулиця Академіка Белелюбського.
вулиця Алана Шепарда.
вулиця Королеви Єлизавети ІІ.
вулиця Мальовнича Балка.
вулиця Набережна Заводська.
вулиця П'ятихатка.
вулиця А.
Гайдамацький провулок.
Гаражний тупик.
Донецьке шосе.
Європейська площа.
Європейський бульвар.
житловий масив Сокіл-1.
присілок Перехресне-1.
урочище Морданівка.
урочище Соколова Гора.
заїзд Станція Станишівка.
роз'їзд Станція Євгенівка.
роз’їзд 1241 км.
станція Світин.
станція Скригалівка.
станція Сорочий Брід.
Зенітний провулок.
Зоряний провулок.
Конотопський тупик.
лінія А.
лінія Б.
Лісова просіка.
Ломівський житловий масив.
Лоцманський узвіз.
майдан Незалежності.
майдан Франка.
Мануйлівський проспект.
набережна Перемоги.
Немирівське шосе.
Паркова алея.
Печерський узвіз.
Південна алея.
площа Академіка Стародубова.
площа Героїв Майдану.
площа Івана Богуна.
площа Ринок.
Покровський житловий масив.
Калинове урочище.
Казнівське урочище.
Юзикове урочище .
Полтавський шлях.
Прикордонний заїзд.
Майданівський роз’їзд.
Південнодонбаська станція.
провулок Братів Котенків.
провулок ім. Шевченка.
провулок Василя Шинковського.
провулок Генерала Григоренка.
провулок Добровольців.
провулок Желваківського.
провулок Здоров'я.
проїзд Володимира Даценка.
проїзд Данила Нечая.
просіка Лужки.
проспект Дмитра Яворницького.
проспект Івана Мазепи.
проспект Металургів.
проспект Свободи.
Січеславська набережна.
Дніпровська набережна.
Слобожанський проспект.
Соборна площа.
Староміський тупик.
Старомостова площа.
траса Київ-Житомир.
Тунельний проїзд.
тупик Будівельників.
тупик Тютюнника.
тупик Червона Балка.
тупик Інкубаторна Станція.
узвіз Гірськолижників.
узвіз Міцкевича.
Фруктова алея.
Хмельницьке шосе.
Шаховий проїзд.
Швидкісний проїзд.
Шкільний тупик.
шосе Воїнів УПА.
Ярмарковий узвіз.

Вихідний файл (був у форматі xml, я перетворив на json для більшої наочності):

{
  "text": {
    "sentence": [
      {
        "tokenReading": [
          {
            "token": [
              {
                "-value": "1-й",
                "-lemma": "1-й",
                "-tags": "adj:m:v_naz:&numr"
              },
              {
                "-value": "1-й",
                "-lemma": "1-й",
                "-tags": "adj:m:v_zna:rinanim:&numr"
              },
              {
                "-value": "1-й",
                "-lemma": "1-й",
                "-tags": "adj:f:v_dav:&numr"
              }
            ]
          },
          {
            "token": [
              {
                "-value": "Болгарський",
                "-lemma": "болгарський",
                "-tags": "adj:m:v_kly"
              },
              {
                "-value": "Болгарський",
                "-lemma": "болгарський",
                "-tags": "adj:m:v_naz"
              },
              {
                "-value": "Болгарський",
                "-lemma": "болгарський",
                "-tags": "adj:m:v_zna:rinanim"
              }
            ]
          },
          {
            "token": [
              {
                "-value": "провулок",
                "-lemma": "провулок",
                "-tags": "noun:inanim:m:v_naz"
              },
              {
                "-value": "провулок",
                "-lemma": "провулок",
                "-tags": "noun:inanim:m:v_zna"
              }
            ]
          },
          {
            "token": {
              "-value": ".",
              "-lemma": ".",
              "-tags": "punct",
              "-whitespaceBefore": "false"
            }
          }
        ]
      },
      {
        "tokenReading": [
          {
            "token": [
              {
                "-value": "1-й",
                "-lemma": "1-й",
                "-tags": "adj:m:v_naz:&numr"
              },
              {
                "-value": "1-й",
                "-lemma": "1-й",
                "-tags": "adj:m:v_zna:rinanim:&numr"
              },
              {
                "-value": "1-й",
                "-lemma": "1-й",
                "-tags": "adj:f:v_dav:&numr"
              }
            ]
          },
          {
            "token": [
              {
                "-value": "Лісний",
                "-lemma": "лісний",
                "-tags": "adj:m:v_kly"
              },
              {
                "-value": "Лісний",
                "-lemma": "лісний",
                "-tags": "adj:m:v_naz"
              },
              {
                "-value": "Лісний",
                "-lemma": "лісний",
                "-tags": "adj:m:v_zna:rinanim"
              }
            ]
          },
          {
            "token": [
              {
                "-value": "тупик",
                "-lemma": "тупик",
                "-tags": "noun:inanim:m:v_naz"
              },
              {
                "-value": "тупик",
                "-lemma": "тупик",
                "-tags": "noun:inanim:m:v_zna"
              }
            ]
          },
          {
            "token": {
              "-value": ".",
              "-lemma": ".",
              "-tags": "punct",
              "-whitespaceBefore": "false"
            }
          }
        ]
      },
      {
        "tokenReading": [
          {
            "token": [
              {
                "-value": "1-й",
                "-lemma": "1-й",
                "-tags": "adj:m:v_naz:&numr"
              },
              {
                "-value": "1-й",
                "-lemma": "1-й",
                "-tags": "adj:m:v_zna:rinanim:&numr"
              },
              {
                "-value": "1-й",
                "-lemma": "1-й",
                "-tags": "adj:f:v_dav:&numr"
              }
            ]
          },
          {
            "token": [
              {
                "-value": "Осінній",
                "-lemma": "осінній",
                "-tags": "adj:f:v_dav"
              },
              {
                "-value": "Осінній",
                "-lemma": "осінній",
                "-tags": "adj:m:v_kly"
              },
              {
                "-value": "Осінній",
                "-lemma": "осінній",
                "-tags": "adj:m:v_naz"
              },
              {
                "-value": "Осінній",
                "-lemma": "осінній",
                "-tags": "adj:m:v_zna:rinanim"
              }
            ]
          },
          {
            "token": [
              {
                "-value": "проїзд",
                "-lemma": "проїзд",
                "-tags": "noun:inanim:m:v_naz"
              },
              {
                "-value": "проїзд",
                "-lemma": "проїзд",
                "-tags": "noun:inanim:m:v_zna"
              }
            ]
          },
          {
            "token": {
              "-value": ".",
              "-lemma": ".",
              "-tags": "punct",
              "-whitespaceBefore": "false"
            }
          }
        ]
      },
      {
        "tokenReading": [
          {
            "token": [
              {
                "-value": "1-й",
                "-lemma": "1-й",
                "-tags": "adj:m:v_naz:&numr"
              },
              {
                "-value": "1-й",
                "-lemma": "1-й",
                "-tags": "adj:m:v_zna:rinanim:&numr"
              },
              {
                "-value": "1-й",
                "-lemma": "1-й",
                "-tags": "adj:f:v_dav:&numr"
              }
            ]
          },
          {
            "token": [
              {
                "-value": "Пересипський",
                "-lemma": "пересипський",
                "-tags": "adj:m:v_kly"
              },
              {
                "-value": "Пересипський",
                "-lemma": "пересипський",
                "-tags": "adj:m:v_naz"
              },
              {
                "-value": "Пересипський",
                "-lemma": "пересипський" ,
                "-tags": "adj:m:v_zna:rinanim"
              }
            ]
          },
          {
            "token": [
              {
                "-value": "узвіз",
                "-lemma": "узвіз",
                "-tags": "noun:inanim:m:v_naz"
              },
              {
                "-value": "узвіз",
                "-lemma": "узвіз",
                "-tags": "noun:inanim:m:v_zna"
              }
            ]
          },
          {
            "token": {
              "-value": ".",
              "-lemma": ".",
              "-tags": "punct",
              "-whitespaceBefore": "false"
            }
          }
        ]
      },
      {
        "tokenReading": [
          {
            "token": [
              {
                "-value": "1-й",
                "-lemma": "1-й",
                "-tags": "adj:m:v_naz:&numr"
              },
              {
                "-value": "1-й",
                "-lemma": "1-й",
                "-tags": "adj:m:v_zna:rinanim:&numr"
              },
              {
                "-value": "1-й",
                "-lemma": "1-й",
                "-tags": "adj:f:v_dav:&numr"
              }
            ]
          },
          {
            "token": {
              "-value": "Нижньогиївський",
              "-lemma": "",
              "-tags": "unknown"
            }
          },
          {
            "token": [
              {
                "-value": "узвіз",
                "-lemma": "узвіз",
                "-tags": "noun:inanim:m:v_naz"
              },
              {
                "-value": "узвіз",
                "-lemma": "узвіз",
                "-tags": "noun:inanim:m:v_zna"
              }
            ]
          },
          {
            "token": {
              "-value": ".",
              "-lemma": ".",
              "-tags": "punct",
              "-whitespaceBefore": "false"
            }
          }
        ]
      },
      {
        "tokenReading": [
          {
            "token": [
              {
                "-value": "1-й",
                "-lemma": "1-й",
                "-tags": "adj:m:v_naz:&numr"
              },
              {
                "-value": "1-й",
                "-lemma": "1-й",
                "-tags": "adj:m:v_zna:rinanim:&numr"
              },
              {
                "-value": "1-й",
                "-lemma": "1-й",
                "-tags": "adj:f:v_dav:&numr"
              }
            ]
          },
          {
            "token": [
              {
                "-value": "провулок",
                "-lemma": "провулок",
                "-tags": "noun:inanim:m:v_naz"
              },
              {
                "-value": "провулок",
                "-lemma": "провулок",
                "-tags": "noun:inanim:m:v_zna"
              }
            ]
          },
          {
            "token": [
              {
                "-value": "Вишневського",
                "-lemma": "Вишневський",
                "-tags": "noun:anim:m:v_rod:prop:lname"
              },
              {
                "-value": "Вишневського",
                "-lemma": "Вишневський",
                "-tags": "noun:anim:m:v_zna:prop:lname"
              }
            ]
          },
          {
            "token": {
              "-value": ".",
              "-lemma": ".",
              "-tags": "punct",
              "-whitespaceBefore": "false"
            }
          }
        ]
      },
      {
        "tokenReading": [
          {
            "token": [
              {
                "-value": "1-й",
                "-lemma": "1-й",
                "-tags": "adj:m:v_naz:&numr"
              },
              {
                "-value": "1-й",
                "-lemma": "1-й",
                "-tags": "adj:m:v_zna:rinanim:&numr"
              },
              {
                "-value": "1-й",
                "-lemma": "1-й",
                "-tags": "adj:f:v_dav:&numr"
              }
            ]
          },
          {
            "token": [
              {
                "-value": "проїзд",
                "-lemma": "проїзд",
                "-tags": "noun:inanim:m:v_naz"
              },
              {
                "-value": "проїзд",
                "-lemma": "проїзд",
                "-tags": "noun:inanim:m:v_zna"
              }
            ]
          },
          {
            "token": [
              {
                "-value": "Автомобілістів",
                "-lemma": "автомобіліст",
                "-tags": "noun:anim:p:v_rod"
              },
              {
                "-value": "Автомобілістів",
                "-lemma": "автомобіліст",
                "-tags": "noun:anim:p:v_zna"
              }
            ]
          },
          {
            "token": {
              "-value": ".",
              "-lemma": ".",
              "-tags": "punct",
              "-whitespaceBefore": "false"
            }
          }
        ]
      },
      {
        "tokenReading": [
          {
            "token": [
              {
                "-value": "1-й",
                "-lemma": "1-й",
                "-tags": "adj:m:v_naz:&numr"
              },
              {
                "-value": "1-й",
                "-lemma": "1-й",
                "-tags": "adj:m:v_zna:rinanim:&numr"
              },
              {
                "-value": "1-й",
                "-lemma": "1-й",
                "-tags": "adj:f:v_dav:&numr"
              }
            ]
          },
          {
            "token": [
              {
                "-value": "проїзд",
                "-lemma": "проїзд",
                "-tags": "noun:inanim:m:v_naz"
              },
              {
                "-value": "проїзд",
                "-lemma": "проїзд",
                "-tags": "noun:inanim:m:v_zna"
              }
            ]
          },
          {
            "token": [
              {
                "-value": "вулиці",
                "-lemma": "вулиця",
                "-tags": "noun:inanim:f:v_dav"
              },
              {
                "-value": "вулиці",
                "-lemma": "вулиця",
                "-tags": "noun:inanim:f:v_rod"
              },
              {
                "-value": "вулиці",
                "-lemma": "вулиця",
                "-tags": "noun:inanim:p:v_naz"
              },
              {
                "-value": "вулиці",
                "-lemma": "вулиця",
                "-tags": "noun:inanim:p:v_zna"
              }
            ]
          },
          {
            "token": {
              "-value": "8",
              "-lemma": "8",
              "-tags": "number"
            }
          },
          {
            "token": {
              "-value": "Березня",
              "-lemma": "березень",
              "-tags": "noun:inanim:m:v_rod"
            }
          },
          {
            "token": {
              "-value": ".",
              "-lemma": ".",
              "-tags": "punct",
              "-whitespaceBefore": "false"
            }
          }
        ]
      },
      {
        "tokenReading": [
          {
            "token": [
              {
                "-value": "1-й",
                "-lemma": "1-й",
                "-tags": "adj:m:v_naz:&numr"
              },
              {
                "-value": "1-й",
                "-lemma": "1-й",
                "-tags": "adj:m:v_zna:rinanim:&numr"
              },
              {
                "-value": "1-й",
                "-lemma": "1-й",
                "-tags": "adj:f:v_dav:&numr"
              }
            ]
          },
          {
            "token": [
              {
                "-value": "проїзд",
                "-lemma": "проїзд",
                "-tags": "noun:inanim:m:v_naz"
              },
              {
                "-value": "проїзд",
                "-lemma": "проїзд",
                "-tags": "noun:inanim:m:v_zna"
              }
            ]
          },
          {
            "token": {
              "-value": "Азовської",
              "-lemma": "азовський",
              "-tags": "adj:f:v_rod"
            }
          },
          {
            "token": [
              {
                "-value": "вулиці",
                "-lemma": "вулиця",
                "-tags": "noun:inanim:f:v_dav"
              },
              {
                "-value": "вулиці",
                "-lemma": "вулиця",
                "-tags": "noun:inanim:f:v_rod"
              },
              {
                "-value": "вулиці",
                "-lemma": "вулиця",
                "-tags": "noun:inanim:p:v_naz"
              },
              {
                "-value": "вулиці",
                "-lemma": "вулиця",
                "-tags": "noun:inanim:p:v_zna"
              }
            ]
          },
          {
            "token": {
              "-value": ".",
              "-lemma": ".",
              "-tags": "punct",
              "-whitespaceBefore": "false"
            }
          }
        ]
      },
      {
        "tokenReading": [
          {
            "token": [
              {
                "-value": "1-й",
                "-lemma": "1-й",
                "-tags": "adj:m:v_naz:&numr"
              },
              {
                "-value": "1-й",
                "-lemma": "1-й",
                "-tags": "adj:m:v_zna:rinanim:&numr"
              },
              {
                "-value": "1-й",
                "-lemma": "1-й",
                "-tags": "adj:f:v_dav:&numr"
              }
            ]
          },
          {
            "token": [
              {
                "-value": "тупик",
                "-lemma": "тупик",
                "-tags": "noun:inanim:m:v_naz"
              },
              {
                "-value": "тупик",
                "-lemma": "тупик",
                "-tags": "noun:inanim:m:v_zna"
              }
            ]
          },
          {
            "token": [
              {
                "-value": "Верхній",
                "-lemma": "Верхній",
                "-tags": "noun:inanim:m:v_kly:prop:geo"
              },
              {
                "-value": "Верхній",
                "-lemma": "Верхній",
                "-tags": "noun:inanim:m:v_naz:prop:geo"
              },
              {
                "-value": "Верхній",
                "-lemma": "Верхній",
                "-tags": "noun:inanim:m:v_zna:prop:geo"
              },
              {
                "-value": "Верхній",
                "-lemma": "верхній",
                "-tags": "adj:f:v_dav"
              },
              {
                "-value": "Верхній",
                "-lemma": "верхній",
                "-tags": "adj:m:v_kly"
              },
              {
                "-value": "Верхній",
                "-lemma": "верхній",
                "-tags": "adj:m:v_naz"
              },
              {
                "-value": "Верхній",
                "-lemma": "верхній",
                "-tags": "adj:m:v_zna:rinanim"
              }
            ]
          },
          {
            "token": [
              {
                "-value": "Вал",
                "-lemma": "вал",
                "-tags": "noun:inanim:m:v_naz:xp1"
              },
              {
                "-value": "Вал",
                "-lemma": "вал",
                "-tags": "noun:inanim:m:v_naz:xp2"
              },
              {
                "-value": "Вал",
                "-lemma": "вал",
                "-tags": "noun:inanim:m:v_zna:xp1"
              },
              {
                "-value": "Вал",
                "-lemma": "вал",
                "-tags": "noun:inanim:m:v_zna:xp2"
              }
            ]
          },
          {
            "token": {
              "-value": ".",
              "-lemma": ".",
              "-tags": "punct",
              "-whitespaceBefore": "false"
            }
          }
        ]
      },
      {
        "tokenReading": [
          {
            "token": [
              {
                "-value": "2-й",
                "-lemma": "2-й",
                "-tags": "adj:m:v_naz:&numr"
              },
              {
                "-value": "2-й",
                "-lemma": "2-й",
                "-tags": "adj:m:v_zna:rinanim:&numr"
              },
              {
                "-value": "2-й",
                "-lemma": "2-й",
                "-tags": "adj:f:v_dav:&numr"
              }
            ]
          },
          {
            "token": [
              {
                "-value": "тупик",
                "-lemma": "тупик",
                "-tags": "noun:inanim:m:v_naz"
              },
              {
                "-value": "тупик",
                "-lemma": "тупик",
                "-tags": "noun:inanim:m:v_zna"
              }
            ]
          },
          {
            "token": [
              {
                "-value": "Лисенка",
                "-lemma": "Лисенко",
                "-tags": "noun:anim:m:v_rod:prop:lname"
              },
              {
                "-value": "Лисенка",
                "-lemma": "Лисенко",
                "-tags": "noun:anim:m:v_zna:prop:lname"
              }
            ]
          },
          {
            "token": {
              "-value": ".",
              "-lemma": ".",
              "-tags": "punct",
              "-whitespaceBefore": "false"
            }
          }
        ]
      },
      {
        "tokenReading": [
          {
            "token": [
              {
                "-value": "1-й",
                "-lemma": "1-й",
                "-tags": "adj:m:v_naz:&numr"
              },
              {
                "-value": "1-й",
                "-lemma": "1-й",
                "-tags": "adj:m:v_zna:rinanim:&numr"
              },
              {
                "-value": "1-й",
                "-lemma": "1-й",
                "-tags": "adj:f:v_dav:&numr"
              }
            ]
          },
          {
            "token": [
              {
                "-value": "тупик",
                "-lemma": "тупик",
                "-tags": "noun:inanim:m:v_naz"
              },
              {
                "-value": "тупик",
                "-lemma": "тупик",
                "-tags": "noun:inanim:m:v_zna"
              }
            ]
          },
          {
            "token": [
              {
                "-value": "Лубенської",
                "-lemma": "Лубенська",
                "-tags": "noun:anim:f:v_rod:prop:lname"
              },
              {
                "-value": "Лубенської",
                "-lemma": "лубенський",
                "-tags": "adj:f:v_rod"
              }
            ]
          },
          {
            "token": [
              {
                "-value": "вулиці",
                "-lemma": "вулиця",
                "-tags": "noun:inanim:f:v_dav"
              },
              {
                "-value": "вулиці",
                "-lemma": "вулиця",
                "-tags": "noun:inanim:f:v_rod"
              },
              {
                "-value": "вулиці",
                "-lemma": "вулиця",
                "-tags": "noun:inanim:p:v_naz"
              },
              {
                "-value": "вулиці",
                "-lemma": "вулиця",
                "-tags": "noun:inanim:p:v_zna"
              }
            ]
          },
          {
            "token": {
              "-value": ".",
              "-lemma": ".",
              "-tags": "punct",
              "-whitespaceBefore": "false"
            }
          }
        ]
      },
      {
        "tokenReading": [
          {
            "token": [
              {
                "-value": "6-й",
                "-lemma": "6-й",
                "-tags": "adj:m:v_naz:&numr"
              },
              {
                "-value": "6-й",
                "-lemma": "6-й",
                "-tags": "adj:m:v_zna:rinanim:&numr"
              },
              {
                "-value": "6-й",
                "-lemma": "6-й",
                "-tags": "adj:f:v_dav:&numr"
              }
            ]
          },
          {
            "token": [
              {
                "-value": "тупик",
                "-lemma": "тупик",
                "-tags": "noun:inanim:m:v_naz"
              },
              {
                "-value": "тупик",
                "-lemma": "тупик",
                "-tags": "noun:inanim:m:v_zna"
              }
            ]
          },
          {
            "token": [
              {
                "-value": "вулиці",
                "-lemma": "вулиця",
                "-tags": "noun:inanim:f:v_dav"
              },
              {
                "-value": "вулиці",
                "-lemma": "вулиця",
                "-tags": "noun:inanim:f:v_rod"
              },
              {
                "-value": "вулиці",
                "-lemma": "вулиця",
                "-tags": "noun:inanim:p:v_naz"
              },
              {
                "-value": "вулиці",
                "-lemma": "вулиця",
                "-tags": "noun:inanim:p:v_zna"
              }
            ]
          },
          {
            "token": {
              "-value": "М.",
              "-lemma": "",
              "-tags": "noninf:abbr"
            }
          },
          {
            "token": {
              "-value": "Г.",
              "-lemma": "",
              "-tags": "noninf:abbr"
            }
          },
          {
            "token": {
              "-value": "Гоженко",
              "-lemma": "",
              "-tags": "unknown"
            }
          },
          {
            "token": {
              "-value": ".",
              "-lemma": ".",
              "-tags": "punct",
              "-whitespaceBefore": "false"
            }
          }
        ]
      },
      {
        "tokenReading": [
          {
            "token": [
              {
                "-value": "1-й",
                "-lemma": "1-й",
                "-tags": "adj:m:v_naz:&numr"
              },
              {
                "-value": "1-й",
                "-lemma": "1-й",
                "-tags": "adj:m:v_zna:rinanim:&numr"
              },
              {
                "-value": "1-й",
                "-lemma": "1-й",
                "-tags": "adj:f:v_dav:&numr"
              }
            ]
          },
          {
            "token": [
              {
                "-value": "тупик",
                "-lemma": "тупик",
                "-tags": "noun:inanim:m:v_naz"
              },
              {
                "-value": "тупик",
                "-lemma": "тупик",
                "-tags": "noun:inanim:m:v_zna"
              }
            ]
          },
          {
            "token": {
              "-value": ".",
              "-lemma": ".",
              "-tags": "punct",
              "-whitespaceBefore": "false"
            }
          },
          {
            "token": [
              {
                "-value": "тупик",
                "-lemma": "тупик",
                "-tags": "noun:inanim:m:v_naz"
              },
              {
                "-value": "тупик",
                "-lemma": "тупик",
                "-tags": "noun:inanim:m:v_zna"
              }
            ]
          },
          {
            "token": {
              "-value": "24-ї",
              "-lemma": "24-й",
              "-tags": "adj:f:v_rod:&numr"
            }
          },
          {
            "token": [
              {
                "-value": "лінії",
                "-lemma": "лінія",
                "-tags": "noun:inanim:f:v_dav"
              },
              {
                "-value": "лінії",
                "-lemma": "лінія",
                "-tags": "noun:inanim:f:v_rod"
              },
              {
                "-value": "лінії",
                "-lemma": "лінія",
                "-tags": "noun:inanim:p:v_naz"
              },
              {
                "-value": "лінії",
                "-lemma": "лінія",
                "-tags": "noun:inanim:p:v_zna"
              }
            ]
          },
          {
            "token": {
              "-value": ".",
              "-lemma": ".",
              "-tags": "punct",
              "-whitespaceBefore": "false"
            }
          }
        ]
      },
      {
        "tokenReading": [
          {
            "token": {
              "-value": "1-ша",
              "-lemma": "1-й",
              "-tags": "adj:f:v_naz:&numr"
            }
          },
          {
            "token": {
              "-value": "вулиця",
              "-lemma": "вулиця",
              "-tags": "noun:inanim:f:v_naz"
            }
          },
          {
            "token": [
              {
                "-value": "Лесі",
                "-lemma": "Леся",
                "-tags": "noun:anim:f:v_dav:prop:fname"
              },
              {
                "-value": "Лесі",
                "-lemma": "Леся",
                "-tags": "noun:anim:f:v_rod:prop:fname"
              }
            ]
          },
          {
            "token": [
              {
                "-value": "Українки",
                "-lemma": "Українка",
                "-tags": "noun:anim:f:v_rod:prop:lname"
              },
              {
                "-value": "Українки",
                "-lemma": "Українка",
                "-tags": "noun:inanim:f:v_rod:prop:geo"
              }
            ]
          },
          {
            "token": {
              "-value": ".",
              "-lemma": ".",
              "-tags": "punct",
              "-whitespaceBefore": "false"
            }
          }
        ]
      },
      {
        "tokenReading": [
          {
            "token": {
              "-value": "1-ша",
              "-lemma": "1-й",
              "-tags": "adj:f:v_naz:&numr"
            }
          },
          {
            "token": {
              "-value": "вулиця",
              "-lemma": "вулиця",
              "-tags": "noun:inanim:f:v_naz"
            }
          },
          {
            "token": {
              "-value": "Слободка",
              "-lemma": "",
              "-tags": "unknown"
            }
          },
          {
            "token": {
              "-value": ".",
              "-lemma": ".",
              "-tags": "punct",
              "-whitespaceBefore": "false"
            }
          }
        ]
      },

...

Моя ідея в тому щоб спиратися на кілька теґів одночасно. Зазвичай у схемі [прикметник][родове позначення] перше слово — прикметник adj в називному відмінку v_naz, чоловічого m або жіночого роду f, друге слово — іменник noun теж в називному відмінку v_naz, чоловічого m або жіночого роду f. У більшості таких назв рід прикметника й іменника збігаються, жіночий + жіночий, чоловічий + чоловічий: Зелена вулиця, Польовий провулок. Якщо для назв що складаються з двох слів вдастся протеґувати обидва слова, і теґи збігатимуться зі схемою, можна буде коректно обʼєднати назву й родове позначення з мінімальною кількістю помилок.

У випадках імен, прізвищ, по батькові вулиця Шевченка, вулиця Лесі Українки, родове позначення буде теж у називному відмінку, але слова з власної назви матимуть вже родовий відмінок.

Ще буде багато випадків коли слова і в родовому позначенні й у власній назві матимуть один відмінок — називний: вулиця Зелений Вал, площа Ринок, урочище Морданівка.

Скрипт визначає багато інших теґів, зокрема порядкові числівники: &numr, імена fname, по-батькові pname та прізвища lname що для нас буде дуже корисно.

Файл з повним словником ВЕСУМ: https://github.com/brown-uk/dict_uk/releases/download/v5.8.0/dict_corp_vis.txt.bz2

2 Likes

Дуже дякую за роз’яснення, як користуватися скриптом, це набагато спростить роботу

1 Like