AudionAudion

Технический справочник

REFERENCE_RU.md

Технический справочник

English · Руководство · ОКТМО

Содержание

Устройство разбора адреса, слоты, проходы сопоставления, файлы настроек и артефакты прогонов.


Разбор адреса

Сырая строка адреса раскладывается на составляющие. Порядок разбора важен: сперва отсекается хвост с номером дома, затем определяется тип и имя улицы или территории, затем населённый пункт и вышестоящая административная единица.

Что распознаётся

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

Типы территорий. тер., территория, СНТ, ДНТ, ТСН.

Типы населённых пунктов. город, посёлок, деревня, село, слобода, станица, станция, хутор, улус, местечко, кишлак, аул, аал, арбан, починок, выселок, заимка, кордон, маяк, погост, слободка, усадьба, лесоучасток, метеостанция, разъезд. Отдельно разбираются железнодорожные формы: п. ж/д ст., ж/д остановочный пункт, ж/д блокпост, ж/д будка, ж/д ветка, ж/д казарма, ж/д платформа, ж/д площадка, ж/д путевой пост, рзд.. Компактные формы гп, рп, кп, дп, пгт, нп понимаются с точками и без.

Номер дома. Хвост строки разбирается на базу и модификаторы: 10, 10а, 10/2, 10к2, 10 корп. 2, 10 стр. 1, 10 литера А. База — число, модификаторы — всё остальное, приведённое к одному виду.

Ключевое правило номера дома

Модификаторы дома нельзя схлопывать с чистым номером. 10к2 не забирает 10, и 10 не забирает 10к2 — ни на строгом проходе, ни на мягком. Мягкость проходов касается написания улицы, а не корпусов и литер.


Слоты

Слот — это одна именованная составляющая адреса. Из включённых слотов собирается адресная строка; в разложенном виде каждый слот становится колонкой.

Слоты адресной строки

СлотКолонкаКороткаяЧто это
postal_indexPostal_IndexIndexПочтовый индекс
federal_districtFederal_DistrictFed_DistrictФедеральный округ
parent_subjectParent_SubjectParentВышестоящий субъект
subjectSubjectSubjectСубъект федерации
autonomous_okrugAutonomous_OkrugAOАвтономный округ
municipalityMunicipalityMunicipalityМуниципальное образование
localityLocalityLocalityНаселённый пункт
territoryTerritoryTerritoryТерритория, СНТ и подобное
microdistrictMicrodistrictMkr_QtrМикрорайон, квартал
streetStreetStreetУлица
houseHouseHouseДом целиком
premisePremisePremiseПомещение, квартира

Технические слоты

СлотКолонкаКороткаяЧто это
oktmo_codeOKTMO_CodeOKTMOКод ОКТМО
oktmo_nameOKTMO_NameOKTMO_NameНаименование по ОКТМО
house_baseHouse_BaseHouse_NoНомер дома без модификаторов
house_modsHouse_ModsHouse_ModsМодификаторы в приведённом виде
house_modifiersHouse_ModifiersHouse_PartsМодификаторы списком
street_numbersStreet_NumbersStreet_NumsЧисла в названии улицы
territory_keyTerritory_KeyTerritory_KeyКлюч территории
match_keyMatch_KeyMatch_KeyКлюч сопоставления

Умолчания

Порядок сборки адресной строки по умолчанию — порядок слотов адресной строки из таблицы выше, сверху вниз.

Включены по умолчанию все слоты, кроме microdistrict: микрорайон и квартал в российских адресах чаще дублируют улицу, чем дополняют её. Колонка микрорайона при этом остаётся — из строки исключается только значение.

Заголовки слот-колонок пишутся в полном или коротком виде, это выбирается на экране обработки эталона.


Проходы сопоставления

Движок сопоставления — Ultimate_GT_Aligner. Для каждой адресной колонки строится пул кандидатов, и строки эталона забирают из него пары.

Найденная пара немедленно изымается из пула. Один кандидат не может быть выдан дважды, а проход, отработавший раньше, не переигрывается более поздним.

Проходы идут строго по возрастанию мягкости.

ПроходНазваниеУсловие совпадения
0Исходная строкаТолько в режиме сбора до сопоставления: кандидат происходит из той же строки источника, и его составляющие сходятся
1Точная строкаСовпадение приведённых текстов адреса
2Хэш составляющихСовпали территория, слова улицы, числа улицы, номер дома и модификаторы
2RМягкий хэшТо же без модификаторов в ключе — но проверка дома всё равно требует совпадения модификаторов
2CКлючевой хэшТолько в режиме сбора: улица и дом без территории. Требуется строгая проверка дома и совместимость территориальных кодов
3Приблизительный, внутри территорииПохожесть названия улицы внутри одного территориального кластера, порог 85
4Приблизительный, между территориямиТо же по всему пулу, порог 85, с весами
5МягкийПорог 80, модификаторы дома по-прежнему защищены

Точными считаются проходы 0, 1, 2, 2C, 3 и 4. Мягкими — 2R и 5. Сводка в журнале разделяет их отдельными строками.

