MinerU 技术架构报告

高质量文档解析引擎 — 将 PDF / Office 文档转化为 LLM-Ready 的 Markdown 与 JSON

📦 GitHub: opendatalab/MinerU ⭐ 66,385 Stars 🍴 5,594 Forks 🐍 Python 99.3% 📅 Created: 2024-02-29

🔍 1. 项目概览

MinerU 是由 OpenDataLab 团队开源的高质量文档解析工具,核心使命是将复杂的 PDF、Office(DOCX/PPTX/XLSX)文档转化为 LLM 可直接消费的 Markdown 和 JSON 格式,为 Agentic 工作流提供高质量的结构化数据输入。

核心定位

  • 文档智能解析:支持 PDF(文本型 / 扫描型 / OCR 型)、DOCX、PPTX、XLSX 多格式文档
  • 多引擎架构:提供 Pipeline(传统 ML 流水线)、VLM(视觉语言模型)、Hybrid(混合引擎)三种解析后端
  • LLM-Ready 输出:输出 Markdown / JSON / ContentList 等格式,直接对接 RAG、Pretrain、Agent 等下游场景
  • 全栈部署:支持 CLI 命令行、FastAPI 服务、Gradio Web UI、Docker 容器化等多种部署方式

项目标签

PDF Parser OCR Layout Analysis Document Analysis VLM AI4Science RAG-Ready Pretrain Data

📊 2. 项目指标

66K+
GitHub Stars
5.6K+
Forks
2.47MB
Python 代码量
3
解析后端引擎
4+
AI 模型集成
4
文档格式支持

🏗️ 3. 整体架构

MinerU 采用分层架构设计,自顶向下分为接口层、后端引擎层、模型层、数据层和工具层,各层之间通过中间 JSON(Middle JSON)进行数据流转与解耦。

🔵 接口与部署层 (CLI / API / UI)
提供多种用户交互入口,包括命令行工具、RESTful API 服务和 Gradio Web 界面
CLI Client FastAPI Server Gradio Web UI API Client VLM Server
🟢 后端处理引擎层 (Backend)
三种解析引擎,每种引擎遵循 Model → Middle JSON → Content 的统一处理范式
Pipeline Engine VLM Engine Hybrid Engine Office Engine
🟡 AI 模型层 (Model)
集成多种深度学习模型,负责版面检测、OCR、公式识别、表格识别、VLM 推理
DocLayoutv2 PaddleOCR UniMERNet PP-FormulaNet+ Table CLS/REC VLM (vLLM/LMDeploy)
🟣 数据 I/O 层 (Data)
抽象化的数据读写接口,支持本地文件系统和 S3 对象存储
FileBase Reader/Writer S3 Reader/Writer Multi-Bucket S3 HTTP IO
🔴 工具与辅助层 (Utils)
跨模块共享的工具函数,涵盖 PDF 处理、OCR 辅助、表格合并、配置管理等
PDF Reader/Classify OCR Utils Table Merge Config Reader LLM Aided

核心架构原则

原则描述实现方式
引擎解耦三种解析后端独立实现,通过统一接口调用Backend 抽象层 + Middle JSON 中间格式
模型可插拔AI 模型可独立替换和升级Model 层独立封装,配置化加载
存储抽象数据读写与存储后端解耦Data Reader/Writer 抽象基类
多格式统一PDF 和 Office 文档统一处理流程统一 Middle JSON 中间表示
部署灵活支持本地、服务化、容器化部署CLI + FastAPI + Gradio + Docker

⚙️ 4. 后端处理引擎

后端引擎层是 MinerU 的核心,包含四种处理引擎,每种引擎针对不同场景和文档类型优化。

Pipeline Engine

传统 ML 流水线引擎,通过多模型串联完成文档解析

高精度
适合:文本型 PDF
速度:中等

VLM Engine

基于视觉语言模型的端到端解析引擎

端到端
适合:复杂版面/扫描文档
速度:较慢(需GPU)

Hybrid Engine

Pipeline + VLM 混合引擎,兼顾精度与泛化能力

推荐
适合:全类型文档
速度:中等

4.1 Pipeline Engine(流水线引擎)

Pipeline 引擎采用经典的多阶段流水线架构,每个阶段由独立的 AI 模型处理,阶段间通过结构化数据传递结果。

