Обзор Docling от IBM: парсинг PDF для RAG, таблицы, OCR | AiManual
AiManual Logo Ai / Manual.
13 Июн 2026 Инструмент

Docling от IBM: как перестать ненавидеть PDF и построить локальный RAG

Установка, возможности, сравнение с PyMuPDF и Camelot. Примеры извлечения таблиц и текста. Когда Docling спасает enterprise-данные.

Реклама
partv2

Вы когда-нибудь скармливали RAG-системе PDF с таблицами и получали на выходе винегрет из цифр и букв? Я — да. Раз двадцать. И каждый раз хотелось выкинуть ноутбук в окно. Потому что стандартные инструменты вроде PyMuPDF просто выдёргивают строки, не понимая, где заканчивается колонка и начинается примечание. А уж таблицы — это отдельный цирк.

В 2025 году IBM Research выкатила Docling — open-source библиотеку под MIT лицензией, которая парсит PDF как человек: видит структуру, различает заголовки, таблицы, подписи, да ещё и OCR умеет. На середину 2026 года это, пожалуй, самый удобный локальный инструмент для подготовки документов к RAG. Давайте разберёмся, почему он переворачивает игру.

Что под капотом: не просто текст, а структура

Большинство парсеров работают с текстовым слоем PDF — координаты символов, шрифты, кодировки. И плевать они хотели на то, что слева колонка, а справа — сноска. Docling идёт другим путём: он сначала строит layout-анализ всего документа, используя глубокую нейронную сетку DocLayNet (обучена на 100k+ страниц), а для таблиц — отдельную модель TableFormer.

Что это даёт на практике:

  • Текст из двухколоночных статей склеивается правильно — сначала вся левая колонка, потом правая.
  • Таблицы превращаются не в кашу, а в структурированный Markdown или JSON.
  • Картинки с текстом (скан-копии, факсы) обрабатываются через встроенный OCR на базе EasyOCR.
  • Результат можно сохранить как Markdown, HTML, JSON, DOCX — хоть сразу в векторную БД класть.

И всё это локально, без отправки данных в облако. Для enterprise-задач с NDA и медицинскими документами — просто манна небесная.

Если вы не сталкивались с проблемами парсинга многостраничных PDF, рекомендую почитать отдельный разбор в статье «Глубокий парсинг PDF для RAG: как извлекать текст из многостраничных документов без потери качества» — там показано, как обычный PyMuPDF ломается на двух колонках.

Дуэль парсеров: Docling против старых-добрых инструментов

Давайте честно: у каждого инструмента своя ниша. Вот сравнение на живых примерах — таблица с тестом на файле с отчётом (14 страниц, 3 сложные таблицы, 2 скана).

Инструмент Текст (2 колонки) Таблицы OCR Скорость (14 стр.)
PyMuPDF Каша Плохо Нет 0.2 с
Camelot (Lattice) Нормально Хорошо (с линиями) Нет 3 с
MinerU (Diffusion OCR) Хорошо Средне Да (быстрый) 1.5 с
Docling Отлично Отлично (TableFormer) Да (EasyOCR) 4 с

Docling проигрывает по скорости, но выигрывает по качеству — особенно на таблицах без чётких линий (Stream, Stream+TableFormer). В нашем тесте Camelot захлебнулся на таблице с объединёнными ячейками, а Docling отрисовал её идеально.

Подробное сравнение с Camelot и способами обхода через OCR мы разбирали в статье «Как парсить 500-страничные PDF с таблицами для RAG: Camelot против Docling и черный ход через OCR» — там показано, как Docling спасает, когда Camelot пасует.

Установка: четыре команды и ты в игре

Ставьте Python 3.10–3.12 (с 3.13 пока бывают нюансы). Docling активно обновляется, на июнь 2026 актуальна версия 2.18. Установка:

pip install docling
# Если нужен OCR:
pip install "docling[ocr]"
# Или всё сразу:
pip install "docling[all]"

