AudionAudion

Глубокая гигиена DOCX

DOCX_DEEP_HYGIENE_RU.md

Глубокая гигиена DOCX

Спецификация общей команды для прохода по форматированию и текстовым ошибкам документа. Рабочее пользовательское имя можно держать спокойным: Глубокая гигиена DOCX; внутреннее прозвище команды - "базука".

Разделение ответственности

DOCX anomaly inspector остаётся узким модулем поиска и гигиены ошибок форматирования: секции, ориентация, таблицы, подписи, нумерация, колонтитулы, пустоты, разрывы и другие видимые структурные сбои.

Глубокая гигиена DOCX - общий агрегатор. Он объединяет форматные аномалии с текстовыми правилами: двойные пробелы, пунктуацию, единицы измерения, символы, сокращения и будущие проверки адресных обозначений.

Состав команды

Текущие режимы UI:

DOCX, тёмно-оранжевый кант.

Команда должна собирать единый отчёт из нескольких классов проверок:

отсутствие пробела после пунктуации, мягкие переносы и похожий мусор;

типовые опечатки в названиях таблиц;

пунктов, улиц, домов и корпусов.

В интерфейсе раздел СТИЛИ И ГИГИЕНА сделан как рабочая панель с переключателями ГИГИЕНА ТЕКСТА, АНОМАЛИИ ДОКУМЕНТА, СТИЛИ ДОКУМЕНТА. Параметры сгруппированы рамками со скруглением; чекбоксы стоят сеткой, подпись идёт на одной линии с чекбоксом, а число колонок уменьшается при узкой панели. Кнопка запуска находится в верхней командной строке справа, на уровне НАЗАД. Подробные пояснения вынесены в подсказки с фоном rgb(23, 33, 43).

Текущий статус реализации

Первый каркас команды реализован в system_core\services\office_service.py как docx_deep_hygiene.

Уже работает:

них, затем аномалии поверх результата аудита;

исправляет каждый слой, а куда ему нельзя лезть;

target_fingerprint, issue_fingerprint, владельцем, риском, autofix и статусом active / suppressed_duplicate;

отчётах.

Пока не подключён в общий запуск будущий морфологический слой адресов/топонимов.

Двухпроходный режим

Глубокая гигиена DOCX должна работать как двухпроходная объединяющая команда:

  1. Проход 1: Текстовая гигиена - существующая старая гигиена ошибок в

тексте, пунктуации, пробелах, обозначениях и предметных правилах аудита. Внутри текущей реализации это два последовательных слоя: docx_text_hygiene_* и docx_audit_processor.

  1. Проход 2: Форматирование - форматные и структурные аномалии документа:

секции, поля, ориентация, таблицы, подписи, нумерация, колонтитулы, разрывы и похожие видимые сбои.

Оба прохода должны поддерживать общие пользовательские режимы:

копиям DOCX и пишут единый отчёт о том, что исправлено, пропущено или требует ручного решения.

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

Границы зон ответственности

Главная задача объединённой команды - не смешать проверки в одну массу, а показать, какой слой имеет право искать и исправлять конкретный класс проблем.

Базовое правило:

форматирование документа.

таблиц, а не скрытая часть гигиены.

неоднозначных случаев.

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

Рекомендуемые поля объединённой карты результатов:

В текущей реализации эти поля уже пишутся в unified_findings. Детальные target_fingerprint строятся для docx_text_hygiene_*, docx_audit_processor и DOCX anomaly inspector, где есть координаты диапазона текста или локация объекта. Корректирующие pass-ы без детальных координат могут оставаться на точности file, но старая text hygiene уже отдаёт range-level находки для своих видимых текстовых правил. XML-мягкие переносы w:softHyphen помечаются точностью xml-element, потому что это не диапазон внутри w:t.

Владение классами и технические пересечения

У каждого класса ошибки должен быть один владелец. Глубокая гигиена DOCX только оркестрирует проверки, объединяет отчёты, показывает границы зон и запускает разрешённые правки. Она не должна копировать логику старой гигиены, правил аудита или форматного корректора.

Базовое разделение:

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

кв. м, куб. м, , проценты, градусы, даты с г., типовые ошибки аудита.

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

пользователя: шрифты, границы, поля ячеек, баланс ширин, плотность.

улицы, дома, корпуса и неоднозначные единицы с контекстной проверкой.

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

Сейчас базука подавляет точные дубли по issue_fingerprint и группирует пересечения по одному target_fingerprint. Разные классы на одном объекте не скрываются автоматически: они попадают в overlap-группу, чтобы пользователь видел, что несколько правил смотрят на один и тот же фрагмент или объект.

Текущие решения по пересечениям:

владельца, чтобы docx_text_hygiene_* и docx_nonprinting_clean не делали одно и то же дважды;

правила аудита, но предметная нормализация единиц остаётся за docx_audit_processor`;

пропускает типовые сокращения/единицы: кв.м, куб.м, руб., г.Энск, ул.Садовая; находить и исправлять их должен docx_audit_processor или будущий морфологический слой с учётом контекста;

таблиц - anomaly/table unifier;

объекта и человекочитаемой локации;

явного параметра или режима финализации.

Текущий статус морфологии

В portable runtime уже встроен pymorphy3; существующий system_core\morph_replace.py использует его для поиска по леммам и согласования заменяющей фразы. Это готовая база для будущей глубокой гигиены.

Но полноценного валидатора "единицы измерения + населённые пункты + улицы + дома" пока нет. Сейчас детерминированный процессор правил аудита уже закрывает часть единиц и символов через строгие правила, но адресные обозначения и топонимы нужно реализовывать отдельным высокоточным слоем.

Морфологический слой

pymorphy3 использовать как помощника, а не как единственный источник истины:

Для адресов нужны закрытые словари и контекстные ограничения:

сокращать или переписывать;

доказанного контекста.

Выходные артефакты

Отчёты:

Исправленные копии:

текстовой гигиены;

Отчёт должен показывать класс ошибки, место, доказательство, предлагаемую правку, уровень риска и статус автоправки: none, safe, review_required.

Локация ошибок

В объединённом отчёте локация должна быть человекочитаемой. Главный формат: страница, номер раздела, номер таблицы, номер рисунка, ближайшая подпись или заголовок. Это важнее внутренних индексов абзацев: пользователь будет искать ошибку в Word по страницам, разделам, таблицам и рисункам.

Рекомендуемые поля JSON:

footer, toc, field;

XML-части или узла.

Для машинной склейки рядом с человекочитаемой локацией используется target_fingerprint. Он не заменяет локацию для пользователя, а нужен для подавления дублей, группировки пересечений и будущей связки с морфологическим слоем.

В MD/DOCX отчётах показывать прежде всего строку вида:

стр. 18; раздел 1.4 "Существующее положение"; Таблица 5; ячейка R3C2.

Если страница неизвестна, строка должна оставаться полезной:

страница: не определена; раздел 3.2; Рисунок 9; подпись оторвана.

Правила безопасности

предложения.

Приоритет реализации

  1. Сделать двухпроходный оркестратор: сначала старая текстовая/пунктуационная

гигиена, затем форматные аномалии.

  1. Добавить единый UI с чекбоксами классов проверок и режимами

Проверка / Корректировка.

  1. Завести ключи владения, чтобы старая гигиена, правила аудита, anomaly

corrector и будущий морфологический слой не правили один диапазон дважды.

  1. Расширить правила аудита по единицам измерения закрытыми списками.
  2. Реализовать отдельный морфологический слой адресных обозначений с отчётом

confidence и ручным подтверждением неоднозначных мест.

Все проекты