PDF 输入
PDF 预处理
页面提取/分类
版面检测
DocLayoutv2
OCR 识别
PaddleOCR
公式识别
UniMERNet
表格识别
Table CLS/REC
Middle JSON
中间表示
段落拆分
para_split
Markdown/JSON

核心模块说明

模块文件代码量职责
批量分析batch_analyze.py~39KB批量文档解析调度,任务分发与结果聚合
模型初始化model_init.py~14KB统一初始化各 AI 模型,管理模型生命周期
模型输出转换model_json_to_middle_json.py~12KB将各模型原始输出转换为统一 Middle JSON
段落拆分para_split.py~21KB基于规则和模型结果进行段落级拆分
Pipeline 分析pipeline_analyze.py~13KBPipeline 引擎主控流程
Magic Modelpipeline_magic_model.py~21KB封装模型调用逻辑,管理推理过程
内容生成pipeline_middle_json_mkcontent.py~39KB从 Middle JSON 生成最终 Markdown/JSON 输出

4.2 VLM Engine(视觉语言模型引擎)

VLM 引擎利用视觉语言模型(如 Qwen-VL、InternVL 等)对文档页面进行端到端理解,直接从页面图像生成结构化内容。

模块文件代码量职责
VLM 分析vlm_analyze.py~26KBVLM 引擎主控流程,页面切分与 VLM 推理调度
VLM Magic Modelvlm_magic_model.py~15KB封装 VLM 模型调用,支持 vLLM/LMDeploy 后端
输出转换model_output_to_middle_json.py~5KBVLM 输出转换为 Middle JSON
内容生成vlm_middle_json_mkcontent.py~38KBVLM Middle JSON 生成最终输出内容
VLM 工具utils.py~9KBVLM 相关辅助函数

4.3 Hybrid Engine(混合引擎)

Hybrid 引擎融合 Pipeline 和 VLM 的优势:先通过 Pipeline 模型获取版面结构和 OCR 结果,再利用 VLM 对复杂区域进行补充理解。

模块文件代码量职责
混合分析hybrid_analyze.py~40KBHybrid 引擎主控流程,协调 Pipeline + VLM
混合 Magic Modelhybrid_magic_model.py~19KB统一封装 Pipeline 和 VLM 模型调用
输出转换hybrid_model_output_to_middle_json.py~11KB混合输出合并为 Middle JSON

4.4 Office Engine(Office 文档引擎)

Office 引擎处理 DOCX、PPTX、XLSX 格式文档,通过解析 Office 文档的原生结构信息,转换为统一的 Middle JSON 格式。

模块文件代码量职责
DOCX 分析docx_analyze.py~2KBDOCX 文档解析入口
PPTX 分析pptx_analyze.py~2KBPPTX 文档解析入口
XLSX 分析xlsx_analyze.py~2KBXLSX 文档解析入口
Office Magic Modeloffice_magic_model.py~31KBOffice 文档结构化解析核心逻辑
输出转换model_output_to_middle_json.py~7KBOffice 解析结果转 Middle JSON
内容生成office_middle_json_mkcontent.py~1KBOffice Middle JSON 生成输出

🧠 5. AI 模型层

模型层集成了多种深度学习模型,每个模型负责文档解析流水线中的一个特定任务。模型通过统一的初始化和调用接口与后端引擎交互。

5.1 版面检测模型 (Layout Detection)

DocLayoutv2(pp_doclayoutv2.py, ~65KB)

  • 基于 PaddlePaddle 的文档版面分析模型
  • 检测文档中的文本块、标题、表格、图片、公式、页眉页脚等区域
  • 支持 10+ 种版面元素类别识别
  • 输出边界框(Bounding Box)和类别标签

5.2 OCR 模型

模型文件代码量功能
PaddleOCR (PyTorch)pytorch_paddle.py~13KB文本检测 + 文本识别,支持多语言
印章检测seal_det_warp.py~27KB印章/公章区域检测与矫正
印章裁剪seal_crop.py~15KB印章区域裁剪与预处理

5.3 数学公式识别模型 (MFR)

模型目录功能
UniMERNetmodel/mfr/unimernet/通用数学公式识别,输出 LaTeX
PP-FormulaNet+ Mmodel/mfr/pp_formulanet_plus_m/PaddlePaddle 公式识别模型

