Напівавтоматичне приведення назв вулиць до стандарту «Uk:Адреси»

Важливе зауваження, дякую! Не опрацьовувалися звʼязки з теґами addr:street та addr:place. Обовʼязково врахую для нових змін і перевірю вже опрацьовані області.

@muchichka_s, виправив алгоритм і пройшовся по попередніх областях, дякую за уважність.

Назви, які планую перейменувати у Хмельницькій області: https://mellangr.github.io/assets/rename/khmelnytska_oblast_renaming.txt, та список назв, які не будуть змінюватися: https://mellangr.github.io/assets/rename/khmelnytska_oblast_unchanged.txt

UPD: Перейменування у Хмельницькій області завершене

1 Like

Назви, які планую перейменувати у Житомирській області: https://mellangr.github.io/assets/rename/zhytomyrska_oblast_renaming.txt, та список назв, які не будуть змінюватися: https://mellangr.github.io/assets/rename/zhytomyrska_oblast_unchanged.txt

1 Like

Було б добре додати конверсію Ігора => Ігоря. Така перевірка відсутня.

Дякую за ідею, подивлюся

@darkonus схоже бот пропустив чималу кількість addr:street в Хмельницькій області
Приклад: Way: 130632626 | OpenStreetMap
Ось тут зручно дивитися візуальну статистику (так і знайшов, що бот пропустив) Nominatim QA Tool

Перепрошую, останній раз трохи переписав скрипт і забув включити addr:street та addr:place. Поки зроблю паузу в перейменуваннях і виправлю свої можливі помилки. Також додам оновлений код скрипта на вікі, тому що там зараз трохи застаріла версія.

Доперейменував пропущені addr:street у Хмельницькій області. Оновив код скрипта і опис роботи на вікі, дублюю тут:

Changing the order of words in some street names. Objects that will be selected for possible renaming:

Nodes, ways and relations with addr:street=*, addr:place=*
Ways highway=* with values motorway, trunk, primary, secondary, tertiary, unclassified, residential, motorway_link, trunk_link, primary_link, secondary_link, tertiary_link, living_street, service, pedestrian, track, bus_guideway, escape, raceway, road, busway, footway, bridleway, steps, corridor, path, cycleway, proposed, construction tagged with name:left:uk=*, name:left=*, name:right:uk=*, name:right=*, name:uk=*, name=*, old_name:left:uk=*, old_name:left=*, old_name:right:uk=*, old_name:right=*, old_name:uk=*, old_name=*, official_name:left:uk=*, official_name:left=*, official_name:right:uk=*, official_name:right=*, official_name:uk=*, official_name=*, loc_name:left:uk=*, loc_name:left=*, loc_name:right:uk=*, loc_name:right=*, loc_name:uk=*, loc_name=*, short_name:left:uk=*, short_name:left=*, short_name:right:uk=*, short_name:right=*, short_name:uk=*, short_name=*
Relations type=associatedStreet with name:left:uk=*, name:left=*, name:right:uk=*, name:right=*, name:uk=*, name=*, old_name:left:uk=*, old_name:left=*, old_name:right:uk=*, old_name:right=*, old_name:uk=*, old_name=*, official_name:left:uk=*, official_name:left=*, official_name:right:uk=*, official_name:right=*, official_name:uk=*, official_name=*, loc_name:left:uk=*, loc_name:left=*, loc_name:right:uk=*, loc_name:right=*, loc_name:uk=*, loc_name=*, short_name:left:uk=*, short_name:left=*, short_name:right:uk=*, short_name:right=*, short_name:uk=*, short_name=*
Tags whose values will be changed if a match is found:

addr:street=*, addr:place=*, name=*, name:left:uk=*, name:left=*, name:right:uk=*, name:right=*, name:uk=*, name=*, old_name:left:uk=*, old_name:left=*, old_name:right:uk=*, old_name:right=*, old_name:uk=*, old_name=*, official_name:left:uk=*, official_name:left=*, official_name:right:uk=*, official_name:right=*, official_name:uk=*, official_name=*, loc_name:left:uk=*, loc_name:left=*, loc_name:right:uk=*, loc_name:right=*, loc_name:uk=*, loc_name=*, short_name:left:uk=*, short_name:left=*, short_name:right:uk=*, short_name:right=*, short_name:uk=*, short_name=*
from osm_bot_abstraction_layer.generic_bot_retagging import run_simple_retagging_task

