
При сканировании и сохранении в формате PDF зачастую документы сохраняются в виде графических изображений. Это неудобно, потому что делает невозможным полнотекстовый поиск по содержанию. Утилита OCRmyPDF решает эту проблему: она одной командой из консоли добавляет к PDF-документу слой OCR с распознанным текстом.
Ниже упомянуты ещё несколько полезных инструментов для парсинга PDF, в том числе для преобразования сложных математических PDF-документов в текстовый формат Markdown.
OCRmyPDF
Распознанный текст в OCR-слое можно выделить и скопировать в другой документ, и по нему легко проводить полнотекстовый поиск.
Установка стандартной командой из пакетного менеджера:
apt install ocrmypdf
В Windows устанавливается в подсистеме WSL.
Запуск из консоли:

Основные функции:
Из обычного PDF создаёт файл PDF/A с возможностью поиска
Размещает текст OCR точно под изображением, чтобы упростить копирование
Сохраняет точное разрешение оригинальных встроенных изображений
По возможности вставляет OCR-информацию, не затрагивая другой контент
Оптимизирует PDF-изображения, создавая файлы меньшего размера, чем исходный
По запросу выравнивает и/или очищает изображение перед распознаванием текста
Проверяет входные и выходные файлы
Распределяет работу между всеми ядрами CPU
Использует опенсорсный движок Tesseract OCR для распознавания более 100 языков
Сохраняет конфиденциальность данных, поскольку работает локально и ничего не отправляет на удалённый сервер
Возможна обработка больших файлов на тысячи страниц
Дополнительные параметры при запуске:
ocrmypdf # программу можно вставлять в различные скрипты
-l eng+fra # поддержка множества языков
--rotate-pages # исправление неправильного наклона страниц
--deskew # выравнивание кривых PDF-файлов
--title "My PDF" # изменение выходных метаданных
--jobs 4 # использование нескольких ядер CPU по умолчанию
--output-type pdfa # выдача формата PDF/A по умолчанию
input_scanned.pdf # какие файлы принимаются для обработки: PDF, изображения
output_searchable.pdf # выдача валидного PDF
В репозитории на Github автор пишет, что надёжность работы программы проверена на миллионах файлов.
Подробнее технические детали см. в документации.
Слои PDF
Из других полезных инструментов для работы со слоями PDF можно назвать PDFSyntax, это визуализация внутренней структуры PDF-файла. Визуализация в виде статического HTML. Инструмент можно попробовать в онлайн-демо, вот как выглядит парсинг (частичный скриншот):

Конкретно эта выдача соответствует документу Simple Text String из спецификации PDF.
Вообще, такой парсинг PDF перед открытием является хорошей антивирусной защитой. Он позволяет проверить документ на наличие скрытых объектов, которые могут пройти незамеченными через антивирусные сканеры. В последнее время эффективной является тактика составления персонализированных писем с помощью LLM и приложение к ним инфицированных PDF-отчётов с использованием 0day-уязвимостей, которые проходят через антивирусные сканеры.
Если в PDF-файле нет слоя с простым текстом, а только изображения JPEG, то можно использовать OCR-распознавание с помощью инструмента OCRmyPDF, упомянутого выше.
Из PDF в Markdown
Преобразование PDF в текст можно произвести с помощью LLM или программных инструментов, которые интегрируют протокол MCP (Model Context Protocol) и используют LLM для этой задачи.
Например, есть программа PDFMathTranslate для перевода научных документов/статей с одного языка на другой с сохранением форматирования онлайн-демо:

Эта программа нуждается в LLM для работы, модель скачивается вместе с утилитой.
Есть ещё легковесная питоновская утилита MarkItDown для конвертации разнообразных форматов в Markdown, недавно добавили поддержку MCP для агентов ИИ: см. MarkItDown-MCP.
В данный момент поддерживаются следующие форматы:
PDF
PowerPoint
Word
Excel
Изображения (экспортируются EXIF-метаданные и работает OCR)
Звук (экспортируются EXIF-метаданные и осуществляется распознавание речи)
HTML
Текстовые форматы (CSV, JSON, XML)
ZIP-файлы (перебор содержимого)
URL-адреса Youtube
EPub
и др.
Работает командой из консоли вроде такой:
markitdown path-to-file.pdf
Также на входе принимает URL:
markitdown = MarkItDown()
result = markitdown.convert_uri("file:///path/to/file.txt")
print(result.markdown)
Со всех форматов файлов генерируется простой текстовый Markdown.
PereslavlFoto
При этом текст распознаётся очень плохо. Много ошибок с точками и запятыми, не всегда объединяется перенесённое слово. Чем надо исправлять и редактировать распознанный текст в файле PDF ?
Спасибо.
susbox
Попробуйте просто открыть PDF в Chrome - он автоматом распознаёт текст в PDF.