Заметки

OCR для PDF: как распознать скан и получить текст для ИИ

M
Markabus
·
Сканер, бумажный документ и условный интерфейс распознавания текста.

OCR для PDF нужен, когда документ выглядит как текст, но внутри страницы лежит изображение. Распознавание превращает буквы на изображении в символы. С ними можно искать по документу, извлекать текст и готовить его для ИИ. Если в PDF уже есть качественный текстовый слой, начните с извлечения: оно сохраняет исходные символы и экономит время.

Как проверить, что перед вами скан

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

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

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

Локальный вариант: OCRmyPDF и русский язык

OCRmyPDF добавляет к страницам слой, пригодный для поиска. Для распознавания он использует Tesseract, поэтому кроме программы понадобится языковой пакет. Установите OCRmyPDF способом из инструкции для своей ОС и проверьте список языков. Для русского нужен код rus, для английского — eng. Если rus отсутствует, добавьте русские данные Tesseract способом, предусмотренным вашей установкой. Установка OCRmyPDF · Языковые данные Tesseract.

tesseract --list-langs
ocrmypdf -l rus+eng --rotate-pages --deskew --skip-text input.pdf searchable.pdf

Команда создаёт отдельный файл searchable.pdf. Она пытается исправить ориентацию страниц и небольшой наклон строк. Параметр --skip-text пропускает страницы с уже существующим текстом. Это полезно для смешанных PDF, но если на одной странице есть текстовый колонтитул и большая вставка со сканом, наличие колонтитула может оставить вставку без распознавания. Проверьте её отдельно. Режимы OCRmyPDF.

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

Как получить текст из распознанного PDF

Для одного документа можно скопировать результат из просмотрщика. Для повторяемого процесса извлеките текст по страницам, например через PyMuPDF. Такой вывод сохраняет номер страницы, поэтому ошибку можно проверить по источнику. Библиотеку устанавливают отдельно в рабочее окружение Python.

import pymupdf

with pymupdf.open("searchable.pdf") as doc:
    for page in doc:
        text = page.get_text(sort=True).strip()
        print(f"\n--- Страница {page.number + 1} ---")
        print(text)

Параметр sort=True помогает упорядочить извлечённые блоки. Сложная вёрстка и таблицы всё равно требуют проверки. Если вместо извлечения из готового PDF вы используете --sidecar в OCRmyPDF, учитывайте, что в такой файл попадает текст со страниц, на которых выполнилось распознавание. Для смешанного документа это может оказаться только частью текста. Ограничения текстового файла sidecar.

Таблицы: проверьте связь между строкой и столбцом

Текстовый слой позволяет найти слова «Сумма» и «НДС», но для расчётов нужно знать, к какой строке относится число. Простой вывод OCR способен перемешать значения в соседних ячейках. Например, если в столбцах «Количество» и «Цена» стояли 12 и 150, плоский текст может содержать оба числа, но не объяснять, какое из них цена. ИИ в таком случае может составить убедительный ответ из неверно связанных данных.

Для небольшой таблицы откройте распознанный PDF рядом с оригиналом и вручную проверьте шапку, две строки из середины и итог. Для автоматизации отдавайте извлекателю страницы или области таблиц, сохраняйте строки как CSV или структурированные записи и отдельно отмечайте объединённые ячейки. Если столбцы продолжаются на следующей странице, сохраните их названия вместе с данными. Образец со сложной таблицей полезнее для оценки, чем десять одинаковых страниц сплошного текста.

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

Когда удобнее облачное распознавание

Локальный вариант подходит, когда нужно сохранить файлы на своём компьютере или пакетно добавить поиск по архиву. Облачный сервис может помочь, если на выходе требуются блоки документа, структура таблиц или готовое разбиение. Например, Google Document AI описывает Layout Parser для извлечения элементов вёрстки и подготовки фрагментов. Перед выбором проверьте, насколько точно он передаёт структуру ваших PDF, какие форматы принимает и где обрабатывает файлы. Google Document AI: Layout Parser.

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

Как подготовить результат для ИИ и поиска

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

Для RAG разбивайте уже проверенный текст по разделам. При индексации таблицы сохраняйте заголовки рядом со строками и добавляйте ссылку на страницу. Если пользователю нужно ответить по пункту договора, система должна вернуть фрагмент, который можно открыть и сверить. Проверить подготовку проще на нескольких вопросах с известными ответами и номерами страниц. Как работает RAG · Разбиение документов для RAG.

Частые вопросы

Q.Как понять, что PDF нужен OCR?

Попробуйте выделить предложение и скопировать его в текстовый редактор. Проверьте несколько страниц. Пустой или испорченный результат требует дополнительной проверки.

Q.Как распознать русский текст?

Установите русские языковые данные Tesseract. В OCRmyPDF используйте -l rus или -l rus+eng для документа на двух языках.

Q.Сохраняет ли OCR структуру таблиц?

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

Q.Что сохранить для RAG?

Сохраните очищенный текст, имя исходного файла и номера страниц. В таблицах оставьте заголовки столбцов рядом с данными.

Источники

Поделиться:OKVK