Как исправить ошибку при использовании Docling для конвертации PDF?
Я пытаюсь использовать библиотеку Docling для конвертации PDF документа в Markdown, но получаю ошибку. Код, который я запускаю, основан на официальной документации:
from docling.document_converter import DocumentConverter
source = "https://arxiv.org/pdf/2408.09869"
converter = DocumentConverter()
result = converter.convert(source)
print(result.document.export_to_markdown())
Однако при выполнении этого кода возникает следующая ошибка:
Traceback (most recent call last):
File "C:\Users\Макс\Desktop\VS Code Projects\RAG\.venv\Lib\site-packages\docling\datamodel\document.py", line 171, in __init__
self._init_doc(backend, path_or_stream)
~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\Макс\Desktop\VS Code Projects\RAG\.venv\Lib\site-packages\docling\datamodel\document.py", line 215, in _init_doc
self._backend = backend(self, path_or_stream=path_or_stream)
~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\Макс\Desktop\VS Code Projects\RAG\.venv\Lib\site-packages\docling\backend\docling_parse_v4_backend.py", line 206, in __init__
self.parser = DoclingPdfParser(loglevel="fatal")
~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^
File "C:\Users\Макс\Desktop\VS Code Projects\RAG\.venv\Lib\site-packages\docling_parse\pdf_parser.py", line 579, in __init__
self.parser = pdf_parser_v2(level=loglevel)
~~~~~~~~~~~~~^^^^^^^^^^^^^^^^
RuntimeError: filename does not exists: C:\Users\Макс\Desktop\VS Code Projects\RAG\.venv\Lib\site-packages\docling_parse\pdf_resources_v2/glyphs//standard/additional.dat
2025-10-28 20:18:53,881 - INFO - Going to convert document batch...
Traceback (most recent call last):
File "C:\Users\Макс\Desktop\VS Code Projects\RAG\docling_test\docling1.py", line 10, in <module>
result = converter.convert(source)
File "C:\Users\Макс\Desktop\VS Code Projects\RAG\.venv\Lib\site-packages\pydantic\_internal\_validate_call.py", line 39, in wrapper_function
return wrapper(*args, **kwargs)
File "C:\Users\Макс\Desktop\VS Code Projects\RAG\.venv\Lib\site-packages\pydantic\_internal\_validate_call.py", line 136, in __call__
res = self.__pydantic_validator__.validate_python(pydantic_core.ArgsKwargs(args, kwargs))
File "C:\Users\Макс\Desktop\VS Code Projects\RAG\.venv\Lib\site-packages\docling\document_converter.py", line 237, in convert
return next(all_res)
File "C:\Users\Макс\Desktop\VS Code Projects\RAG\.venv\Lib\site-packages\docling\document_converter.py", line 260, in convert_all
for conv_res in conv_res_iter:
^^^^^^^^^^^^^
File "C:\Users\Макс\Desktop\VS Code Projects\RAG\.venv\Lib\site-packages\docling\document_converter.py", line 332, in _convert
for item in map(
~~~^
process_func,
^^^^^^^^^^^^^
input_batch,
^^^^^^^^^^^^
):
^
File "C:\Users\Макс\Desktop\VS Code Projects\RAG\.venv\Lib\site-packages\docling\document_converter.py", line 379, in _process_document
conv_res = self._execute_pipeline(in_doc, raises_on_error=raises_on_error)
File "C:\Users\Макс\Desktop\VS Code Projects\RAG\.venv\Lib\site-packages\docling\document_converter.py", line 415, in _execute_pipeline
raise ConversionError(f"Input document {in_doc.file} is not valid.")
docling.exceptions.ConversionError: Input document 2408.09869v5.pdf is not valid.
-> Cannot close object, library is destroyed. This may cause a memory leak!
Интересно, что тот же код успешно выполняется на другом компьютере. В чем может быть проблема и как ее исправить?
Детали проблемы:
- Библиотека: Docling
- Операция: Конвертация PDF в Markdown
- Ошибка:
RuntimeError: filename does not existsиConversionError: Input document is not valid - Контекст: Код работает на одном компьютере, но не работает на другом
Возможные причины:
- Проблема с установкой или конфигурацией Docling
- Отсутствие необходимых ресурсов или файлов
- Конфликт версий библиотек
- Проблемы с правами доступа к файлам
Ошибка RuntimeError: filename does not exists: C:\Users\Макс\Desktop\VS Code Projects\RAG\.venv\Lib\site-packages\docling_parse\pdf_resources_v2/glyphs//standard/additional.dat при использовании Docling для конвертации PDF является распространенной проблемой, связанной с отсутствием необходимых ресурсов модели. Эта ошибка возникает, когда Docling пытается загрузить или найти требуемые файлы для обработки PDF, но они отсутствуют в системе.
Содержание
- Основные причины ошибки
- Способы решения проблемы
- Проверка и обновление зависимостей
- Настройка офлайн-режима работы
- Альтернативные подходы к конвертации
- Проверка совместимости версий
- Заключение
Основные причины ошибки
Ошибка возникает из-за отсутствия необходимых файлов ресурсов в директории pdf_resources_v2. Согласно исследованиям, основные причины включают:
-
Неполная установка модели: Docling требует загрузки дополнительных ресурсов при первом запуске, но процесс может прерваться из-за сетевых проблем или ограничений.
-
Ограничения доступа: В некоторых корпоративных сетях или на серверах с ограниченным интернет-доступом может блокироваться загрузка моделей из Hugging Face Hub.
-
Конфликт версий: Несовместимость между версиями Docling, docling-parse и другими зависимостями может приводить к проблемам с загрузкой ресурсов.
-
Проблемы с правами доступа: Файлы ресурсов могут отсутствовать из-за проблем с правами записи в директорию установки.
Способы решения проблемы
1. Ручная загрузка моделей
Самый надежный способ - вручную скачать необходимые модели:
import os
from pathlib import Path
# Создайте директорию для моделей, если она не существует
models_dir = Path.home() / ".cache" / "docling" / "models"
models_dir.mkdir(parents=True, exist_ok=True)
# Установите переменную окружения для использования локальных моделей
os.environ["DOCLING_MODELS_PATH"] = str(models_dir)
Затем используйте команду для скачивания моделей:
docling-tools models download rapidocr
2. Переустановка Docling с очисткой
Полная переустановка с очисткой кэша может решить проблему:
# Удалите существующую установку
pip uninstall docling docling-parse -y
# Очистите кэш
pip cache purge
# Установите последнюю версию
pip install docling[rapidocr]
3. Использование альтернативного бэкенда
Попробуйте использовать другой бэкенд обработки PDF:
from docling.document_converter import DocumentConverter
from docling.pipeline import PdfPipeline
# Используйте стандартный бэкенд вместо VLM
converter = DocumentConverter(
pipeline=PdfPipeline(
ocr=..., # настройки OCR
backend="standard" # вместо VLM
)
)
source = "https://arxiv.org/pdf/2408.09869"
result = converter.convert(source)
print(result.document.export_to_markdown())
Проверка и обновление зависимостей
Убедитесь, что все зависимости обновлены до совместимых версий:
pip list | grep -E "(docling|torch|numpy)"
# Обновите основные зависимости
pip install --upgrade torch numpy
pip install --upgrade docling docling-parse
Важно: Как указано в исследованиях, существуют проблемы совместимости между версиями PyTorch и NumPy. Убедитесь, что у вас установлена совместимая комбинация.
Настройка офлайн-режима работы
Если вы работаете в среде без доступа к интернету, вам нужно заранее скачать все необходимые модели:
- Скачайте модели на машине с интернетом:
# Создайте временную директорию для моделей
mkdir -p ~/docling_models_offline
export DOCLING_MODELS_PATH=~/docling_models_offline
# Скачайте все необходимые модели
docling-tools models download rapidocr
docling-tools models download docling-parse
- Перенесите модели на целевую машину и установите переменную окружения:
import os
os.environ["DOCLING_MODELS_PATH"] = "/path/to/your/models"
- Запустите Docling с правильно настроенным путем к моделям.
Альтернативные подходы к конвертации
1. Использование Docker-контейнера
Docker-контейнер может решить проблемы с зависимостями и путями к моделям:
# Создайте Dockerfile
FROM python:3.11-slim
# Установите Docling и скачайте модели
RUN pip install docling[rapidocr] && \
docling-tools models download rapidocr
# Запустите конвертацию
RUN python -c "
from docling.document_converter import DocumentConverter
converter = DocumentConverter()
result = converter.convert('https://arxiv.org/pdf/2408.09869')
print(result.document.export_to_markdown())
"
2. Конвертация через CLI
Попробуйте использовать Command Line Interface:
docling convert https://arxiv.org/pdf/2408.09869 output.md
3. Использование альтернативных библиотек
Если проблема не решается, рассмотрите альтернативные подходы:
# Альтернатива: pdf2image + OCR
from pdf2image import convert_from_path
import pytesseract
# Конвертируем PDF в изображения
images = convert_from_path("document.pdf")
# Обрабатываем каждое изображение
for i, image in enumerate(images):
text = pytesseract.image_to_string(image, lang='rus+eng')
print(f"Страница {i+1}: {text}")
Проверка совместимости версий
Проверьте совместимость версий компонентов:
| Компонент | Рекомендуемая версия | Минимальная версия |
|---|---|---|
| Docling | 2.3+ | 2.0+ |
| docling-parse | Последняя | 1.0+ |
| PyTorch | 2.2.2+ | 2.0+ |
| NumPy | 2.0+ | 1.21+ |
Чтобы проверить совместимость, выполните:
import sys
import pkg_resources
# Проверка совместимости версий
required_packages = [
'docling>=2.3',
'docling-parse>=1.0',
'torch>=2.0',
'numpy>=1.21'
]
for package in required_packages:
try:
pkg_resources.require(package)
print(f"✓ {package} установлен")
except pkg_resources.DistributionNotFound:
print(f"✗ {package} не найден")
except pkg_resources.VersionConflict:
print(f"✗ Конфликт версий для {package}")
Заключение
Ошибка RuntimeError: filename does not exists в Docling обычно связана с отсутствием необходимых ресурсов модели. Основные решения включают:
- Ручную загрузку моделей с помощью
docling-tools models download - Полную переустановку с очисткой кэша
- Настройку офлайн-режима для работы без интернета
- Использование альтернативных бэкендов или подходов
- Проверку совместимости версий всех зависимостей
Поскольку код успешно работает на одном компьютере, но не на другом, наиболее вероятной причиной являются различия в среде установки - либо неполная загрузка моделей, либо конфликты версий зависимостей. Рекомендуется начать с ручной загрузки моделей и проверки совместимости версий.
Источники
- Running docling offline with pre-downloaded models - GitHub Issue #232
- Installation - Docling Documentation
- Manual download of default models - GitHub Discussion #2089
docling-tools models download rapidocrnot actually being used by defaultDocumentConverter- Issue #2500- FAQ - Docling Documentation