公式识别工具函数(mfr/utils.py, ~15KB)提供模型推理的辅助功能,包括图像预处理、后处理和 LaTeX 格式化。

5.4 表格识别模型 (Table)

表格识别分为两个子任务:

  • Table CLS(分类):判断表格类型(有线表 / 无线表)
  • Table REC(识别):识别表格结构,输出 HTML 格式

5.5 VLM 推理服务

服务文件功能
vLLM Servermodel/vlm/vllm_server.py基于 vLLM 的高性能 VLM 推理服务
LMDeploy Servermodel/vlm/lmdeploy_server.py基于 LMDeploy 的 VLM 推理服务

VLM 服务支持多种开源视觉语言模型(如 Qwen2-VL、InternVL 等),通过 OpenAI 兼容 API 提供推理服务。

5.6 Office 文档模型

  • DOCX Model(model/docx/):解析 Word 文档的结构和内容
  • PPTX Model(model/pptx/):解析 PowerPoint 演示文稿
  • XLSX Model(model/xlsx/):解析 Excel 电子表格

🔌 6. 接口与部署层

接口层提供多种用户交互方式,从命令行到 Web UI,从本地部署到云端 API。

模块文件代码量功能描述
CLI 客户端cli/client.py~36KB命令行主入口,支持 PDF/Office 解析、批量处理
FastAPI 服务cli/fast_api.py~49KBRESTful API 服务,支持异步任务和文件上传
Gradio Web UIcli/gradio_app.py~77KB交互式 Web 界面,实时预览解析结果
API 路由cli/router.py~61KBAPI 路由定义,任务管理、文件管理、结果查询
API 客户端cli/api_client.py~35KB远程 API 调用客户端
API 请求cli/api_request.py~8KBHTTP 请求封装
通用逻辑cli/common.py~32KBCLI 共享逻辑,参数解析、配置加载
模型下载cli/models_download.py~6KBAI 模型权重自动下载与管理
VLM 服务cli/vlm_server.py~2KBVLM 推理服务启动入口
VLM 预加载cli/vlm_preload.py~2KBVLM 模型预加载与缓存
可视化cli/visualization.py~3KB解析结果可视化展示
输出路径cli/output_paths.py~1.5KB输出文件路径管理

部署模式

本地 CLI

命令行直接运行
适合开发调试和小批量处理

开发友好

API 服务

FastAPI 服务化部署
适合生产环境和集成调用

生产就绪

Docker 容器

容器化一键部署
适合云原生和分布式场景

云原生

💾 7. 数据 I/O 层

数据层通过抽象基类模式,将数据读写操作与底层存储实现解耦,支持多种存储后端的无缝切换。

7.1 Data Reader/Writer

组件文件功能
抽象基类data_reader_writer/base.py定义 Reader/Writer 统一接口
本地文件data_reader_writer/filebase.py本地文件系统读写实现
S3 存储data_reader_writer/s3.pyAmazon S3 兼容存储读写
多桶 S3data_reader_writer/multi_bucket_s3.py多 S3 桶统一读写,支持桶级路由
Dummy 实现data_reader_writer/dummy.py空实现,用于测试和开发

7.2 IO 协议

协议文件功能
IO 基类io/base.py定义数据传输协议接口
HTTP 协议io/http.pyHTTP/HTTPS 数据传输
S3 协议io/s3.pyS3 协议数据传输
用户文档
Data Reader
base / filebase / s3
后端引擎处理
Data Writer
base / filebase / s3
Markdown / JSON

🔧 8. 工具与辅助层

工具层提供跨模块共享的辅助功能,是整个系统的基础支撑。

分类模块代码量功能
PDF 处理pdf_classify.py~23KBPDF 文本型/扫描型/OCR型分类
pdf_image_tools.py~17KBPDF 图像提取与处理
pdf_text_tool.py~3KBPDF 文本提取工具
pdf_reader.py~2KBPDF 文件读取封装
OCR 辅助ocr_utils.py~17KBOCR 预处理、后处理、结果合并
span_pre_proc.py~22KB文本 Span 预处理
span_block_fix.py~6KB文本块修正与对齐
表格处理table_merge.py~41KB跨页表格合并
table_continuation.py~1KB表格续表检测
几何计算boxbase.py~8KB边界框基础运算
bbox_utils.py~1KB边界框工具函数
cut_image.py~1KB图像裁剪
配置管理config_reader.py~6KBJSON 配置文件读取
os_env_config.py~1KB环境变量配置
enum_class.py~4KB枚举类型定义
LLM 辅助llm_aided.py~13KBLLM 辅助的文档理解与修正
可视化draw_bbox.py~17KB边界框可视化绘制
模型管理model_utils.py~9KB模型加载与推理工具
语言检测language.py / guess_suffix_or_lang.py~8KB文档语言自动检测
Office 格式office_rich_text.py~13KBOffice 富文本处理
标题处理title_level_postprocess.py~2KB标题层级后处理

