























今天在 GitHub Trending 上看到一个有意思的项目:MinerU,一个高精度文档解析引擎,能将 PDF、DOCX、PPTX、XLSX 和图片等格式一键转换为结构化的 Markdown 和 JSON,非常适合 LLM、RAG 和 Agent 工作流使用。
MinerU 是 OpenDataLab 团队开源的文档解析工具,专注于将各种文档格式转换为机器可读的结构化数据。该项目诞生于 InternLM 大模型预训练过程,旨在解决科学文献中的符号转换问题。
在 OmniDocBench v1.6 基准测试中:
pipeline 后端准确率:86.47hybrid 后端(high 模式):95.39vlm 后端:95.30MinerU 采用模块化架构设计,主要包含三大解析后端:
┌─────────────────────────────────────────────────────┐
│ MinerU Core │
├─────────────────────────────────────────────────────┤
│ pipeline │ hybrid-engine │ vlm-engine │
│ (OCR为主) │ (混合引擎) │ (VLM为主) │
├─────────────────────────────────────────────────────┤
│ mineru-api │ mineru-router │ CLI / Gradio │
└─────────────────────────────────────────────────────┘
1. PDF 处理层
pypdfium2:高性能 PDF 渲染pdftext:文本提取pypdf:PDF 操作2. OCR 引擎
PaddleOCR:开源 OCR 框架3. VLM 模型
MinerU2.5-Pro-2605-1.2B:最新视觉语言模型4. 文档解析
python-docx:DOCX 处理pypptx-with-oxml:PPTX 解析openpyxl:XLSX 处理从 pyproject.toml 可以看出项目依赖结构:
[project]
name = "mineru"
requires-python = ">=3.10,<3.14"
dependencies = [
"click>=8.1.7", # CLI 框架
"pypdfium2>=4.30.0", # PDF 渲染
"pypdf>=5.6.0", # PDF 操作
"opencv-python>=4.11.0", # 图像处理
"transformers>=4.57.3", # VLM 模型
"fastapi", # API 服务
# ... 更多依赖
]
# 简化的解析流程(概念性代码)
def parse_document(input_path, output_path, backend="pipeline"):
# 1. 文档预处理
doc = load_document(input_path)
# 2. 布局分析
layout = analyze_layout(doc)
# 3. 内容提取(根据后端选择)
if backend == "pipeline":
# OCR + 规则引擎
content = pipeline_extract(doc, layout)
elif backend == "vlm":
# VLM 模型推理
content = vlm_extract(doc, layout)
elif backend == "hybrid":
# 混合引擎:OCR + VLM
content = hybrid_extract(doc, layout)
# 4. 后处理(格式转换)
markdown = convert_to_markdown(content)
# 5. 输出结果
save_output(markdown, output_path)
| 解析后端 | pipeline | hybrid-engine | vlm-engine |
|---|---|---|---|
| 操作系统 | Linux/Windows/macOS | Linux/Windows/macOS | Linux/Windows/macOS |
| 纯 CPU 支持 | ✅ | ❌ | ❌ |
| 最小显存 | 4GB | 8GB | 8GB |
| 最小内存 | 16GB | 32GB(推荐) | 32GB(推荐) |
| Python 版本 | 3.10-3.13 | 3.10-3.13 | 3.10-3.13 |
方式一:pip 安装(推荐)
pip install --upgrade pip
pip install uv
uv pip install -U "mineru[all]"
方式二:源码安装
git clone https://github.com/opendatalab/MinerU.git
cd MinerU
uv pip install -e .[all]
方式三:Docker 部署
# Linux / Windows (WSL2)
docker pull opendatalab/mineru:latest
# GPU 环境(默认)
mineru -p input.pdf -o output/
# 纯 CPU 环境
mineru -p input.pdf -o output/ -b pipeline
# 指定文件或目录
mineru -p ./documents/ -o ./parsed/
# 基础用法
mineru -p <input_path> -o <output_path> [options]
# 参数说明
-p, --path 输入文件或目录(支持 PDF/DOCX/PPTX/XLSX/图片)
-o, --output 输出目录
-b, --backend 解析后端:pipeline | vlm | hybrid(默认:自动选择)
--lang OCR 语言(默认:ch)
--method 解析方法:auto | txt | ocr
启动 API 服务
# 启动本地 API 服务
mineru-api --host 0.0.0.0 --port 8000
# 多 GPU 部署(使用 router)
mineru-router --config config.yaml
API 调用示例
import requests
# 同步解析
url = "http://localhost:8000/file_parse"
files = {"file": open("document.pdf", "rb")}
response = requests.post(url, files=files)
# 异步任务
url = "http://localhost:8000/tasks"
response = requests.post(url, files=files)
task_id = response.json()["task_id"]
# 查询任务状态
status_url = f"http://localhost:8000/tasks/{task_id}"
status = requests.get(status_url).json()
mineru-gradio --server-name 0.0.0.0 --server-port 7860
from mineru import DocumentParser
# 初始化解析器
parser = DocumentParser(backend="pipeline")
# 解析文档
result = parser.parse("document.pdf")
# 获取 Markdown
markdown = result.to_markdown()
# 获取 JSON
json_data = result.to_json()
# 保存结果
result.save("output/")
from mineru import DocumentParser
from langchain.text_splitter import MarkdownHeaderTextSplitter
# 1. 解析文档
parser = DocumentParser(backend="hybrid")
result = parser.parse("research_paper.pdf")
markdown_text = result.to_markdown()
# 2. 按标题分割
splitter = MarkdownHeaderTextSplitter(
headers_to_split_on=[
("#", "header1"),
("##", "header2"),
("###", "header3"),
]
)
chunks = splitter.split_text(markdown_text)
# 3. 向量化并存储(接入向量数据库)
# ... 你的 RAG 流程
原因:Windows 上 CUDA 依赖安装路径问题
解决方案:
# 参考 Windows CUDA 加速 FAQ
https://opendatalab.github.io/MinerU/faq/#windows-cuda-acceleration
# 或使用 Docker 部署
docker run --gpus all opendatalab/mineru:latest
解决方案:
# 方案 1:升级到 VLM 后端
mineru -p input.pdf -o output/ -b vlm
# 方案 2:指定 OCR 语言
mineru -p input.pdf -o output/ --lang ch+en
# 方案 3:使用 hybrid 后端(兼顾准确率和速度)
mineru -p input.pdf -o output/ -b hybrid
解决方案:
# 3.0 版本已优化长文档处理,自动使用滑动窗口
# 确保使用最新版本
pip install -U "mineru[all]"
# 手动分段处理
# 3.0 版本已支持流式写入,无需手动分割
优化方案:
# 方案 1:使用 pipeline 后端(最快,准确率略低)
mineru -p input.pdf -o output/ -b pipeline
# 方案 2:hybrid 后端使用 medium 模式(3.3 新增)
# 速度提升 35%-220%,准确率仅下降 0.13
mineru -p input.pdf -o output/ -b hybrid --effort medium
# 方案 3:多 GPU 并行
mineru-router --config multi_gpu.yaml
排查步骤:
vlm 或 hybrid 后端layout.json 中间文件,确认布局分析结果解决方案:
# 确保端口映射正确
docker run -p 8000:8000 opendatalab/mineru:latest
# 检查防火墙设置
# macOS: 系统偏好设置 → 安全性与隐私 → 防火墙
# Linux: sudo ufw allow 8000
effort 参数:medium 模式速度提升 35%-220%MinerU2.5-Pro-2605-1.2BMinerU 是一个功能强大、设计精良的文档解析工具,特别适合需要将非结构化文档转换为结构化数据的场景。无论是构建 RAG 系统、训练 LLM,还是自动化文档处理流程,MinerU 都能提供高质量的解析结果。
推荐使用场景:
项目地址:https://github.com/opendatalab/MinerU
在线体验:https://mineru.net
文档:https://opendatalab.github.io/MinerU/
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。