Zilmac блог
← Назад к технической практике

RAG PDF: pdf-inspector или OCR для импорта (2026)

AIWorkflow ·~2 мин чтения

В конвейере RAG каждый PDF отправляется в OCR, хотя часть файлов уже содержит пригодный текст, а другая часть после OCR теряет структуру.

Быстрое решение: не выбирать между pdf-inspector и OCR как между взаимоисключающими инструментами — использовать pdf-inspector для классификации и нативного извлечения, а OCR включать только для сканированных страниц, плохого скрытого текстового слоя или отдельных смешанных участков.

Эта статья предназначена разработчикам, которые с нуля строят импорт PDF в RAG и выбирают первую архитектуру. Она также полезна командам с уже работающим OCR-конвейером, если обработка стала медленной или нестабильной, и руководителям, которым нужно подготовить удалённую среду для массовой регрессии.

Последнее обновление: 10 августа 2026 года. Сведения проверены по актуальному README и материалам репозитория pdf-inspector, документации PyMuPDF, OCRmyPDF и Tesseract.

Решение определяется не наличием текста, а качеством результата

>

Для RAG PDF недостаточно проверить, что функция извлечения вернула непустую строку. В индекс попадут не «символы вообще», а фрагменты, по которым модель должна найти правильный ответ и показать ссылку на страницу.

На практике встречаются как минимум четыре типа входных файлов:

  • PDF с нативным текстом, где символы действительно представлены текстовыми объектами;
  • скан, состоящий преимущественно из изображений;
  • файл со смешанными страницами — например, текстовый отчёт с отсканированным приложением;
  • PDF с формально существующим, но практически бесполезным скрытым текстовым слоем.

Последний вариант особенно опасен. Извлечение может вернуть буквы, однако порядок чтения будет нарушен, слова окажутся разделены, а таблица превратится в последовательность чисел без координат и заголовков. Официальная документация PyMuPDF прямо предупреждает, что простое извлечение не обязано восстанавливать естественный порядок чтения: текст может появляться с неожиданными переносами и в порядке, отличающемся от визуального представления страницы. Описание ограничений обычного извлечения текста в PyMuPDF

Для предварительной оценки следует проверять не один показатель, а минимум пять:

  1. долю страниц с непустым текстом;
  2. длину текста на странице относительно визуального содержимого;
  3. сохранение абзацев и заголовков;
  4. воспроизводимость таблиц и колонок;
  5. наличие связи «фрагмент — номер страницы — координаты».

Если хотя бы один из этих пунктов систематически нарушается, отправка файла напрямую в разбиение на чанки создаёт скрытый дефект. Векторная база будет заполнена, но поиск начнёт возвращать неполные или плохо объяснимые фрагменты.

Нужно ли всегда сначала выполнять OCR для импорта PDF в RAG?

Нет. Для текстовых страниц это добавляет отдельную стадию, меняет представление текста и может ухудшить точность в таблицах, формулах, коде и обозначениях. Сначала следует определить тип страницы, затем выбрать обработчик. Именно такую логику поддерживает pdf-inspector: проект классифицирует PDF как text_based, scanned, image_based или mixed, а затем может вернуть нативно извлечённый Markdown для подходящего типа. Официальный репозиторий pdf-inspector и описание API

pdf-inspector и OCR решают разные задачи

>

pdf-inspector не является универсальной заменой OCR. Его сильная сторона — осмотр структуры PDF, классификация страниц и извлечение уже существующих текстовых объектов с учётом положения на странице. OCR, напротив, распознаёт изображение и создаёт новый текстовый слой.

Это различие влияет на архитектуру:

  • pdf-inspector отвечает на вопрос «какой путь обработки выбрать?»;
  • нативный парсер отвечает на вопрос «как извлечь уже закодированный текст?»;
  • OCR отвечает на вопрос «как получить текст из изображения?»;
  • последующий слой RAG отвечает за очистку, разбиение, метаданные, эмбеддинги и индексацию.

В README pdf-inspector заявлены обнаружение типа PDF, позиционно-зависимое извлечение, обработка колонок, таблиц, заголовков и преобразование в Markdown. Там же указано, что классификация выполняется выборочно по потокам содержимого, а для отдельных сценариев возвращается решение о маршрутизации на уровне страницы. Эти сведения подтверждают назначение проекта, но не доказывают, что его результат будет достаточным для конкретной коллекции документов. README и примеры pdf-inspector