🔄 9. 核心处理流程

以下展示 MinerU 处理一份 PDF 文档的完整数据流。

① 文档输入 & 格式检测
识别文档类型(PDF/DOCX/PPTX/XLSX),PDF 需进一步分类
② PDF 分类(文本型 / 扫描型 / OCR 型)
pdf_classify.py 判断 PDF 类型,选择对应处理策略
③ 引擎选择 & 模型初始化
根据配置选择 Pipeline / VLM / Hybrid 引擎,加载对应模型
④ 多模型推理
版面检测 → OCR → 公式识别 → 表格识别(Pipeline)
或 VLM 端到端推理(VLM)
或两者结合(Hybrid)
⑤ Middle JSON 中间表示生成
统一中间格式,包含页面结构、文本内容、表格、公式等
⑥ 后处理 & 段落拆分
段落合并、标题层级处理、跨页表格合并、Span 修正
⑦ 内容生成 & 输出
生成 Markdown / JSON / ContentList,写入目标存储

📁 10. 目录结构

MinerU/ ├── mineru/ ← 核心源码包 │ ├── backend/ ← 后端处理引擎 │ │ ├── pipeline/ ← Pipeline 流水线引擎 │ │ │ ├── batch_analyze.py 批量解析调度 │ │ │ ├── model_init.py 模型初始化 │ │ │ ├── model_json_to_middle_json.py 模型输出→中间JSON │ │ │ ├── para_split.py 段落拆分 │ │ │ ├── pipeline_analyze.py Pipeline主控 │ │ │ ├── pipeline_magic_model.py 模型调用封装 │ │ │ └── pipeline_middle_json_mkcontent.py 内容生成 │ │ ├── vlm/ ← VLM 视觉语言模型引擎 │ │ │ ├── vlm_analyze.py VLM主控 │ │ │ ├── vlm_magic_model.py VLM模型封装 │ │ │ ├── model_output_to_middle_json.py 输出转换 │ │ │ └── vlm_middle_json_mkcontent.py 内容生成 │ │ ├── hybrid/ ← Hybrid 混合引擎 │ │ │ ├── hybrid_analyze.py 混合主控 │ │ │ ├── hybrid_magic_model.py 混合模型封装 │ │ │ └── hybrid_model_output_to_middle_json.py 输出转换 │ │ ├── office/ ← Office 文档引擎 │ │ │ ├── docx_analyze.py DOCX解析 │ │ │ ├── pptx_analyze.py PPTX解析 │ │ │ ├── xlsx_analyze.py XLSX解析 │ │ │ └── office_magic_model.py Office解析核心 │ │ └── utils/ ← 后端工具 │ ├── cli/ ← 接口与部署 │ │ ├── client.py CLI主入口 │ │ ├── fast_api.py FastAPI服务 │ │ ├── gradio_app.py Gradio Web UI │ │ ├── router.py API路由 │ │ ├── api_client.py 远程API客户端 │ │ ├── common.py 共享逻辑 │ │ ├── models_download.py 模型下载 │ │ └── vlm_server.py VLM服务 │ ├── model/ ← AI 模型层 │ │ ├── layout/ 版面检测 │ │ │ └── pp_doclayoutv2.py DocLayoutv2模型 │ │ ├── ocr/ OCR识别 │ │ │ ├── pytorch_paddle.py PaddleOCR │ │ │ ├── seal_det_warp.py 印章检测 │ │ │ └── seal_crop.py 印章裁剪 │ │ ├── mfr/ 公式识别 │ │ │ ├── unimernet/ UniMERNet │ │ │ └── pp_formulanet_plus_m/ PP-FormulaNet+ │ │ ├── table/ 表格识别 │ │ │ ├── cls/ 表格分类 │ │ │ └── rec/ 表格识别 │ │ ├── vlm/ VLM推理 │ │ │ ├── vllm_server.py vLLM服务 │ │ │ └── lmdeploy_server.py LMDeploy服务 │ │ ├── docx/ DOCX模型 │ │ ├── pptx/ PPTX模型 │ │ └── xlsx/ XLSX模型 │ ├── data/ ← 数据 I/O 层 │ │ ├── data_reader_writer/ 数据读写 │ │ │ ├── base.py 抽象基类 │ │ │ ├── filebase.py 本地文件 │ │ │ ├── s3.py S3存储 │ │ │ └── multi_bucket_s3.py 多桶S3 │ │ └── io/ IO协议 │ │ ├── http.py HTTP协议 │ │ └── s3.py S3协议 │ ├── utils/ ← 工具层 │ │ ├── pdf_classify.py PDF分类 │ │ ├── ocr_utils.py OCR工具 │ │ ├── table_merge.py 表格合并 │ │ ├── config_reader.py 配置读取 │ │ ├── llm_aided.py LLM辅助 │ │ └── ... 更多工具模块 │ ├── resources/ ← 静态资源 │ └── version.py 版本号 ├── demo/ ← 示例代码 ├── docker/ ← Docker 配置 ├── docs/ ← 项目文档 ├── tests/ ← 测试用例 ├── projects/ ← 子项目文档 ├── pyproject.toml ← 项目配置 └── mineru.template.json ← 配置模板

