MAATRIX / Блог / Docling на VPS: извлекаем текст и таблицы из PDF для базы знаний

Docling на VPS: извлекаем текст и таблицы из PDF для базы знаний

MAATRIX · 17 октября 2026 · 8 мин чтения

В PDF всё выглядит образцово: заголовки крупнее основного текста, таблица аккуратно разбита на столбцы, примечание находится под нужной строкой. После обычного извлечения текста получается другое произведение. Цена от одного товара соединяется с названием другого, колонки читаются попеременно, а колонтитул повторяется посреди каждого абзаца.

Для человека страница — изображение с понятной композицией. Для поисковой системы и ИИ-помощника нужны структура и последовательность. Docling помогает разобрать документ, сохранить его элементы и подготовить материал для дальнейшего поиска. Но качество извлечения надо проверять до загрузки в базу знаний: нейросеть охотно перескажет ошибочно прочитанную таблицу и даже не покраснеет.

Свой обработчик документов на VPS

Испытайте Docling на VPS MAATRIX с 4 vCPU и 8 GB RAM. Подбирайте ресурсы по своим PDF, учитывая модели, временные файлы и параллельную обработку.

Подобрать VPS под задачу

Определяем, какой документ перед нами

Начните с трёх небольших файлов: обычного PDF с текстовым слоем, скана и документа со сложной таблицей. Используйте собственные материалы без чувствительных сведений. Эти три образца покажут больше, чем один красиво подготовленный рекламный буклет.

В текстовом PDF символы уже есть внутри файла, но порядок их извлечения может отличаться от порядка чтения. В скане текст сначала нужно распознать. Таблица требует восстановить связь ячеек со строками и заголовками. При этом один файл способен сочетать все три случая: основная часть текстовая, приложение отсканировано, а подпись добавлена картинкой.

Docling поддерживает анализ структуры страниц, распознавание и экспорт в несколько форматов. Возможности и ограничения выбранного конвейера описаны в репозитории проекта. Не включайте сразу самые тяжёлые модели ради короткой инструкции из пяти страниц. Сначала проверьте обычный путь обработки и найдите конкретные места, где его качества недостаточно.

Для каждого образца заранее запишите контрольные факты: название раздела, два значения из таблицы, текст примечания и место перехода между колонками. Так у проверки появится измеримый смысл. «Похоже на нормальный текст» — слишком мягкий критерий для базы, из которой потом будут брать цены и условия.

Установка в отдельное окружение

На VPS подготовьте поддерживаемый Python и виртуальное окружение. Например, Ubuntu 24.04 позволяет начать с системного Python, предварительно проверив совместимость выбранного выпуска Docling. Пакеты ставьте в отдельную среду приложения:

python3 -m venv .venv
. .venv/bin/activate
python -m pip install docling

Конкретные требования и варианты установки сверяйте с официальной инструкцией. При первом запуске выбранный конвейер может загружать модели. Учтите сетевой доступ и место для кеша. Для закрытого окружения необходимые артефакты готовят заранее; само размещение программы на VPS не означает, что любой вариант конфигурации автоматически работает без внешних обращений.

Создайте отдельные папки для исходников, результатов и временных файлов. Приложению не нужен доступ ко всему домашнему каталогу администратора. Исходные документы сохраняйте неизменными: при смене версии модели или настроек их можно будет обработать заново и сравнить результат.

После первого успешного преобразования зафиксируйте версии установленных библиотек и параметры обработки. Для результатов храните эту информацию в небольшом манифесте. Через несколько месяцев вопрос «почему тот же PDF дал другой текст» станет значительно легче, если известна точная версия конвейера.

Первый документ: короткая программа

Положите учебный файл под именем sample.pdf рядом со скриптом convert_document.py. Код ниже преобразует его в Markdown и сохраняет результат в отдельную папку:

from pathlib import Path
from docling.document_converter import DocumentConverter

source = Path("sample.pdf")
output = Path("result")
output.mkdir(exist_ok=True)

converter = DocumentConverter()
result = converter.convert(str(source))
document = result.document

(output / "sample.md").write_text(
    document.export_to_markdown(),
    encoding="utf-8",
)
print("Результат сохранён в result/sample.md")

Запустите python convert_document.py. Первый запуск может отличаться по времени от следующих из-за подготовки моделей и кеша. Не записывайте его продолжительность как среднюю скорость системы. Сначала дождитесь завершения и проверьте журнал на ошибки или частично обработанные элементы.

Откройте Markdown рядом с исходным PDF. Сравните заголовки, порядок колонок, таблицы и примечания. Если документ содержит изображения со значимым текстом, проверьте, попало ли их содержимое в результат выбранного конвейера. Извлечение текста и подробное описание рисунка — разные задачи; нельзя считать отсутствие описания диаграммы доказательством того, что в ней нет полезных данных.

Таблица заслуживает отдельного разговора

У таблиц есть неприятная особенность: ошибочная структура может выглядеть убедительно. Одна сдвинутая строка превращает минимальную цену в максимальную, а объединённая ячейка теряет связь с несколькими позициями. Поэтому сравните угловые ячейки, заголовки, единицы измерения и несколько строк из середины.

Для дальнейшей обработки используйте структурированное представление документа и доступные методы экспорта элементов в выбранной версии Docling. Markdown удобен для просмотра, но не всегда сохраняет всю информацию сложной таблицы. Если нужны координаты, связи элементов и происхождение фрагментов, храните структурированный результат вместе с читабельной версией.