OCR-инструмент также не следует рассматривать как «улучшенный парсер». Например, документация PyMuPDF указывает, что встроенный OCR основан на Tesseract, который должен быть установлен отдельно; распознанный текст добавляется скрытым слоем, без исходных свойств шрифта, жирного начертания и курсива. Для RAG это означает, что визуальная копия страницы может сохраниться, но семантическая структура должна проверяться отдельно. Официальная документация PyMuPDF по OCR

Критерий pdf-inspector и нативное извлечение Прямой OCR Смешанная маршрутизация
Текстовый PDF Основной путь Лишняя обработка Нативное извлечение
Сканированные страницы Только обнаружение Основной путь OCR по условию
Смешанный документ Может определить тип Обрабатывает всё одинаково Разные пути по страницам
Заголовки и координаты Сохраняются, если есть в PDF-структуре Зависят от распознавания Сохраняются на нативных страницах
Таблицы Нужна проверка на образце Возможны ошибки строк и ячеек Нативный путь для текста, OCR для изображений
Эксплуатационная сложность Ниже без OCR Выше из-за рендеринга и языковых моделей Выше на старте, ниже при масштабировании

Оценка по пяти метрикам

Скоринг ниже не является универсальным рейтингом инструментов. Это рабочая модель для архитектурного обсуждения: команда выставляет баллы по собственному набору документов, а не переносит чужой результат в производство.

Метрика Нативный путь через pdf-inspector Прямой OCR Гибридный путь
Качество исходного текста 5/5 для корректного текстового слоя 2–4/5 в зависимости от изображения 5/5 на текстовых страницах
Контроль задержки 5/5 2–3/5 4–5/5
Смешанные файлы 3–4/5 2/5 5/5
Сохранение структуры 4–5/5 при подходящем PDF 2–3/5 4–5/5
Простота первой версии 5/5 4/5 3/5
Контроль отказов 3/5 без дополнительной проверки 3/5 5/5 при явных fallback-ветках

Основное преимущество гибридного варианта не в том, что он всегда быстрее, а в том, что он позволяет не тратить OCR на страницы, которым он не нужен. При этом усложнение схемы оправдано только тогда, когда команда действительно ведёт журнал решений и умеет повторно обработать спорные страницы.

Задержка и пропускная способность зависят от маршрута

>

Фиксированное утверждение вроде «OCR в десять раз медленнее» нельзя переносить между разными процессорами, разрешениями изображений, языками и режимами распознавания. Однако официальная документация PyMuPDF приводит ориентир: OCR может быть примерно в 1 000 раз медленнее стандартного извлечения текста. Это не универсальный бенчмарк для любой системы, а объяснение, почему OCR следует запускать условно и кэшировать результат. Раздел о производительности OCR в PyMuPDF

В README pdf-inspector также приведены результаты авторского сравнения на корпусе из 200 PDF: для версии 0.2.6 указан полный прогон за 0,470 секунды на Apple M4 Pro, а результаты обновлены 31 июля 2026 года. Эти цифры относятся к конкретному корпусу, версии, конфигурации и методике, поэтому их нельзя выдавать за обещанную скорость вашего RAG-конвейера. Они полезны только как пример того, какие параметры нужно фиксировать в собственном тесте. Методика и результаты сравнения в репозитории pdf-inspector

Разница между полной OCR-обработкой и маршрутизацией особенно заметна в трёх случаях:

  • в архиве преобладают цифровые отчёты, счета и техническая документация;
  • один PDF содержит текстовые страницы и несколько сканов;
  • документы поступают регулярно, поэтому повторная обработка превращается в постоянную статью расходов.

При этом классификатор сам по себе не отменяет рендеринг страницы, OCR, очистку текста и создание эмбеддингов. Если все ветки в конце всё равно запускают OCR, архитектурное преимущество исчезает. Поэтому в метрике задержки нужно отдельно фиксировать время:

  • чтения файла;
  • классификации;
  • нативного извлечения;
  • рендеринга изображения;
  • OCR;
  • очистки и структурирования;
  • эмбеддингов;
  • записи в индекс.

Смешанные файлы требуют маршрутизации по страницам

>

Файл «mixed» нельзя обрабатывать как обычный текстовый PDF только потому, что на первой странице есть заголовок. В отчёте могут присутствовать:

  • титульная страница с нативным текстом;
  • сканы подписанных приложений;
  • таблицы, вставленные как изображения;
  • страницы с формулами и диаграммами;
  • повёрнутые или наклонённые сканы;
  • текстовый слой, испорченный после экспорта из старой системы.

В такой ситуации pdf-inspector должен быть первым фильтром, но не финальным судьёй качества. Если классификация показывает смешанный тип, полезно сохранять решение для каждой страницы:

