Перейти к основному содержимому

OCR и документы

Извлечение текста из PDF/сканов (pymupdf, marker-pdf).

Метаданные навыка​

ИсточникВстроенный (устанавливается по умолчанию)
Путьskills/productivity/ocr-and-documents
Версия2.3.0
АвторVibeOS
ЛицензияMIT
Платформыlinux, macos, windows
ТегиPDF, Documents, Research, Arxiv, Text-Extraction, OCR
Связанные навыкиpowerpoint

Справочник: полный SKILL.md​

к сведению

Ниже приведено полное описание навыка, которое VibeOS загружает при его активации. Агент видит эти инструкции, когда навык активен.

Извлечение PDF и документов

Для DOCX: используйте python-docx (парсит реальную структуру документа, гораздо лучше OCR). Для PPTX: см. навык powerpoint (использует python-pptx с полной поддержкой слайдов и заметок). Этот навык охватывает PDF и отсканированные документы.

Шаг 1: Доступен ли URL?​

Если у документа есть URL, всегда сначала пробуйте web_extract:

web_extract(urls=["https://arxiv.org/pdf/2402.03300"])
web_extract(urls=["https://example.com/report.pdf"])

Это обрабатывает преобразование PDF в Markdown через Firecrawl без локальных зависимостей.

Используйте локальное извлечение только в случаях: файл локальный, web_extract не сработал, или требуется пакетная обработка.

Шаг 2: Выбор локального экстрактора​

Возможностьpymupdf (~25 МБ)marker-pdf (~3-5 ГБ)
Текстовый PDF✅✅
Сканированный PDF (OCR)❌✅ (90+ языков)
Таблицы✅ (базово)✅ (высокая точность)
Уравнения / LaTeX❌✅
Блоки кода❌✅
Формы❌✅
Удаление колонтитулов❌✅
Определение порядка чтения❌✅
Извлечение изображений✅ (встроенные)✅ (с контекстом)
Изображения → текст (OCR)❌✅
EPUB✅✅
Вывод в Markdown✅ (через pymupdf4llm)✅ (нативный, выше качество)
Размер установки~25 МБ~3-5 ГБ (PyTorch + модели)
СкоростьМгновенно~1-14 с/стр (CPU), ~0.2 с/стр (GPU)

Решение: Используйте pymupdf, если не нужны OCR, уравнения, формы или сложный анализ макета.

Если пользователю нужны возможности marker, но в системе не хватает ~5 ГБ свободного места:

«Для этого документа требуется OCR/расширенное извлечение (marker-pdf), для которого нужно ~5 ГБ для PyTorch и моделей. В вашей системе свободно [X] ГБ. Варианты: освободить место, указать URL для использования web_extract, или я могу попробовать pymupdf — он работает с текстовыми PDF, но не подходит для сканов или уравнений.»


pymupdf (лёгкий)​

pip install pymupdf pymupdf4llm

Через вспомогательный скрипт:

python scripts/extract_pymupdf.py document.pdf              # Простой текст
python scripts/extract_pymupdf.py document.pdf --markdown # Markdown
python scripts/extract_pymupdf.py document.pdf --tables # Таблицы
python scripts/extract_pymupdf.py document.pdf --images out/ # Извлечение изображений
python scripts/extract_pymupdf.py document.pdf --metadata # Название, автор, страницы
python scripts/extract_pymupdf.py document.pdf --pages 0-4 # Конкретные страницы

Встроенный код:

python3 -c "
import pymupdf
doc = pymupdf.open('document.pdf')
for page in doc:
print(page.get_text())
"

marker-pdf (высококачественное OCR)​

# Сначала проверьте свободное место на диске
python scripts/extract_marker.py --check

pip install marker-pdf

Через вспомогательный скрипт:

python scripts/extract_marker.py document.pdf                # Markdown
python scripts/extract_marker.py document.pdf --json # JSON с метаданными
python scripts/extract_marker.py document.pdf --output_dir out/ # Сохранение изображений
python scripts/extract_marker.py scanned.pdf # Сканированный PDF (OCR)
python scripts/extract_marker.py document.pdf --use_llm # Повышенная точность через LLM

CLI (устанавливается с marker-pdf):

marker_single document.pdf --output_dir ./output
marker /path/to/folder --workers 4 # Пакетная обработка

Статьи Arxiv​

# Только аннотация (быстро)
web_extract(urls=["https://arxiv.org/abs/2402.03300"])

# Полная статья
web_extract(urls=["https://arxiv.org/pdf/2402.03300"])

# Поиск
web_search(query="arxiv GRPO reinforcement learning 2026")

Разделение, объединение и поиск​

pymupdf обрабатывает это нативно — используйте execute_code или встроенный Python:

# Разделение: извлечение страниц 1-5 в новый PDF
import pymupdf
doc = pymupdf.open("report.pdf")
new = pymupdf.open()
for i in range(5):
new.insert_pdf(doc, from_page=i, to_page=i)
new.save("pages_1-5.pdf")
# Объединение нескольких PDF
import pymupdf
result = pymupdf.open()
for path in ["a.pdf", "b.pdf", "c.pdf"]:
result.insert_pdf(pymupdf.open(path))
result.save("merged.pdf")
# Поиск текста по всем страницам
import pymupdf
doc = pymupdf.open("report.pdf")
for i, page in enumerate(doc):
results = page.search_for("revenue")
if results:
print(f"Страница {i+1}: {len(results)} совпадений")
print(page.get_text("text"))

Никаких дополнительных зависимостей не требуется — pymupdf покрывает разделение, объединение, поиск и извлечение текста в одном пакете.


Примечания​

  • web_extract всегда является первым выбором для URL
  • pymupdf — безопасный вариант по умолчанию: мгновенно, без моделей, работает везде
  • marker-pdf предназначен для OCR, сканов, уравнений, сложных макетов — устанавливайте только при необходимости
  • Оба вспомогательных скрипта принимают --help для полного описания использования
  • marker-pdf загружает ~2,5 ГБ моделей в ~/.cache/huggingface/ при первом запуске
  • Для Word-документов: pip install python-docx (лучше, чем OCR — парсит реальную структуру)
  • Для PowerPoint: см. навык powerpoint (использует python-pptx)