# Function to load renaming data from a file
def load_renaming_data(file_name):
    renaming_dict = {}

    # Read the file line by line
    with open(file_name, 'r', encoding='utf-8') as file:
        for line in file:
            # Split each line into original_name and new_name
            original_name, new_name = line.strip().split('\t')
            # Add the names to the renaming_dict
            renaming_dict[original_name] = new_name

    return renaming_dict

# Function to edit tags based on loaded renaming data
def edit_element(tags, renaming_data):
    # List of keys to edit
    keys_to_edit = [
        # Add all the keys you want to edit here
        "addr:place", 
        "addr:street", 
        "loc_name:left:uk", 
        "loc_name:left", 
        "loc_name:right:uk", 
        "loc_name:right", 
        "loc_name:uk", 
        "loc_name", 
        "name:left:uk", 
        "name:left", 
        "name:right:uk", 
        "name:right", 
        "name:uk", 
        "name", 
        "official_name:left:uk", 
        "official_name:left", 
        "official_name:right:uk", 
        "official_name:right", 
        "official_name:uk", 
        "official_name", 
        "old_name:left:uk", 
        "old_name:left", 
        "old_name:right:uk", 
        "old_name:right", 
        "old_name:uk", 
        "old_name", 
        "short_name:left:uk", 
        "short_name:left", 
        "short_name:right:uk", 
        "short_name:right", 
        "short_name:uk", 
        "short_name" 
    ]

    # Iterate over the keys to edit
    for key in keys_to_edit:
        # If the key exists in tags and its value is in renaming_data, update the value
        if key in tags and tags[key] in renaming_data:
            tags[key] = renaming_data[tags[key]]

    return tags

def main():
    # Prompt for region name
    region_name = input("Введіть назву області: ")
    region_name_eng = input("Введіть назву області англійською: ")
    # File name for renaming data
    renaming_file = f"{region_name} (перейменування).txt"
    # Load renaming data from the file
    renaming_data = load_renaming_data(renaming_file)

    # Run the simple retagging task
    run_simple_retagging_task(
        max_count_of_elements_in_one_changeset=500,
        # Set up the Overpass query to get the data
        objects_to_consider_query=f"""
[out:xml][timeout:1000];
area["name"="{region_name}"]->.a;
(
  nwr(area.a)[~"^(addr:street|addr:place)$"~"."];
  way(area.a)["highway"~"^(motorway|trunk|primary|secondary|tertiary|unclassified|residential|motorway_link|trunk_link|primary_link|secondary_link|tertiary_link|living_street|service|pedestrian|track|bus_guideway|escape|raceway|road|busway|footway|bridleway|steps|corridor|path|cycleway|proposed|construction)$"][~"^(name:left:uk|name:left|name:right:uk|name:right|name:uk|name|old_name:left:uk|old_name:left|old_name:right:uk|old_name:right|old_name:uk|old_name|official_name:left:uk|official_name:left|official_name:right:uk|official_name:right|official_name:uk|official_name|loc_name:left:uk|loc_name:left|loc_name:right:uk|loc_name:right|loc_name:uk|loc_name|short_name:left:uk|short_name:left|short_name:right:uk|short_name:right|short_name:uk|short_name)$"~"."];
  rel(area.a)[type=associatedStreet][~"^(name:left:uk|name:left|name:right:uk|name:right|name:uk|name|old_name:left:uk|old_name:left|old_name:right:uk|old_name:right|old_name:uk|old_name|official_name:left:uk|official_name:left|official_name:right:uk|official_name:right|official_name:uk|official_name|loc_name:left:uk|loc_name:left|loc_name:right:uk|loc_name:right|loc_name:uk|loc_name|short_name:left:uk|short_name:left|short_name:right:uk|short_name:right|short_name:uk|short_name)$"~"."];
);
out body;
>;
out skel qt;
""",
        cache_folder_filepath='/Users/user/test',
        is_in_manual_mode=False,
        changeset_comment=f'Renaming of streets in {region_name_eng} according to new recommendations of the Ukrainian community',
        discussion_url='https://community.openstreetmap.org/t/topic/97007',
        osm_wiki_documentation_page='https://wiki.openstreetmap.org/wiki/Automated_edits/darkonus_-_bot_account/Renaming_of_streets_in_Ukraine_according_to_new_recommendations_of_the_Ukrainian_community',
        # Pass the edit_element function as an argument, and pass renaming_data through a lambda function
        edit_element_function=lambda tags: edit_element(tags, renaming_data),
    )

