AudionAudion

DOCX anomaly inspector

DOCX_ANOMALY_INSPECTOR_RU.md

DOCX anomaly inspector

Спецификация реализованного модуля для поиска и безопасной корректировки явных аномалий DOCX. Модуль относится к разделу СТИЛИ И ГИГИЕНА и вынесен в отдельную вкладку АНОМАЛИИ ДОКУМЕНТА, чтобы не смешивать низкоуровневую текстовую гигиену с анализом структуры документа.

Назначение

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

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

Граница ответственности: этот модуль отвечает за поиск и гигиену ошибок форматирования и структуры. Он не должен становиться общей текстовой вычиткой: двойные пробелы, единицы измерения, адресные обозначения, населённые пункты, улицы, дома и морфологические правила относятся к общей команде Глубокая гигиена DOCX, описанной в docs\DOCX_DEEP_HYGIENE_RU.md.

Команды UI

Текущий вариант в СТИЛИ И ГИГИЕНА:

реализован в system_core\docx_anomaly_inspector.py и покрывает таблицы, подписи таблиц/рисунков, секции/ориентацию, колонтитулы и нумерацию страниц, поля/оглавление/ссылки/закладки, списки/нумерацию, пустоты и заголовки.

исправления и пишет отчёт до/после. Первый слой реализован в system_core\docx_anomaly_corrector.py: лишние пустые абзацы, точная высота строк, запрет переноса текста в ячейках, опциональная унификация границ и полей ячеек.

В UI это выглядит как одна вкладка АНОМАЛИИ ДОКУМЕНТА с переключателем режима:

UI показывает чекбоксы классов проверок в адаптивной сетке: подпись стоит на линии чекбокса, а число колонок уменьшается при узкой ширине панели. Кнопка запуска находится в верхней строке справа, на уровне НАЗАД. Корректировка всегда пишет копии в output, исходники не меняются.

Формат отчёта

Отчёт должен быть табличным и пригодным для ручной проверки:

ПолеЗначение
severitycritical, warning, info
classкласс аномалии
objectабзац, таблица, рисунок, секция, поле, закладка
locationчеловекочитаемая локация: файл, страница, номер раздела, номер таблицы/рисунка
evidenceкороткое доказательство, что найдено
why_it_mattersпочему это похоже на ошибку
suggested_fixчто можно сделать
autofixnone, safe, review_required

Отчёт должен идти в report\docx_anomalies.md/.docx/.json. Копии с исправлениями - в output\docx_anomaly_fixed.

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

Основная локация в отчётах должна быть устроена так, как человек реально ищет место в Word: по странице, номеру раздела, номеру таблицы и номеру рисунка. Внутренние индексы абзацев, run-ов и XML-узлов можно писать в JSON как служебные debug-поля, но не использовать как главный ориентир в MD/DOCX отчётах.

Приоритеты локации:

  1. страница - точная, если доступна через Word COM/rendered pagination;

иначе страница: не определена.

  1. раздел - ближайший заголовок с номером, например 2.1.3 Исходные данные.
  2. объект - Таблица 7, Рисунок 4, Приложение А, колонтитул,

оглавление, закладка.

  1. деталь - строка/колонка таблицы, подпись, шапка, поле SEQ, номер

страницы, пустой абзац перед/после объекта.

  1. поисковый фрагмент - короткая строка, которую можно вставить в поиск

Word, если номер страницы или объекта недостаточен.

Примеры:

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

Глоссарий

ошибку в конкретном документе.

колонтитулы или нумерацию страниц.

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

может обрезать переносимый текст.

рисунка сразу после него.

уехала на другую страницу.

Классы проверок

Типографика и абзацы

Проверять:

заголовка, наименования или названия;

документа.

Не считать аномалией:

заголовках;

гигиеной цвета и подсветки.

Безопасные правки:

похожи по стилю и роли;

Секции, страницы и ориентация

Проверять:

другой причины для landscape;

первый лист;

Не считать аномалией:

альбомная ориентация нужна широкой таблице.

Безопасные правки:

только в копиях.

Таблицы

Проверять:

Подозрительные объединения ячеек определять только эвристически:

сетку;

строк;

визуально относится не к той строке;

объединений выше или ниже;

Правило повторяемой шапки:

они;

сигнала.

Безопасные правки:

Подписи таблиц и рисунков

Проверять:

логический раздел;

Нумерация разделов вида 1. -> 1.1. -> 1.1.1, 1.1.2 -> 2. считается нормальной. Ошибка - не сама иерархия, а логический пропуск, обратный ход, дубль, нестабильный формат или несогласованность с соседними объектами.

Безопасные правки:

номера могут быть связаны с полями SEQ и перекрёстными ссылками.

Оглавление, поля и ссылки

Проверять:

отображаемый текст;

Осторожно:

показывать как warning с доказательством: расхождение заголовков, страниц или ссылок.

Безопасные правки:

установлен и пользователь выбрал такой режим.

Нумерация и списки

Проверять:

Безопасные правки:

отдельного чекбокса.

Разрывы, пустоты и привязка объектов

Проверять:

Не считать аномалией:

и технические фрагменты, где длина абзаца нормальна.

Безопасные правки:

не ломает секции;

Матрица автокоррекции

КлассАвтоправка по умолчаниюПричина
Две пустые строки подрядбезопасноОбычно это след ручной верстки
Фиксированная высота строкбезопасноЧасто режет текст, снятие безопасно
Табличные границы/поля ячеекбезопасноУже есть проверенная логика унификации
Смесь шрифтов/кеглей в таблицебезопасно/проверитьБезопасно внутри выбранной таблицной команды
Повтор шапкитребует проверкиНужна осторожная эвристика строк перед шапкой
Ориентация секциитребует проверкиМожно сломать разметку
Нумерация таблиц/рисунковтребует проверкиМожет быть связана с полями
Оглавление/REF/PAGE/PAGEREFтребует проверкиЛучше обновлять через Word COM
Битые ссылки/закладкиreport_onlyТребуется смысловая проверка

UI-рекомендации

изменения текста и структуры.

вмешательства в копию документа.

шапкой, фиксированная высота, PAGEREF, SEQ, keepWithNext, встроенная нумерация Word, верхний колонтитул, нижний колонтитул`.

переносить в подсказки.

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

  1. Read-only отчёт: секции, ориентация, поля, таблицы, пустоты, подписи,

нумерация таблиц/рисунков.

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

повторяемая шапка по строгой эвристике.

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

интервалами/отступами.

  1. Ссылки/оглавление/поля Word: отчёт и отдельная интеграция с Word COM.
Все проекты