Проверка технических документов до сдачи

300 страниц .docx за три минуты: LanguageTool, правила оформления, LLM-проверка смысла. Результат как комментарии Word.

app/
  checker.py       оркестратор + фильтр техмусора
  lt_checker.py    LanguageTool, фильтр ложных срабатываний
  format_rules.py  списки, заглавные, нумерация
  llm_checker.py   YandexGPT · Gemini · OpenAI · DeepSeek
  docx_marker.py   комментарии Word (commentsExtended, paraId)
  converter.py     .doc/.rtf → .docx через Word

Что внутри

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

~3 мин

на документ в 300 страниц

Локальный LanguageTool на Java плюс правила на Python, LLM по желанию.

Фильтр техмусора

Переменные формул, единицы, химические формулы не подчёркиваются: σувл, Qподз, kN.

Глоссарий из ГОСТов

Отраслевые термины и аббревиатуры попадают в белый список автоматически.

Комментарии, которые видит Word 365

commentsExtended.xml и paraId, иначе карточки пустые.

Обновление одной кнопкой

Батник тянет новую версию из GitHub, словарь пользователя и ключи не трогает.

Как устроено

Настольная программа на Windows у заказчика, веб-режим для разработки на macOS, ядро общее.

flowchart LR
  IN[.docx / .doc / .rtf] --> CV[converter.py<br/>Word COM → .docx]
  CV --> RD[docx_reader.py<br/>абзацы, таблицы, runs]
  RD --> LT[lt_checker.py<br/>LanguageTool 6.5]
  RD --> RU[format_rules · heading_rules · table_rules]
  RD --> LL[llm_checker.py<br/>смысл и логика]
  LT --> CK[checker.py<br/>объединение, фильтр техмусора, глоссарий]
  RU --> CK
  LL --> CK
  CK --> MK[docx_marker.py<br/>комментарии Word]
  MK --> OUT[*_CHECKED.docx]
PythonTkinterLanguageTool 6.5python-docxWord COMYandexGPTGemini

Что было сложного

Пустые карточки комментариев в Word 365

Обычного comments.xml мало: нужны commentsExtended.xml и paraId, разметка подогнана под сборку заказчика.

.rtf на 365 МБ с перекрёстными ссылками

Конвертация только через сам Word по COM; сторонние офисные пакеты ломали вёрстку и убраны из комплекта.

Ложные срабатывания на инженерном тексте

Три уровня: фильтр техмусора, глоссарий из ГОСТов, личный словарь с кнопкой «Игнорировать слово».