{
  "file_id": "document-042",
  "page": 7,
  "route": "ocr",
  "reason": "image-dominant",
  "parser_version": "fixed-in-lockfile"
}

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

OCRmyPDF полезен в тех случаях, когда требуется добавить к сканированному PDF поисковый текстовый слой, сохранить исходные изображения и получить проверяемый PDF/A-результат. В его командной строке предусмотрены языковые параметры, выравнивание страниц, исправление поворота, многопроцессорный режим и проверка входного и выходного файлов. Официальный репозиторий OCRmyPDF и параметры командной строки

Может ли pdf-inspector полностью заменить OCR?

Только для той части документов, где текст уже присутствует в пригодном для извлечения виде. Он не превращает изображение страницы в распознанный текст и не гарантирует, что сложная формула, рукописная пометка или фотография таблицы станут структурированными данными. Корректная формулировка для архитектуры — «pdf-inspector определяет, нужен ли OCR», а не «pdf-inspector устраняет потребность в OCR».

Стоимость нужно считать по этапам, а не по названию инструмента

>

Даже бесплатный инструмент создаёт стоимость эксплуатации. Для импорта PDF в RAG нужно учитывать вычислительное время, пиковую память, хранение исходников и промежуточных артефактов, повторные запуски, поддержку языковых пакетов и время инженеров на диагностику.

Удобная модель расчёта выглядит так:

Стоимость партии =
объём файлов × доля OCR-страниц × время OCR-страницы × ставка среды
+ время нативного извлечения × ставка среды
+ рендеринг и хранение промежуточных данных
+ эмбеддинги и запись в индекс
+ повторная обработка ошибок

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

Это разные сценарии выбора:

  • малый прототип — один процесс, простая проверка типа, ручная выборка ошибок;
  • периодическая пакетная обработка — отдельная среда на время импорта, кэширование результатов и контролируемый параллелизм;
  • производственный поток — очередь задач, идемпотентность, повторные попытки, версионирование парсеров и мониторинг доли OCR.

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

Пошаговая схема для первой рабочей версии

>

Первый шаг: собрать размеченный набор

Нужно подготовить не случайные файлы, а выборку, отражающую будущий архив:

  • текстовые PDF с одной и несколькими колонками;
  • сканы с хорошим и плохим качеством;
  • смешанные документы;
  • таблицы;
  • формулы;
  • разные языки;
  • страницы с поворотом;
  • файлы с повреждённым или скрытым текстовым слоем.

Для каждого документа заранее отметить эталонный тип на уровне файла и страницы. Без такой разметки невозможно оценить ошибку классификации.

Второй шаг: зафиксировать версии и параметры

Версии pdf-inspector, нативного парсера, OCR-движка, языковых данных и генератора эмбеддингов должны храниться в lock-файле. В журнале также фиксируются разрешение рендеринга, языки OCR, тайм-ауты и число параллельных задач.

Tesseract поддерживает большое число языков, но языковые данные устанавливаются отдельно; неизвестный язык нельзя оставлять на автоматическое угадывание без проверки на образце. Официальное руководство Tesseract по установке и языковым данным

Третий шаг: выполнить классификацию до разбиения

Сначала обработать PDF через pdf-inspector или аналогичный классификационный слой. Для каждой страницы записать:

  • обнаруженный тип;
  • уверенность, если она доступна;
  • длину нативного текста;
  • наличие изображений;
  • выбранный маршрут;
  • причину fallback.

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

Четвёртый шаг: разделить нативный путь и OCR-ветку

Нативные страницы передаются в PDF Parsing с сохранением координат и номера страницы. Сканированные страницы проходят рендеринг и OCR. Для смешанного файла маршрутизация выполняется постранично, а итоговый документ собирается с сохранением исходной последовательности.

Если OCR вернул пустой или подозрительно короткий результат, файл не должен молча попадать в индекс. Он переводится в очередь ручной проверки или повторной обработки с другим режимом.

Пятый шаг: нормализовать структуру перед чанкингом

На этом этапе удаляются повторяющиеся колонтитулы, исправляются разрывы слов, объединяются переносы строк и сохраняются заголовки. Таблицы не следует бездумно превращать в обычный текст: для некоторых запросов полезнее хранить одновременно компактное текстовое представление и структурированную JSON-форму.

Каждый чанк должен иметь как минимум:

  • идентификатор файла;
  • номер страницы;
  • диапазон координат, если он доступен;
  • тип маршрута;
  • версию парсера;
  • контрольную сумму исходного файла.

Шестой шаг: провести регрессию до индексации

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

