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
Три слоя проверки и один результат: та же вёрстка, те же перекрёстные ссылки, замечания прямо в полях.
Локальный LanguageTool на Java плюс правила на Python, LLM по желанию.
Переменные формул, единицы, химические формулы не подчёркиваются: σувл, Qподз, kN.
Отраслевые термины и аббревиатуры попадают в белый список автоматически.
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]
Обычного comments.xml мало: нужны commentsExtended.xml и paraId, разметка подогнана под сборку заказчика.
Конвертация только через сам Word по COM; сторонние офисные пакеты ломали вёрстку и убраны из комплекта.
Три уровня: фильтр техмусора, глоссарий из ГОСТов, личный словарь с кнопкой «Игнорировать слово».