![OCRmyPDF выравнивает и оптимизирует PDF-файлы вместе с распознаванием текста](https://habrastorage.org/webt/kl/8n/6-/kl8n6-3guer3dcvhkxsqcjmxlby.jpeg) При сканировании и сохранении в формате PDF зачастую документы сохраняются в виде графических изображений. Это неудобно, потому что делает невозможным полнотекстовый поиск по содержанию. Утилита [OCRmyPDF](https://github.com/ocrmypdf/OCRmyPDF) решает эту проблему: она одной командой из консоли добавляет к PDF-документу слой OCR с распознанным текстом. Ниже упомянуты ещё несколько полезных инструментов для парсинга PDF, в том числе для преобразования сложных математических PDF-документов в текстовый формат Markdown. *** # OCRmyPDF Распознанный текст в OCR-слое можно выделить и скопировать в другой документ, и по нему легко проводить полнотекстовый поиск. Установка стандартной командой из пакетного менеджера: ```bash apt install ocrmypdf ``` В Windows устанавливается в подсистеме WSL. Запуск из консоли: ![](https://habrastorage.org/webt/qa/tc/o-/qatco-lc-op7y82l-pftjuxjyqg.gif) Основные функции: * Из обычного PDF создаёт файл PDF/A с возможностью поиска * Размещает текст OCR точно под изображением, чтобы упростить копирование * Сохраняет точное разрешение оригинальных встроенных изображений * По возможности вставляет OCR-информацию, не затрагивая другой контент * Оптимизирует PDF-изображения, создавая файлы меньшего размера, чем исходный * По запросу выравнивает и/или очищает изображение перед распознаванием текста * Проверяет входные и выходные файлы * Распределяет работу между всеми ядрами CPU * Использует опенсорсный движок [Tesseract OCR](https://github.com/tesseract-ocr/tesseract) для распознавания более 100 языков * Сохраняет конфиденциальность данных, поскольку работает локально и ничего не отправляет на удалённый сервер * Возможна обработка больших файлов на тысячи страниц Дополнительные параметры при запуске: ```bash 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](https://github.com/ocrmypdf/OCRmyPDF) автор пишет, что надёжность работы программы проверена на миллионах файлов. Подробнее технические детали см. в [документации](https://ocrmypdf.readthedocs.io/en/latest/). # Слои PDF Из других полезных инструментов для работы со слоями PDF можно назвать [PDFSyntax](https://github.com/desgeeko/pdfsyntax/blob/main/docs/browse.md), это визуализация внутренней структуры PDF-файла. Визуализация в виде статического HTML. Инструмент можно попробовать в [онлайн-демо](https://pdfsyntax.dev/simple_text_string.html), вот как выглядит парсинг (частичный скриншот): ![](https://habrastorage.org/webt/7q/6s/dn/7q6sdnujyma9yugtxrlg6larsca.png) Конкретно эта выдача соответствует документу [Simple Text String](https://github.com/desgeeko/pdfsyntax/raw/main/samples/simple_text_string.pdf) из спецификации PDF. Вообще, такой парсинг PDF перед открытием является хорошей антивирусной защитой. Он позволяет проверить документ на наличие скрытых объектов, которые могут пройти незамеченными через антивирусные сканеры. В последнее время эффективной является тактика [составления персонализированных писем с помощью LLM](https://habr.com/ru/companies/globalsign/articles/910420/) и приложение к ним инфицированных PDF-отчётов с использованием 0day-уязвимостей, которые проходят через антивирусные сканеры. Если в PDF-файле нет слоя с простым текстом, а только изображения JPEG, то можно использовать OCR-распознавание с помощью инструмента OCRmyPDF, упомянутого выше. # Из PDF в Markdown Преобразование PDF в текст можно произвести с помощью LLM или программных инструментов, которые интегрируют протокол MCP (Model Context Protocol) и используют LLM для этой задачи. Например, есть программа PDFMathTranslate для перевода научных документов/статей с одного языка на другой с сохранением форматирования [онлайн-демо](https://pdf2zh.com/): ![](https://habrastorage.org/webt/eu/sc/cg/eusccglup4s7fvjiwep6docie-k.gif) Эта программа нуждается в LLM для работы, модель скачивается вместе с утилитой. Есть ещё легковесная питоновская утилита [MarkItDown](https://github.com/microsoft/markitdown) для конвертации разнообразных форматов в Markdown, недавно добавили поддержку MCP для агентов ИИ: см. [MarkItDown-MCP](https://github.com/microsoft/markitdown/tree/main/packages/markitdown-mcp). В данный момент поддерживаются следующие форматы: * PDF * PowerPoint * Word * Excel * Изображения (экспортируются EXIF-метаданные и работает OCR) * Звук (экспортируются EXIF-метаданные и осуществляется распознавание речи) * HTML * Текстовые форматы (CSV, JSON, XML) * ZIP-файлы (перебор содержимого) * URL-адреса Youtube * EPub * и др. Работает командой из консоли вроде такой: ```bash markitdown path-to-file.pdf ``` Также на входе принимает URL: ```python markitdown = MarkItDown() result = markitdown.convert_uri("file:///path/to/file.txt") print(result.markdown) ``` Со всех форматов файлов генерируется простой текстовый Markdown.