Не отделяйте таблицу от её названия, единиц измерения и сносок. Значение «120» без заголовка может означать рубли, дни, килограммы или количество пользователей, которых никто не измерял. При подготовке фрагментов для поиска включайте необходимый контекст рядом с таблицей.

Если распознавание неоднозначно, отправляйте документ в очередь ручной проверки. Не исправляйте подозрительные цифры с помощью просьбы к модели «догадаться по смыслу». Для коммерческого предложения такая догадка слишком дорого стоит. В базе знаний лучше пометить неполную таблицу и дать ссылку на оригинал.

Нужен сервер под эту задачу?

Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK, США и РФ. Оплата картой РФ и по СБП.

АРЕНДОВАТЬ СЕРВЕР

Из распознанного текста в полезную базу знаний

Сохраните у каждого документа устойчивый идентификатор, контрольную сумму исходного файла, версию, дату обработки и права доступа. Для фрагмента добавьте идентификатор документа и сведения о его месте в источнике, если они доступны в выбранном экспорте. Тогда ответ помощника сможет вести читателя к проверяемому оригиналу.

Делите материал по смысловым границам: раздел, пункт инструкции, таблица с пояснениями. Слепая нарезка через одинаковое число символов часто отделяет вопрос от ответа или заголовок от условий. Сам подход к размерам фрагментов подробно разобран в материале о чанкинге документов.

Индексируйте сначала небольшой набор и задайте контрольные вопросы, подготовленные до обработки. Смотрите, нашёлся ли нужный фрагмент, сохранилось ли значение и указана ли правильная версия документа. Если поиск достал неверную строку, изменение промпта ответа может лишь замаскировать проблему.

Удаление источника должно удалять или исключать из поиска связанные фрагменты. Новую редакцию документа удобно обрабатывать отдельно и переключать в выдачу после проверки. Простое добавление свежего файла рядом со старым создаёт соревнование двух версий, в котором поисковая близость не обязана выбрать актуальную.

Обработка папки без приключений

Для регулярного потока добавьте очередь заданий. Записывайте состояние каждого файла: получен, проверен, обрабатывается, готов, требует внимания. Идентификатор на основе контрольной суммы поможет не распознавать один и тот же документ снова после повторной загрузки.

Ограничьте размер файла, число страниц, длительность обработки и количество параллельных исполнителей. Повреждённый или необычно большой документ не должен занять весь сервер. Временные результаты храните отдельно и удаляйте по понятному правилу после завершения или ошибки.

Проверяйте расширение и реальный формат, запускайте обработчик под ограниченным пользователем. Если принимаете ссылки, не разрешайте произвольному посетителю заставлять сервер обращаться к внутренним сетевым адресам. Для первого сервиса загрузка файла через контролируемую форму проще, чем универсальный загрузчик любого URL.

Отдельно продумайте имена результатов. Два файла document.pdf от разных пользователей должны получить разные внутренние каталоги. В журнал достаточно записывать идентификатор, длительность, состояние и причину ошибки; полный текст документа часто не нужен и создаёт лишнюю копию чувствительных сведений.

Перед обновлением Docling повторно обработайте ту же контрольную выборку в отдельной папке. Сравните результаты по значимым полям, а не только по размеру файла. Новая модель может лучше читать абзацы, но иначе распознавать объединённые ячейки именно ваших таблиц. Сохраните прежнюю конфигурацию до приёмки нового результата. Если меняется структура экспорта, сначала проверьте потребителя этого формата: конвертер и загрузчик базы знаний должны понимать друг друга после обновления.

Какой VPS выбрать и что измерять

Для пилота с последовательной обработкой PDF стоит рассмотреть MAATRIX Heka Standard: 4 vCPU, 8 GB памяти и 160 GB диска. Сканирование, крупные страницы, тяжёлые модели и параллельные задания могут потребовать Maat Pro с 16 GB или иной конфигурации. Это ориентиры для испытания, а не результаты проведённого бенчмарка.

Соберите свою небольшую выборку: короткий текстовый PDF, длинная инструкция, скан и таблицы. Для каждого запишите количество страниц, время первого и повторного запуска, пиковую память и найденные ошибки. Затем оцените, успевает ли очередь обработать дневной объём за доступное время.

Диск расходуют исходники, модели, структурированные результаты, картинки, временные файлы и резервные копии. Считайте их отдельно. При внешних моделях добавляется стоимость API; при локальных тяжёлых моделях обычный CPU VPS не заменяет GPU автоматически.

На VPS MAATRIX можно разместить собственный обработчик документов и связать его с поиском или n8n. Начните с нескольких проверенных образцов. Хорошая база знаний появляется в тот момент, когда извлечённые цифры и связи выдерживают сверку с оригиналом, а не когда векторное хранилище торжественно сообщает о тысячах загруженных фрагментов.

Нужен сервер под эту задачу?

Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK, США и РФ. Оплата картой РФ и по СБП.

АРЕНДОВАТЬ СЕРВЕР

Обсудить статью, задать вопрос или начать новую тему

Есть вопрос по этой статье, идея для обсуждения или просто хотите поделиться опытом? Сообщество MAATRIX ждёт. Для общения, пожалуйста, зарегистрируйтесь в нашем личном кабинете.

Перейти в сообщество →