Dolphin: open-source парсер, который идеально разбирает PDF
Парсинг документов — задача, которая звучит просто, но на деле оказывается десятым кругом ада. Попробуйте вытащить таблицу из PDF, не потеряв форматирование, или разобрать отсканированную научную статью со схемами и формулами. Обычно на выходе получается месиво, которое проще перепечатать вручную.
Недавно ByteDance выложили в open-source свой проект Dolphin — мультимодальную модель, которая обещает решить эти проблемы. Давайте разберёмся, что это за зверь, как он работает и чем может быть полезен.
Что такое Dolphin и зачем он нужен?
Если коротко, Dolphin — это инструмент, который следует парадигме «сначала проанализируй, потом распарси». В отличие от классических OCR-инструментов, которые просто распознают символы, Dolphin пытается понять структуру документа.
Он умеет отличать текстовые параграфы от таблиц, формулы от картинок, и, что самое важное, определяет естественный порядок чтения элементов на странице.
На выходе вы получаете не просто сырой текст, а структурированные данные в формате JSON или Markdown. Это значит, что вы можете программно работать с отдельными элементами документа, зная, что это — таблица, а вот это — подпись к картинке.
Такой подход открывает кучу возможностей: от автоматического импорта данных из счетов-фактур до создания архивов научных статей с сохранением всей разметки.
Как это работает под капотом?
Весь процесс разбит на два ключевых этапа:
1️⃣ Анализ макета страницы. Сначала модель «смотрит» на всю страницу целиком и генерирует последовательность элементов (текст, таблица, картинка и т.д.) в том порядке, в котором их читал бы человек.
2️⃣ Параллельный парсинг элементов. После того как структура ясна, Dolphin запускает параллельную обработку каждого элемента. Для разных типов контента (текст, таблицы, формулы) используются свои подходы («гетерогенные якоря» и «промты под конкретную задачу»).
Такое разделение позволяет, с одной стороны, точно понять сложный макет, а с другой — обеспечить высокую скорость работы за счёт распараллеливания.
Практическое применение: от страниц до отдельных таблиц
Разработчики предоставляют готовые скрипты для двух основных сценариев.
Парсинг целой страницы (Page-level)
Можно скормить модели изображение или, что более интересно, целый PDF-файл (включая многостраничные, поддержка которых появилась совсем недавно).
Пример запуска через Hugging Face:
# Установка зависимостей git clone https://github.com/ByteDance/Dolphin.git cd Dolphin pip install -r requirements.txt # Загрузка модели git lfs install git clone https://huggingface.co/ByteDance/Dolphin ./hf_model # Запуск парсинга PDF-файла python demo_page_hf.py --model_path ./hf_model --input_path ./demo/page_imgs/page_6.pdf --save_dir ./results
Парсинг отдельного элемента (Element-level)
Не менее полезная фича — возможность вырезать из документа только один элемент (например, таблицу) и распарсить только его.
# Парсим только изображение с таблицей python demo_element_hf.py --model_path ./hf_model --input_path ./demo/element_imgs/table_1.jpeg --element_type table