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

Основные функции:
Из обычного PDF создаёт файл PDF/A [2] с возможностью поиска
Размещает текст OCR точно под изображением, чтобы упростить копирование
Сохраняет точное разрешение оригинальных встроенных изображений
По возможности вставляет OCR-информацию, не затрагивая другой контент
Оптимизирует PDF-изображения, создавая файлы меньшего размера, чем исходный
По запросу выравнивает и/или очищает изображение перед распознаванием текста
Проверяет входные и выходные файлы
Распределяет работу между всеми ядрами CPU
Использует опенсорсный движок Tesseract OCR [3] для распознавания более 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 [1] автор пишет, что надёжность работы программы проверена на миллионах файлов.
Подробнее технические детали см. в документации [4].
Из других полезных инструментов для работы со слоями PDF можно назвать PDFSyntax [5], это визуализация внутренней структуры PDF-файла. Визуализация в виде статического HTML. Инструмент можно попробовать в онлайн-демо [6], вот как выглядит парсинг (частичный скриншот):

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

Эта программа нуждается в LLM для работы, модель скачивается вместе с утилитой.
Есть ещё легковесная питоновская утилита MarkItDown [11] для конвертации разнообразных форматов в Markdown, недавно добавили поддержку MCP для агентов ИИ: см. MarkItDown-MCP [12].
В данный момент поддерживаются следующие форматы:
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.
Автор: GlobalSign_admin
Источник [13]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/pdf/428990
Ссылки в тексте:
[1] OCRmyPDF: https://github.com/ocrmypdf/OCRmyPDF
[2] PDF/A: https://en.wikipedia.org/?title=PDF/A
[3] Tesseract OCR: https://github.com/tesseract-ocr/tesseract
[4] документации: https://ocrmypdf.readthedocs.io/en/latest/
[5] PDFSyntax: https://github.com/desgeeko/pdfsyntax/blob/main/docs/browse.md
[6] онлайн-демо: https://pdfsyntax.dev/simple_text_string.html
[7] Simple Text String: https://github.com/desgeeko/pdfsyntax/raw/main/samples/simple_text_string.pdf
[8] составления персонализированных писем с помощью LLM: https://habr.com/ru/companies/globalsign/articles/910420/
[9] PDFMathTranslate: https://github.com/Byaidu/PDFMathTranslate
[10] онлайн-демо: https://pdf2zh.com/
[11] MarkItDown: https://github.com/microsoft/markitdown
[12] MarkItDown-MCP: https://github.com/microsoft/markitdown/tree/main/packages/markitdown-mcp
[13] Источник: https://habr.com/ru/companies/globalsign/articles/940286/?utm_campaign=940286&utm_source=habrahabr&utm_medium=rss
Нажмите здесь для печати.