Веса на приблизительных проходах

При равной похожести названия улицы кандидат получает надбавки:

Пара с несовместимыми территориальными кодами отбрасывается до подсчёта весов.

Строки без улицы

Если в эталонной строке номер дома есть, а улицы нет, приблизительное сравнение названий бессмысленно. Такие строки ищут кандидата с тем же номером дома, модификаторами и числами улицы, и выбирают лучшего по территориальным весам.


Настройки

config/project.yaml

address_aligner:
  city: "тюмень"              # город, вычищаемый из ключей при нормализации
  ground_truth_column: "B"    # эталонная колонка; "" = автоопределение
  target_columns: "C,D"       # адресные колонки; "" = авто
  companion_mode: "auto"      # auto | none | left | right | between
  max_auto_align_columns: 5   # сколько колонок брать справа в авто-режиме

safety:
  cleanup_managed_workspace_only: true   # чистить только папки проекта
  never_delete_original_inputs: true     # не удалять оригиналы исходников

Значения из окна имеют приоритет над файлом: пустое поле в окне означает «взять из настроек или определить автоматически», заполненное — переопределяет.

config/gui_settings.yaml

gui:
  language: "en"              # ru | en
  theme: "code_dark"
  emoji: false
  allow_runtime_switching: true
  advanced_open: false        # раскрывать блок «Дополнительно» сразу
  source_path: ''
  destination_path: ''

Прочие файлы настроек

ФайлЧто в нём
config/tool_manifest.yamlОписание всех команд, полей, подсказок и служебных функций
config/version.jsonВерсия и язык корневого README
config/path_history.jsonИстория и закрепления путей источника и назначения
config/ui_colors.yamlЦвета интерфейса
config/oktmo_current_keys.txtКлючи поиска ОКТМО
config/oktmo_*_pins.jsonЗакреплённые регионы и муниципалитеты

tool_manifest.yaml — то, из чего строится окно. Каждая команда описана названием, описанием, набором полей и ссылкой на функцию сервисного слоя. Оба языка живут в одном файле парами label / label_ru.


Источники

Поддерживаются .xlsx, .docx, .odt, .txt, .csv, .md, .markdown и .pdf с текстовым слоем. PDF без текстового слоя не распознаётся — это не задача этой программы.

Старые .doc и .xls обрабатываются только после конвертации отдельной командой.

Временные файлы Office (~$*) пропускаются и удаляются при проверке исходников.

Двухуровневые шапки

Строка, которая не содержит значений-данных и стоит под горизонтально объединённым родительским заголовком, считается строкой подзаголовков. Её значения присоединяются к родительским заголовкам, а сама строка не попадает в данные.

Столбец «Проектная мощность, мест» над «по корпусам» становится «Проектная мощность, мест по корпусам» вместо безымянного column_5.


Артефакты прогонов

Результаты

ПрефиксЧто это
AddressCollection_*.xlsxКнига собранных адресов
AddressReference_*.xlsxЭталонный справочник

Имена содержат метку времени ГГГГММДД_ЧЧММСС.

Отчёты в report/

ФайлПрогон
address_collection_summary.jsonСбор адресов
address_collection_benchmark.jsonСверка сбора с контрольной колонкой
address_alignment_summary.jsonСопоставление адресов
reference_normalization_summary.jsonНормализация эталона
reference_processing_summary.jsonОбработка эталона
table_comparison_summary.jsonСравнение двух таблиц
safe_table_join_summary.jsonПеренос колонок по адресу
legacy_office_conversion_report.jsonКонвертация DOC/XLS
rosstat_oktmo_update_summary.jsonОбновление реестра ОКТМО

Часть операций дополнительно пишет <имя результата>.summary.json рядом с книгой.

Листы аудита

Перенос колонок по адресу добавляет в результат лист AUDIT_ADDRESS_JOIN. Сбор адресов при включённой опции пишет лист отбраковки.


Оформление результата

Книги результата проходят постобработку: ширина колонок подбирается по содержимому, длинный текст переносится, высота строк растёт, статусные колонки получают цветовую заливку.

Это не косметика: без неё каждую выгрузку приходится доводить руками, а строку с длинным адресом невозможно прочитать в узкой колонке.


Устройство проекта

СлойГдеЗа что отвечает
Окноsystem_core/ui_nicegui/Интерфейс, рабочие папки, журнал, артефакты
Сервисыsystem_core/services/Связь окна с движками, отчёты, параметры
Адресный движокsystem_core/address_engine/Разбор, слоты, ОКТМО, справочник, сбор
Сопоставлениеsystem_core/Ultimate_GT_Aligner.pyПроходы сопоставления и перенос связанных колонок
Перенос по адресуsystem_core/safe_table_join.pyСравнение таблиц и перенос колонок через Excel
Ядроsystem_core/core/Задания, пути, кодировки, манифест

Подробная карта файлов — tools/PROJECT_FILES_GUIDE_RU.md.

Все проекты