Первая загрузка моделей может занять пару минут — библиотека скачает веса DocLayNet и TableFormer (около 500 МБ). Дальше всё кэшируется.

Внимание: на Windows может потребоваться установка Visual C++ Redistributable. На macOS с чипом M — работает из коробки, без CUDA.

Код: парсим PDF и извлекаем таблицы

Вот минимальный рабочий скрипт — он открывает PDF, распознаёт структуру, сохраняет в Markdown и JSON.

from docling.document_converter import DocumentConverter

converter = DocumentConverter()
result = converter.convert("отчёт.pdf")

# Сохраняем в Markdown
result.document.save_as_markdown("отчёт.md")
# В JSON с полной структурой
result.document.save_as_json("отчёт.json")

# А если хотим только текст — чистим от мусора
text = result.document.export_to_text()
print(text[:500])

Заметьте: не нужно вручную указывать layout-правила — модель сама определяет заголовки, списки, абзацы. Для таблиц отдельная магия:

# Таблицы автоматически парсятся TableFormer
for table in result.document.tables:
    # Каждая таблица — это объект с .data (DataFrame), .markdown, .html
    df = table.export_to_dataframe()
    print(df.head())
    # Или в Markdown
    print(table.export_to_markdown())

Если в PDF есть сканы или картинки с текстом — просто включите OCR:

from docling.datamodel.pipeline_options import PipelineOptions

opts = PipelineOptions(do_ocr=True, ocr_lang="rus+eng")
converter = DocumentConverter(pipeline_options=opts)
result = converter.convert("скан.pdf")

Важно: OCR замедляет процесс примерно в 3-4 раза, но для плохих сканов это единственный выход. Если у вас есть GPU (NVIDIA с CUDA), можно включить ускорение — параметром device="cuda".

Как скормить Docling в RAG-пайплайн

Самый простой способ — сохранить результат в Markdown, а потом нарезать chunk-и (например, по заголовкам). Docling даёт семантическую структуру: заголовки, таблицы, списки. Это идеальный вход для RAG, потому что чанки получаются осмысленными.

Я тестировал связку: Docling → LangChain — и это работает без костылей. Парсим документ, конвертируем в Markdown, разбиваем по `##` заголовкам, делаем эмбеддинги. В статье «RAG на ноутбуке: от PDF до Qwen3:8B без LangChain и API» показан похожий пайплайн — там как раз используется семантический чанкинг.

💡
Для больших документов (100+ страниц) рекомендую стратегию, описанную в «Как обрабатывать длинные PDF-документы (130+ страниц) в Docling: стратегии чанкинга и оптимизации» — там показано, как не упасть по памяти и не потерять контекст.

Кому это нужно (и кому — нет)

Docling — это не silver bullet. Давайте честно:

  • Берите, если: у вас сложные PDF с вёрсткой, таблицами, сканами; важна приватность данных; нужно интегрировать в RAG-пайплайн; вы готовы потратить 5–10 секунд на страницу ради качества.
  • Не берите, если: PDF — это просто текст без таблиц (тогда PyMuPDF быстрее); нужен массовый парсинг миллионов документов (тут лучше MinerU с diffusion OCR); вы работаете с PDF/A, где нет текстового слоя (OCR всё равно нужен).

Для enterprise-задач, где данные нельзя выгружать в облачные сервисы вроде Adobe Extract или LlamaParse, Docling — это подарок. Вы полностью контролируете процесс, и код открыт.

А что дальше?

На горизонте — Docling 3.0 с нативной поддержкой GPU (уже в бета-тесте) и новым детектором таблиц на базе YOLO. IBM активно инвестирует в парсинг, потому что это узкое горлышко любого RAG. Думаю, к концу 2026 года Docling станет стандартом де-факто для локальной обработки документов.

Если вы до сих пор мучаете PyMuPDF — попробуйте Docling на одном файле. Увидите разницу сразу. А если уже используете — напишите в комментариях, как справляетесь с таблицами без линий. Мне интересно.

Подписаться на канал