文章目录
- 一,多种文档解析意义
- 二,文档解析工具-MinerU
- 2.1MinerU定位
- 2.2 MinerU能干什么
- 2.3 安装步骤
- 2.3 基本用法
- 2.4 三种解析方式
- 2.5 后端选择
- 2.6 输出结果
- 三,文档解析工具-Docling
- 3.1 Docling 定位
- 3.2 Docling 能干什么
- 3.3 安装步骤
- 3.4 基本用法
- 3.4.1 CLI 用法
- 3.4.2 Python 用法
- 3.5 PDF 解析配置
- 3.6 输出结果
- 3.7 文档分块
- 3.7.1 HierarchicalChunker
- 3.7.2 HybridChunker
- 3.8 RAG 中的使用流程
一,多种文档解析意义
- 我们需要把PDF、Word、HTML、Markdown、图片等不同文档解析成,干净便于向量检索的文档。
二,文档解析工具-MinerU
2.1MinerU定位
- MinerU 是一个文档解析引擎,主要作用是把人类阅读的文档转换成机器容易处理的 Markdown、JSON 和图片。
2.2 MinerU能干什么
- 当前本地 CLI 文档明确列出的输入包括 PDF、图片、DOCX、PPTX、XLSX。
2.3 安装步骤
2.3.2 CIL安装
# 创建虚拟环境uv venv .venv# 激活环境.venv\Scripts\Activate.ps1# 安装基础功能uv pipinstall"mineru[core]"# 检查安装mineru--versionmineru--help
gitclone https://github.com/opendatalab/MinerU.git Set-Location MinerU uv pipinstall-e".[all]"
2.3 基本用法
mineru-p".\samples\document.pdf"`-o".\output"`-bpipeline`-mauto`-lch
| 参数 | 作用 |
|---|
-p | 输入文件或目录 |
-o | 输出目录 |
-b | 选择解析后端 |
-m | 选择文字提取方式 |
-l | OCR 文档语言 |
-s、-e | 指定开始页和结束页 |
-t | 是否解析表格 |
-f | 是否解析公式 |
2.4 三种解析方式
| 模式 | 适用情况 |
|---|
auto | 自动判断,日常默认使用 |
txt | PDF 有完整且正常的文字层 |
ocr | 扫描 PDF、图片 PDF、乱码 PDF |
# 自动判断mineru-pinput.pdf-ooutput-bpipeline-mauto# 强制直接提取文字mineru-pinput.pdf-ooutput-bpipeline-mtxt# 强制 OCRmineru-pinput.pdf-ooutput-bpipeline-mocr-lch
2.5 后端选择
| 后端 | 特点 | 建议 |
|---|
pipeline | 传统解析流水线,支持纯 CPU | 入门首选 |
vlm-engine | 使用视觉语言模型 | 复杂图文,需要较多资源 |
hybrid-engine | 结合多种解析能力 | GPU 环境和复杂文档 |
vlm-http-client | 调用外部 VLM 服务 | 服务化部署 |
hybrid-http-client | 调用外部混合服务 | 服务化部署 |
- 当前版本的默认后端可能随版本变化,因此以本机 mineru --help 为准。没有 GPU 时明确指定:
-bpipeline
2.6 输出结果
不同版本的具体文件名可能不同,但主要有:
- Markdown:适合查看内容,也可以用于简单分块。
- content list JSON:按照阅读顺序保存标题、正文、表格、图片等元素,最适合后续构建 RAG。
- middle JSON:包含更详细的中间解析和版面信息,适合排查问题。
- images:从文档中提取的图片。
- 可视化结果:用于检查版面框和元素识别是否正确。
RAG 中建议以 content list JSON 为主,因为它比单纯 Markdown 更容易保留页码、类型和位置信息。
三,文档解析工具-Docling
3.1 Docling 定位
- Docling 是一个多格式文档解析、转换和分块框架。
- 它会把不同格式的文件统一转换成结构化的
DoclingDocument。 DoclingDocument可以继续导出为 Markdown、JSON、HTML,或者直接进行 RAG 分块。- Docling 支持完全本地运行,文档不需要上传到云端。
3.2 Docling 能干什么
- Docling 支持的主要输入格式包括 PDF、DOCX、PPTX、XLSX、HTML、Markdown、图片、EPUB、LaTeX、纯文本、邮件和部分音频格式。
- Docling 可以识别和保留以下内容:
| 内容 | 解析结果 |
|---|
| 标题 | 保留标题及层级 |
| 正文 | 提取段落和阅读顺序 |
| 列表 | 保留列表结构 |
| 表格 | 识别行、列和单元格 |
| 图片 | 提取图片和图片标题 |
| 扫描文字 | 通过 OCR 识别 |
| 公式和代码 | 保留对应内容类型 |
| 元数据 | 保存来源、页码和位置信息 |
3.3 安装步骤
3.3.1 CLI 安装
# 创建虚拟环境uv venv.venv# 激活虚拟环境.venv\Scripts\Activate.ps1# 安装 Doclinguv pip install docling# 检查安装docling--version docling--help
- 使用 HuggingFace tokenizer 进行 RAG 分块时,可以安装:
uv pip install"docling-core[chunking]"
3.4 基本用法
3.4.1 CLI 用法
docling".\samples\document.pdf"--to md--output".\output"
docling".\samples\document.pdf"--to json--output".\output"
--to用于指定输出格式,--output用于指定输出目录。
3.4.2 Python 用法
fromdocling.document_converterimportDocumentConverter converter=DocumentConverter()result=converter.convert("./samples/document.pdf")doc=result.document markdown=doc.export_to_markdown()data=doc.export_to_dict()html=doc.export_to_html()
result.document是统一的DoclingDocument。- 后续导出、遍历元素和分块都基于这个对象进行。
3.5 PDF 解析配置
- 包含扫描页面和表格的 PDF,可以启用 OCR 和表格结构识别:
fromdocling.datamodel.base_modelsimportInputFormatfromdocling.datamodel.pipeline_optionsimportPdfPipelineOptionsfromdocling.document_converterimportDocumentConverter,PdfFormatOption options=PdfPipelineOptions(do_ocr=True,do_table_structure=True,)converter=DocumentConverter(format_options={InputFormat.PDF:PdfFormatOption(pipeline_options=options)})result=converter.convert("./samples/document.pdf")doc=result.document
| 参数 | 作用 |
|---|
do_ocr | 对扫描页面和图片文字执行 OCR |
do_table_structure | 识别表格行列和单元格结构 |
generate_page_images | 生成完整页面图片 |
generate_picture_images | 提取文档中的图片区域 |
images_scale | 控制生成图片的清晰度 |
do_picture_description | 使用视觉模型生成图片描述 |
options.generate_picture_images=Trueoptions.images_scale=2.0
3.6 输出结果
| 输出 | 作用 |
|---|
| Markdown | 人工查看、结果校验和简单处理 |
| JSON | 保存完整的DoclingDocument结构 |
| HTML | 在网页中展示解析结果 |
| DocTags | Docling 使用的结构化标记格式 |
| DoclingDocument | 用于程序处理和 RAG 分块 |
markdown=doc.export_to_markdown()json_data=doc.export_to_dict()html=doc.export_to_html()doctags=doc.export_to_doctags()
- RAG 项目建议直接使用
DoclingDocument进行分块,不需要先导出 Markdown 再重新解析。
3.7 文档分块
3.7.1 HierarchicalChunker
HierarchicalChunker根据标题、段落、列表、表格等文档结构进行分块。
fromdocling.chunkingimportHierarchicalChunker chunker=HierarchicalChunker()chunks=list(chunker.chunk(doc))forchunkinchunks:print(chunk.text)
3.7.2 HybridChunker
HybridChunker先按照文档结构分块,再根据 tokenizer 控制 chunk 长度。- 超长内容会被拆分,相邻且较短的同级内容可以合并。
fromdocling.chunkingimportHybridChunkerfromdocling_core.transforms.chunker.tokenizer.huggingfaceimport(HuggingFaceTokenizer,)tokenizer=HuggingFaceTokenizer.from_pretrained(model_name="BAAI/bge-m3",max_tokens=512,)chunker=HybridChunker(tokenizer=tokenizer,merge_peers=True,)chunks=list(chunker.chunk(doc))forchunkinchunks:embedding_text=chunker.contextualize(chunk)print(chunk.meta.headings)print(embedding_text)
| 分块器 | 适用情况 |
|---|
HierarchicalChunker | 强调标题和文档元素结构 |
HybridChunker | 同时控制结构和 token 长度,适合 RAG |
3.8 RAG 中的使用流程
PDF、Word、HTML、Markdown、图片 ↓ DocumentConverter ↓ DoclingDocument ↓ HybridChunker ↓ BGE-M3 向量化 ↓ Milvus
- 建议向量化
chunker.contextualize(chunk)的结果。 - 入库时保存正文、标题路径、页码、来源、内容类型和文档 ID。
- Markdown 主要用于人工检查,JSON 用于保存完整解析结果,
DoclingDocument和 Chunker 用于正式的 RAG 入库流程。
官方资料:Docling 官方文档、Docling GitHub。