Минимальный набор метрик:

  • доля страниц с правильным маршрутом;
  • доля документов без потери страниц;
  • полнота извлечения заголовков;
  • точность ссылок на страницы;
  • доля таблиц, прошедших проверку;
  • доля OCR-страниц;
  • среднее и p95-время по каждому этапу;
  • доля повторных обработок;
  • количество ручных исключений.

Какие показатели следует оценивать при предобработке PDF для RAG?

В первую очередь — полноту, читаемость, структуру и трассируемость. Отдельно оцениваются качество PDF Parsing, результат PDF OCR, задержка маршрута и стоимость повторного запуска. Количество символов само по себе не является достаточным показателем: длинный, но перемешанный текст может ухудшить поиск сильнее, чем короткий и корректно привязанный к странице.

Финальная проверка перед запуском

  • [ ] В наборе есть нативные, сканированные и смешанные PDF.
  • [ ] Для каждого файла размечен ожидаемый тип, а для смешанных файлов — тип каждой страницы.
  • [ ] Версии pdf-inspector, OCR и парсеров зафиксированы.
  • [ ] В журнале сохраняются маршрут, причина fallback и номер страницы.
  • [ ] Ошибка OCR не приводит к тихой индексации пустого результата.
  • [ ] В чанках есть ссылка на исходный файл и страницу.
  • [ ] Отдельно измеряются нативное извлечение, рендеринг, OCR и эмбеддинги.
  • [ ] Есть контрольные вопросы для проверки поиска после индексации.
  • [ ] После обновления зависимости запускается повторная регрессия.
  • [ ] Архивная партия и постоянный поток имеют разные лимиты параллелизма.

Итоговый выбор зависит от размера и режима загрузки

>

Для небольшой демонстрационной базы допустим упрощённый путь: классификация, нативное извлечение, OCR только при очевидном отсутствии текста и ручная проверка нескольких результатов. Главное — не закрепить прямой OCR как неизменяемое правило, которое затем придётся дорого переделывать.

Для периодической пакетной загрузки оптимален гибрид: pdf-inspector передаёт текстовые страницы в нативный парсер, а сканы — в OCR-очередь. Результаты кэшируются по контрольной сумме файла и версии обработчика, чтобы повторный запуск после сбоя не распознавал уже готовые страницы.

Для постоянной производственной загрузки нужен полноценный многоуровневый маршрут:

  1. проверка файла и безопасности;
  2. классификация PDF;
  3. выбор обработчика по странице;
  4. OCR или нативное извлечение;
  5. структурная нормализация;
  6. контроль качества;
  7. разбиение и эмбеддинги;
  8. индексация;
  9. мониторинг и повторная обработка.
Сценарий Рекомендуемая схема Когда пересматривать решение
Небольшой прототип pdf-inspector → нативное извлечение → условный OCR После появления смешанных файлов и ручных исключений
Периодическая партия Классификация по страницам → две очереди → кэширование При росте пикового времени или очереди OCR
Постоянный production-поток Версионированный роутер, контроль качества, повторные запуски После изменения коллекции, языков или требований к цитированию

В 2026 году наиболее безопасная стратегия для RAG PDF — не обещать универсальную точность одного инструмента, а строить проверяемый маршрут. pdf-inspector подходит как входной слой для обнаружения типа и нативного извлечения, OCR остаётся необходимым для изображений, а итоговое решение должно приниматься по измерениям на собственной коллекции.

Если текущая схема отправляет каждый файл в OCR, она обычно несёт три проблемы: лишнюю задержку на текстовых страницах, более высокие требования к вычислительной среде и сложную диагностику ошибок структуры. Полностью локальный сервер, в свою очередь, неудобен для коротких массовых регрессий, а обычная удалённая машина без запаса по памяти и диску может стать узким местом при параллельном рендеринге. Для временного тестового стенда или пакетной проверки разумнее рассмотреть аренду Mac через Zilmac, заранее сопоставив объём PDF, долю OCR-страниц, длительность прогона и необходимый срок доступа. Такой подход не отменяет покупку собственного оборудования для постоянной тяжёлой нагрузки, но позволяет проверить архитектуру до долгосрочных расходов и не строить production-маршрут на неподтверждённых предположениях.

Проверьте импорт PDF для RAG на Zilmac

Запустите тесты pdf-inspector и OCR на удалённом Mac, чтобы сравнить качество обработки ваших документов.

Используйте облачный Mac для проверки разных сценариев маршрутизации PDF без покупки отдельного оборудования. — Посмотреть варианты плана

Ограниченное предложение

Zilmac

Запустите тесты pdf-inspector и OCR на удалённом Mac, чтобы сравнить качество обработки ваших документов.

Вернуться домой
Ограниченное предложение Посмотреть планы