PDF、Word、HTML、Markdown、图片等文档解析工具MinerU和Docling

文章目录

  • 一,多种文档解析意义
  • 二,文档解析工具-MinerU
    • 2.1MinerU定位
    • 2.2 MinerU能干什么
    • 2.3 安装步骤
      • 2.3.2 CIL安装
    • 2.3 基本用法
    • 2.4 三种解析方式
    • 2.5 后端选择
    • 2.6 输出结果
  • 三,文档解析工具-Docling
    • 3.1 Docling 定位
    • 3.2 Docling 能干什么
    • 3.3 安装步骤
      • 3.3.1 CLI 安装
    • 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 基本用法

  • 纯 CPU 环境建议先使用 pipeline:
mineru-p".\samples\document.pdf"`-o".\output"`-bpipeline`-mauto`-lch
  • 参数含义:
参数作用
-p输入文件或目录
-o输出目录
-b选择解析后端
-m选择文字提取方式
-lOCR 文档语言
-s-e指定开始页和结束页
-t是否解析表格
-f是否解析公式

2.4 三种解析方式

模式适用情况
auto自动判断,日常默认使用
txtPDF 有完整且正常的文字层
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 用法

  • 转换成 Markdown:
docling".\samples\document.pdf"--to md--output".\output"
  • 转换成 JSON:
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 输出结果

  • Docling 主要支持以下输出:
输出作用
Markdown人工查看、结果校验和简单处理
JSON保存完整的DoclingDocument结构
HTML在网页中展示解析结果
DocTagsDocling 使用的结构化标记格式
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。