Значительная часть корпоративных знаний хранится в PDF: регламенты, техническая документация, договоры, паспорта изделий, отсканированные приказы. И это самый частый источник провалов RAG — причём провалов, которые обнаруживаются поздно.
Причина в том, что PDF не является текстовым форматом. Это описание того, как расположить символы на странице. Логической структуры — где заголовок, где таблица, где колонка — в нём может не быть вовсе. Извлечение текста из PDF всегда в той или иной степени реконструкция.
Три вида PDF, и они требуют разного
Текстовый. Внутри лежат символы, их можно извлечь напрямую. Быстро и точно, но структура всё равно требует внимания.
Сканированный. Внутри картинки. Текста нет вообще. Без распознавания вы получите пустоту — и это ровно тот случай, когда «документ загружен, но система его не видит».
Смешанный. Текстовый слой есть, но частичный: часть страниц отсканирована, схемы и таблицы вставлены картинками. Самый неприятный вариант, потому что выглядит как рабочий и молча теряет содержимое.
Первое, что надо сделать с корпусом PDF, — определить, чего и сколько. Проверка автоматизируется: посчитать долю страниц без текстового слоя. Результат обычно удивляет — в корпусах, которые считали текстовыми, регулярно обнаруживаются десятки процентов сканов.
Что ломается при извлечении
Многоколоночная вёрстка. Извлечение идёт по порядку символов в файле, а он не всегда совпадает с порядком чтения. Две колонки легко превращаются в чередование строк из левой и правой — текст становится нечитаемым и для человека, и для поиска.
Таблицы. Самая частая потеря. Таблица превращается в поток чисел без привязки к строкам и столбцам. Фрагмент «ТМ-40/6 148400 5 12 нет» бесполезен: непонятно, что цена, что срок, что признак наличия.
Заголовки. Если структура не распознана, заголовок становится обычной строкой. Дальше нарезка не может резать по разделам, и фрагменты теряют контекст — «Чанкинг документов».
Колонтитулы и номера страниц. Попадают в каждый фрагмент, зашумляя поиск: название компании из колонтитула повторяется тысячи раз и размывает векторы.
Сноски и примечания. Врезаются в середину предложения основного текста.
Переносы. Слово, разорванное между строками, становится двумя несуществующими словами и ломает словесный поиск.
Что нужно сохранить
Не «извлечь текст», а извлечь его так, чтобы он был пригоден для поиска:
- порядок чтения — правильный при любой вёрстке;
- иерархию заголовков — для нарезки по структуре;
- таблицы как таблицы — со связью значений и заголовков колонок;
- списки — нумерация нужна, чтобы «пункт 4.2» находился;
- привязку к странице — для ссылок на источник;
- подписи к рисункам — часто несут ключевые сведения.
И убрать: колонтитулы, номера страниц, водяные знаки, служебные пометки.
Распознавание сканов
Качество исходника решает больше, чем выбор инструмента. Скан с разрешением 150 точек на дюйм, перекошенный и с пятнами, не распознается хорошо ничем. Предобработка — выравнивание, чистка фона, повышение контраста — иногда даёт больший прирост, чем смена системы распознавания.
Русский язык требует явного указания. Распознавание по умолчанию настроено на латиницу, и на кириллице без указания языка выдаёт мусор, похожий на текст.
Таблицы в сканах — отдельная задача. Нужно распознать не только символы, но и разметку: где границы ячеек, где заголовки. Не все инструменты это умеют.
Проверка обязательна. Распознавание даёт ошибки, и часть из них тихие: «5» превращается в «S», «0» в «О», «1» в «l». В технической документации и прайсах это меняет смысл, не вызывая подозрений. Выборочная сверка распознанного с оригиналом — обязательный этап, а не перестраховка.
Отдельно стоит отметить: современные мультимодальные модели неплохо читают страницы целиком, включая таблицы и схемы. Это дороже классического распознавания, но на сложной вёрстке иногда единственный работающий путь.
Разбор: 4 000 сканов технической документации
Задача. Производственная компания, архив паспортов изделий и инструкций за 15 лет. Около 4 000 документов, значительная часть — сканы разного качества. Нужен поиск по параметрам оборудования.
Что было сделано сначала. Загрузили всё как есть, извлекли текст стандартными средствами, проиндексировали. Система заработала и отвечала — плохо, но отвечала.
Что показала проверка. Посчитали долю страниц без текстового слоя: 62 процента. То есть почти две трети архива в индекс не попали вовсе. Система отвечала по трети корпуса и не сообщала об этом — просто не находила остального.
Это характерно: отсутствие текста не вызывает ошибки. Документ обрабатывается «успешно», просто в нём ноль символов.
Что делали дальше.
Разделили корпус на три группы по наличию текстового слоя и обрабатывали по-разному.
Для сканов провели предобработку: выравнивание перекоса, чистка фона. На старых документах это дало заметный прирост качества распознавания.
Распознавание с явным указанием русского языка и с сохранением разметки таблиц. Параметры изделий лежали именно в таблицах, и без их структуры весь проект терял смысл.
Здесь вскрылась главная сложность. В паспортах изделий таблицы параметров имели двухуровневые заголовки: верхний ряд — режим работы, нижний — параметр. Стандартное распознавание давало плоскую таблицу, и значение теряло привязку к режиму. Ответ «допустимое давление 12 атм» без указания режима — неверный по существу.
Решили тем, что для этого класса документов таблицы обрабатывались отдельно, с восстановлением двухуровневой шапки, и каждая строка превращалась во фрагмент с приписанными обоими уровнями заголовков.
Провели выборочную проверку: 200 случайных страниц сверили с оригиналами. Нашли систематическую ошибку — в обозначениях изделий цифра «0» распознавалась как буква «О» примерно в каждом восьмом случае. Добавили правило постобработки для формата обозначений.
Сроки. Извлечение и распознавание заняли около трёх недель, из них две — на таблицы и проверку. Настройка поиска после этого — несколько дней.
Что стоит забрать. Подготовка документов оказалась основной частью проекта, а не подготовительной. Соотношение примерно такое: работа с исходниками — большая часть, настройка поиска — заметная, всё остальное — небольшая. Это типично для корпусов с бумажным происхождением, и это надо закладывать в план, а не обнаруживать в середине.
Что проверить до начала проекта
Полдня работы, которые предотвращают неприятные открытия:
- Какая доля страниц без текстового слоя? Определяет, нужно ли распознавание и в каком объёме.
- Есть ли таблицы и несут ли они ключевые сведения? Если да, это отдельная статья работ.
- Какое качество сканов? Разрешение, перекос, читаемость.
- Есть ли исходники? Иногда PDF сделан из документа, который до сих пор лежит у автора. Работать с оригиналом всегда лучше, чем реконструировать.
- Многоколоночная ли вёрстка? Требует контроля порядка чтения.
Пятый пункт часто закрывает вопрос неожиданным образом: обнаруживается, что половина архива есть в исходном формате, и распознавать нужно не 4 000 документов, а 900.
Частые вопросы
Почему RAG не работает с нашими PDF?
Скорее всего, текст из них не извлёкся. Если PDF сделан из сканов, внутри картинки, и без распознавания система получает пустоту — при этом обработка проходит «успешно», просто с нулевым результатом. Первое, что нужно проверить, — долю страниц без текстового слоя.
Чем извлечение текста отличается от распознавания?
Извлечение достаёт символы, которые уже есть внутри файла, — это быстро и точно. Распознавание читает текст с изображения, когда символов внутри нет, — медленнее и с ошибками. В смешанных корпусах нужны оба способа, применяемые к разным документам.
Как сохранить таблицы при извлечении?
Нужен инструмент, распознающий структуру, а не только символы: где границы ячеек и где заголовки. Дальше таблицу либо оставляют целым фрагментом, либо режут построчно, приписывая к каждой строке заголовки колонок. Без этого строка превращается в набор чисел без значения.
Насколько точно распознаётся русский текст?
На качественных сканах — хорошо, при условии, что язык указан явно: по умолчанию распознавание часто настроено на латиницу и выдаёт правдоподобный мусор. На старых, перекошенных и низкокачественных сканах ошибки неизбежны, и выборочная проверка результата обязательна.
Сколько времени занимает подготовка документов?
Для корпуса с большой долей сканов и таблиц это обычно основная часть проекта, а не подготовительный этап. Настройка поиска после хорошо подготовленных документов делается быстро; на плохо подготовленных она не спасает.
Можно ли обойтись без распознавания, если сканов немного?
Если сканы — это несущественная часть корпуса, можно начать без них и добавить позже. Важно знать их долю заранее: система, отвечающая по трети документов, выглядит работающей, но систематически не находит остального и об этом не сообщает.
Что дальше
После извлечения текст надо правильно нарезать — «Чанкинг документов». Требования к содержанию документов — «Подготовка базы знаний для ИИ» и «Готовность данных к внедрению ИИ». Если система не находит загруженное — «Почему RAG не находит документ».
Обработка архивов документов, включая распознавание со структурой таблиц, входит в работу по разработке и внедрению ИИ.