PDF教程文档转Markdown自动化工具,使用Ollama多模态模型进行OCR识别
Project description
PDF教程文档转Markdown自动化工具
将PDF教程文档(图片格式)自动转换为结构化的Markdown文件,保持原有目录结构。
功能特性
- 自动扫描目录结构,识别所有PDF文件
- 使用Ollama多模态模型(qwen3-vl)直接理解图片内容
- 保持原有目录结构输出Markdown文件
- 支持断点续传,中断后可继续处理
- 并发处理,提升转换效率
- 自动生成索引文件和统计报告
环境要求
- Python 3.13+
- Ollama服务(需提前安装并拉取多模态模型)
快速开始
1. 安装依赖
cd codes
uv sync
2. 配置Ollama
# 拉取多模态模型(推荐,中文效果好)
ollama pull qwen3-vl:8b
# 或使用其他模型
ollama pull llava:13b
# 启动Ollama服务
ollama serve
3. 配置环境变量(可选)
# 复制示例配置
cp .env.example .env
# 编辑配置(如使用远程Ollama服务)
# OLLAMA_HOST=http://192.168.1.100:11434
使用方法
扫描目录结构
uv run python main.py scan
输出示例:
哥飞教程
├── adsense
│ └── FireShot Capture 005 - xxx.pdf
├── 新手入门
│ └── FireShot Capture 051 - xxx.pdf
└── ...
统计: 10 个目录, 120 个PDF文件
转换单个PDF
uv run python main.py convert "新手入门/FireShot Capture 051 - xxx.pdf"
批量转换所有PDF
# 默认使用3个并发
uv run python main.py convert-all
# 指定并发数
uv run python main.py convert-all --workers 5
# 禁用断点续传(重新处理所有文件)
uv run python main.py convert-all --no-resume
生成索引文件
uv run python main.py index
检查Ollama服务状态
uv run python main.py check
查看统计信息
uv run python main.py stats
输出示例:
项目统计
┏━━━━━━━━━━━━━┳━━━━┓
┃ 项目 ┃ 数量 ┃
┡━━━━━━━━━━━━━╇━━━━┩
│ 分类目录 │ 10 │
│ PDF文件总数 │ 120 │
│ 已处理 │ 85 │
│ 待处理 │ 35 │
│ 完成进度 │ 70.8% │
└─────────────┴──────┘
配置说明
环境变量配置(.env 文件):
| 变量 | 说明 | 默认值 |
|---|---|---|
OLLAMA_HOST |
Ollama服务地址 | http://localhost:11434 |
OLLAMA_MODEL |
多模态模型名称 | qwen3-vl:8b |
SOURCE_DIR |
PDF源目录 | ../ |
OUTPUT_DIR |
Markdown输出目录 | ./output |
IMAGE_DPI |
PDF提取图片DPI | 150 |
MAX_WORKERS |
并发处理数 | 3 |
输出格式
转换后的Markdown文件格式:
# 文档标题
> **元信息**
> - 来源: FireShot Capture 051
> - 分类: 新手入门
> - 转换时间: 2026-02-27 10:30:00
---
[转换后的正文内容]
---
*本文档由自动化脚本生成*
目录结构
codes/
├── config/ # 配置模块
│ ├── __init__.py
│ └── settings.py
├── src/ # 核心模块
│ ├── __init__.py
│ ├── scanner.py # 目录扫描
│ ├── converter.py # PDF转换
│ └── output.py # 输出管理
├── docs/ # 文档
│ └── design.md
├── output/ # 输出目录
│ ├── adsense/ # 按原目录结构输出
│ ├── 新手入门/
│ ├── structure.json # 目录结构
│ └── README.md # 索引文件
├── main.py # CLI入口
├── pyproject.toml
└── .env.example
常见问题
Q: Ollama连接失败?
确保Ollama服务正在运行:
ollama serve
如果使用远程服务,检查 OLLAMA_HOST 配置是否正确。
Q: 模型未找到?
先拉取模型:
ollama pull qwen3-vl:8b
Q: 转换速度慢?
- 增加并发数:
uv run python main.py convert-all --workers 5 - 使用GPU加速的Ollama服务
- 使用更快的模型(如较小参数量的模型)
Q: 如何跳过已处理的文件?
默认启用断点续传,直接运行:
uv run python main.py convert-all
依赖
License
MIT
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
fei_pdf2md-0.1.0.tar.gz
(41.9 kB
view details)
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file fei_pdf2md-0.1.0.tar.gz.
File metadata
- Download URL: fei_pdf2md-0.1.0.tar.gz
- Upload date:
- Size: 41.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.9.13 {"installer":{"name":"uv","version":"0.9.13"},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
8fb4f49cf26fa876e9a295030a822c0fadde80c462d758beaac5061743390744
|
|
| MD5 |
3bff5c45d06840d7bf8c76a482096a32
|
|
| BLAKE2b-256 |
f93193559fead9a24e092da106fc3d878daf1a79cfcca4025cb9567847522cbd
|
File details
Details for the file fei_pdf2md-0.1.0-py3-none-any.whl.
File metadata
- Download URL: fei_pdf2md-0.1.0-py3-none-any.whl
- Upload date:
- Size: 14.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.9.13 {"installer":{"name":"uv","version":"0.9.13"},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
eb6efabf0c3e2a2884bb8cc54a8ee5f50f57e3a74f58f866bf48dde5faffb73e
|
|
| MD5 |
31787e694f1f5e63bf62fef3a4d63532
|
|
| BLAKE2b-256 |
4af8a480993a362d7379a60aa89643381e8c7e94485b5ae8fa4afa441dd3ac61
|