Data Science. Настройка, доработка существующего продукта. Контекст задачи У нас есть поток отсканированных документов (TIF/JPG), которые нужно перевести в DOCX с правильным форматированием. Процесс выглядит так: Специалист открывает скан в FineReader, вручную убирает лишнее — печати, подписи, колонтитулы, номера страниц Полученный черновой DOCX прогоняется через внутреннюю программу форматирования — приводит шрифт, отступы, ориентацию к стандарту, добавляет служебный блок в начало документа На выходе — финальный DOCX, который на 98–99% совпадает с исходным сканом по тексту Проблема: при таком процессе могут вкрасться опечатки — FineReader иногда неверно распознаёт символы (буква О, вместо 0, точка, вместо запятой и тд). Нужен инструмент автоматической проверки: сравнить финальный DOCX с исходным сканом и показать все расхождения. Что уже сделано Написана Python-система, которая: Прогоняет скан через Yandex Vision OCR (или Google Documents) и получает текст с координатами каждого слова на странице Парсит DOCX и извлекает слова с точными позициями внутри документа (вплоть до конкретного Run и символьного смещения) Сравнивает OCR-текст с DOCX и находит расхождения: замены, вставки, удаления Показывает результат в веб-интерфейсе с подсветкой на нужном участке. Позволяет оператору принять или отклонить каждое расхождение и внести правки в DOCX В чём проблема с алгоритмом сравнения и что нужно решить: Документы почти идентичны, но алгоритм периодически «сбивается» и сравнивает не те участки: 1. Тело документа. Сравнение идёт по абзацам: для каждого абзаца DOCX ищется соответствующее место в OCR-тексте через уникальные совпадающие фразы («якоря»). В типовых документах много одинаковых стандартных фраз - якорей не хватает - алгоритм начинает сравнивать абзацы не с теми участками OCR - десятки ложных расхождений там, где текст на самом деле совпадает. 2. Таблицы. Документы содержат большие таблицы с 10–30 строками. Алгоритм сначала находит нужную таблицу на скане, затем сравнивает ячейки строка за строкой. Проблема: когда в документе несколько таблиц с одинаковым числом столбцов и похожими заголовками, алгоритм может сопоставить не ту таблицу - все ячейки сравниваются неправильно. 3. Слитные токены. DOCX хранит «уч. № 267» как три отдельных слова, а OCR объединяет в одно «уч.№267». Алгоритм видит расхождение там, где его нет. Частично решено, но не все случаи покрыты. Эта проблема не критична, но решить бы тоже хотелось.