Skip to content

Latest commit

 

History

History
276 lines (203 loc) · 10.9 KB

File metadata and controls

276 lines (203 loc) · 10.9 KB

MarkPDFDown

English | 中文 | 日本語 | Русский | فارسی | العربية

Size Pulls Tag License

Мощный инструмент, использующий мультимодальные большие языковые модели для преобразования PDF-файлов в формат Markdown.

Настольное приложение

Хотите GUI? Попробуйте наше настольное приложение для более удобного использования!

npx -y markpdfdown

Скриншот настольного приложения

Перейти к репозиторию настольного приложения

Обзор

MarkPDFDown разработан для упрощения процесса преобразования PDF-документов в чистый, редактируемый текст Markdown. Используя передовые мультимодальные модели ИИ через LiteLLM, он может точно извлекать текст, сохранять форматирование и обрабатывать сложные структуры документов, включая таблицы, формулы и диаграммы.

Возможности

  • Преобразование PDF в Markdown: Преобразование любого PDF-документа в хорошо отформатированный Markdown
  • Преобразование изображения в Markdown: Преобразование изображения в хорошо отформатированный Markdown
  • Поддержка нескольких провайдеров: Поддержка OpenAI и OpenRouter через LiteLLM
  • Гибкий CLI: Режимы использования на основе файлов и на основе конвейера
  • Сохранение формата: Сохраняет заголовки, списки, таблицы и другие элементы форматирования
  • Выбор диапазона страниц: Преобразование определенных диапазонов страниц из PDF-документов
  • Модульная архитектура: Чистая, поддерживаемая кодовая база с разделением ответственности

Демонстрация

Установка

Использование uv (Рекомендуется)

# Установите uv, если еще не установлен
curl -LsSf https://astral.sh/uv/install.sh | sh

# Клонируйте репозиторий
git clone https://github.com/MarkPDFdown/markpdfdown.git
cd markpdfdown

# Установите зависимости и создайте виртуальное окружение
uv sync

# Установите пакет в режиме разработки
uv pip install -e .

Использование conda

conda create -n markpdfdown python=3.9
conda activate markpdfdown

# Клонируйте репозиторий
git clone https://github.com/MarkPDFdown/markpdfdown.git
cd markpdfdown

# Установите зависимости
pip install -e .

Конфигурация

MarkPDFDown использует переменные окружения для конфигурации. Создайте файл .env в директории вашего проекта:

# Скопируйте образец конфигурации
cp .env.sample .env

Отредактируйте файл .env с вашими настройками:

# Конфигурация модели
MODEL_NAME=gpt-4o

# API ключи (LiteLLM автоматически определяет их)
OPENAI_API_KEY=your-openai-api-key
# или для OpenRouter
OPENROUTER_API_KEY=your-openrouter-api-key

# Опциональные параметры
TEMPERATURE=0.3
MAX_TOKENS=8192
RETRY_TIMES=3

Поддерживаемые модели

Модели OpenAI

MODEL_NAME=gpt-4o
MODEL_NAME=gpt-4o-mini
MODEL_NAME=gpt-4-vision-preview

Модели OpenRouter

MODEL_NAME=openrouter/anthropic/claude-3.5-sonnet
MODEL_NAME=openrouter/google/gemini-pro-vision
MODEL_NAME=openrouter/meta-llama/llama-3.2-90b-vision

Использование

Файловый режим (Рекомендуется)

# Базовое преобразование
markpdfdown --input document.pdf --output output.md

# Преобразование определенного диапазона страниц
markpdfdown --input document.pdf --output output.md --start 1 --end 10

# Преобразование изображения в markdown
markpdfdown --input image.png --output output.md

# Использование python модуля
python -m markpdfdown --input document.pdf --output output.md

Режим конвейера (Удобно для Docker)

# PDF в markdown через конвейер
markpdfdown < document.pdf > output.md

# Использование python модуля
python -m markpdfdown < document.pdf > output.md

Расширенное использование

# Преобразование страниц 5-15 PDF
markpdfdown --input large_document.pdf --output chapter.md --start 5 --end 15

# Обработка нескольких файлов
for file in *.pdf; do
    markpdfdown --input "$file" --output "${file%.pdf}.md"
done

Использование Docker

# Соберите образ (при необходимости)
docker build -t markpdfdown .

# Запустите с переменными окружения
docker run -i \
  -e MODEL_NAME=gpt-4o \
  -e OPENAI_API_KEY=your-api-key \
  markpdfdown < input.pdf > output.md

# Использование OpenRouter
docker run -i \
  -e MODEL_NAME=openrouter/anthropic/claude-3.5-sonnet \
  -e OPENROUTER_API_KEY=your-openrouter-key \
  markpdfdown < input.pdf > output.md

Настройка разработки

Инструменты качества кода

Этот проект использует ruff для линтинга и форматирования, и pre-commit для автоматических проверок качества кода.

Установка зависимостей разработки

# При использовании uv
uv sync --group dev

# При использовании pip
pip install -e ".[dev]"

Настройка хуков pre-commit

# Установка хуков pre-commit
pre-commit install

# Запуск pre-commit на всех файлах (опционально)
pre-commit run --all-files

Форматирование и линтинг кода

# Форматирование кода с помощью ruff
ruff format

# Запуск проверок линтинга
ruff check

# Исправление автоматически исправляемых проблем
ruff check --fix

Требования

  • Python 3.9+
  • uv (рекомендуется для управления пакетами) или conda/pip
  • Зависимости, указанные в pyproject.toml
  • Доступ к поддерживаемым провайдерам LLM (OpenAI или OpenRouter)

Архитектура

Проект следует модульной архитектуре:

src/markpdfdown/
├── __init__.py          # Инициализация пакета
├── __main__.py          # Точка входа для python -m
├── cli.py               # Интерфейс командной строки
├── main.py              # Основная логика преобразования
├── config.py            # Управление конфигурацией
└── core/                # Основные модули
    ├── llm_client.py    # Интеграция LiteLLM
    ├── file_worker.py   # Обработка файлов
    └── utils.py         # Служебные функции

Вклад в проект

Вклады приветствуются! Пожалуйста, не стесняйтесь отправлять Pull Request.

  1. Форкните репозиторий
  2. Создайте ветку для функции (git checkout -b feature/amazing-feature)
  3. Настройте среду разработки:
    uv sync --group dev
    pre-commit install
  4. Внесите изменения и обеспечьте качество кода:
    ruff format
    ruff check --fix
    pre-commit run --all-files
  5. Зафиксируйте ваши изменения (git commit -m 'feat: Add some amazing feature')
  6. Отправьте в ветку (git push origin feature/amazing-feature)
  7. Откройте Pull Request

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

Лицензия

Этот проект лицензирован под Apache License 2.0. Подробности смотрите в файле LICENSE.

Благодарности

  • Спасибо разработчикам LiteLLM за предоставление унифицированного доступа к LLM
  • Спасибо разработчикам мультимодальных моделей ИИ, которые поддерживают этот инструмент
  • Вдохновлен необходимостью в лучших инструментах преобразования PDF в Markdown