Вы когда-нибудь скармливали 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» показан похожий пайплайн — там как раз используется семантический чанкинг.
Кому это нужно (и кому — нет)
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 на одном файле. Увидите разницу сразу. А если уже используете — напишите в комментариях, как справляетесь с таблицами без линий. Мне интересно.