main()

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

UPD: Перейменування у Житомирській області завершене.

Назви, які планую перейменувати у Вінницькій області: https://mellangr.github.io/assets/rename/vinnytska_oblast_renaming.txt, та список назв, які не будуть змінюватися: https://mellangr.github.io/assets/rename/vinnytska_oblast_unchanged.txt
UPD: Перейменування у Вінницькій області завершене

1 Like

Привіт усім! Продовжую перейменування — ось назви вулиць, які планую перейменувати у Київській області: https://mellangr.github.io/assets/rename/kyivska_oblast_renaming.txt, та список назв, які не будуть змінюватися: https://mellangr.github.io/assets/rename/kyivska_oblast_unchanged.txt

UPD: Перейменування завершене

1 Like

Недавно getpin додали чимало нових POI з тегом contact:street, подивився по overpass, є значення в старому форматі. До прикладу: Node: ‪Аптека Подорожник‬ (‪10917668905‬) | OpenStreetMap

Стосовно списку Київської області, подивився, виглядає гарно

1 Like

@darkonus схоже на “Левадний провулок”, “Журавлиний провулок”, “Вербний провулок” помилково спрацювало

Вчора дивився, але не помітив одразу

Дякую, виправлю.
UPD: Виправив. Також надалі враховуватиму теґ contact:street

1 Like

Назви вулиць, які планую перейменувати у Черкаській області: https://mellangr.github.io/assets/rename/cherkaska_oblast_renaming.txt, та список назв, які не будуть змінюватися: https://mellangr.github.io/assets/rename/cherkaska_oblast_unchanged.txt

UPD: Перейменування завершене

1 Like

Назви вулиць, які планую перейменувати у Кіровоградській області: https://mellangr.github.io/assets/rename/kirovohradska_oblast_renaming.txt, та список назв, які не будуть змінюватися: https://mellangr.github.io/assets/rename/kirovohradska_oblast_unchanged.txt

UPD: Перейменування у Кіровоградській область завершене

1 Like

Назви вулиць, які планую перейменувати у Києві: https://mellangr.github.io/assets/rename/kyiv_renaming.txt, та список назв, які не будуть змінюватися: https://mellangr.github.io/assets/rename/kyiv_unchanged.txt

Додав ще файл де відсіяв назви для ручної перевірки в JOSM: https://mellangr.github.io/assets/rename/kyiv_special_attention.html

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

UPD: Перейменування вулиць у Києві завершене

1 Like

Назви вулиць, які планую перейменувати у Полтавській області: https://mellangr.github.io/assets/rename/poltavska_oblast_renaming.txt, та список назв, які не будуть змінюватися: https://mellangr.github.io/assets/rename/poltavska_oblast_unchanged.txt

UPD: Перейменування у Полтавській області завершене

1 Like

Було б добре в одному стилі, якщо вийде:

1-й Тупик провулок                                                 	провулок 1-й Тупик
3-й Тупик провулок                                                 	провулок 3-й Тупик
2-й Тупик провулок                                                 	2-й провулок Тупик

Дякую, виправив у себе в списку

1 Like

Назви вулиць, які планую перейменувати у Чернігівській області: https://mellangr.github.io/assets/rename/chernihivska_oblast_renaming.txt, та список назв, які не будуть змінюватися: https://mellangr.github.io/assets/rename/chernihivska_oblast_unchanged.txt

UPD: перейменування вулиць у Чернігівській області завершене

2 Likes