🛠️ 11. 技术栈与依赖

核心技术栈

领域技术用途
编程语言Python 3.10+主要开发语言
深度学习框架PyTorch / PaddlePaddleAI 模型推理
VLM 推理vLLM / LMDeploy视觉语言模型高效推理
OCR 引擎PaddleOCR文字检测与识别
PDF 处理PyMuPDF (pymupdf)PDF 解析与渲染
Web 框架FastAPIRESTful API 服务
UI 框架Gradio交互式 Web 界面
对象存储boto3 (AWS S3)S3 兼容存储读写
容器化Docker容器化部署
包管理uv / pip依赖管理与安装
文档MkDocs项目文档站点

AI 模型清单

模型任务框架输出格式
DocLayoutv2版面检测PaddlePaddleBBox + 类别
PaddleOCR文字识别PaddlePaddle → PyTorch文本 + 坐标
UniMERNet公式识别PyTorchLaTeX
PP-FormulaNet+ M公式识别PaddlePaddleLaTeX
Table CLS表格分类PaddlePaddle类别标签
Table REC表格结构识别PaddlePaddleHTML
Qwen2-VL / InternVLVLM 推理vLLM / LMDeploy结构化文本

📋 12. 架构总结

架构优势

优势说明
🧩 模块化设计引擎层、模型层、数据层清晰分离,各模块可独立开发与测试
🔄 多引擎灵活切换Pipeline / VLM / Hybrid 三引擎覆盖不同精度与性能需求
📐 统一中间表示Middle JSON 作为统一数据交换格式,解耦模型输出与内容生成
📦 存储抽象Reader/Writer 抽象基类支持本地、S3、多桶 S3 无缝切换
🚀 多种部署模式CLI / API / Web UI / Docker 满足不同场景需求
🤖 AI 模型可插拔模型独立封装,可按需加载和替换

架构特点

  • 统一处理范式:所有引擎遵循 Model → Middle JSON → Content 的三阶段处理流程
  • PDF 智能分类:自动判断 PDF 类型(文本型/扫描型/OCR型),选择最优处理策略
  • Office 原生解析:利用 Office 文档原生结构信息,避免不必要的 OCR 开销
  • VLM 端到端:支持视觉语言模型直接理解文档页面,适合复杂版面
  • Hybrid 增强:Pipeline 提供精确结构 + VLM 补充理解,兼顾精度与泛化
  • LLM 辅助后处理:利用 LLM 对解析结果进行智能修正和增强

适用场景

RAG 知识库构建

将文档转化为高质量 Markdown,用于向量检索增强生成

预训练数据制备

大规模文档解析,生成 LLM 预训练语料

Agentic 工作流

为 AI Agent 提供结构化文档理解能力

文档数字化

扫描件/纸质文档的数字化与结构化提取