当前位置: 首页 > news >正文

用 pymupdf4llm 打造 PDF → Markdown 的高效 LLM 数据管道(附实战对比)

很多朋友在做 知识库问答RAG文档摘要 时都会遇到一个头痛的问题:PDF 文件怎么转成结构清晰、可检索、能直接输入 LLM 的文本?

如果只是用 pdfminerPyPDF2 之类的传统库,通常会遇到:

  • 段落顺序错乱

  • 多栏文本拼在一起

  • 表格丢失

  • 图片缺失

  • 标题/加粗/斜体等完全没了

pymupdf4llm 的出现,就解决了这些痛点。它基于 PyMuPDF,把 PDF 转换为 GitHub 风格 Markdown,保留标题、表格、列表、样式,还能导出图片,非常适合直接作为 LLM 输入。

环境准备

安装非常简单:

pip install -U pymupdf4llm

如果需要对扫描版 PDF 做 OCR,可以配合 pytesseract 或其他 OCR 库使用。

Demo 1:基础用法

先把一个 PDF 转成 Markdown 文本:

import pymupdf4llmmd_text = pymupdf4llm.to_markdown("sample.pdf")with open("output.md", "w", encoding="utf-8") as f:f.write(md_text)

运行后你会发现 output.md 格式非常清晰:

  • 标题自动变成 # Heading

  • 粗体、斜体、等宽代码都保留

  • 列表和表格也能转出来

对比传统 pdfminer 抽出来的纯文本,简直就是质的飞跃。

Demo 2:分页切块(RAG 最佳实践)

RAG 系统通常希望把长文档分成“小块”,这样检索时更精确。

data = pymupdf4llm.to_markdown("sample.pdf", page_chunks=True)print(data[0].keys())
# 输出: dict_keys(['metadata', 'text'])
print(data[0]['metadata'])
print(data[0]['text'][:200])  # 打印前 200 个字符

这样每一页就变成一个独立的数据块,可以直接丢给 LlamaIndexLangChain 作为知识库文档。

Demo 3:导出图片和矢量图

有些报告里的图表、流程图也很重要,可以一并导出:

md_with_images = pymupdf4llm.to_markdown("sample.pdf",write_images=True,image_folder="images_out",dpi=200
)
  • 所有图片会保存到 images_out 文件夹

  • 在 Markdown 里会自动插入 ![](images_out/page-001-img-1.png) 这种引用

这样 Markdown 文件里既有文字,也能保持图片信息。

Demo 4:与 LlamaIndex 集成

直接转换成 LlamaIndex 文档对象,一步到位:

from pymupdf4llm import LlamaMarkdownReaderreader = LlamaMarkdownReader()
documents = reader.load_data("sample.pdf")print(len(documents))
print(documents[0].metadata)
print(documents[0].text[:300])

这样 documents 就能直接喂给 LlamaIndex 的向量索引。

性能对比(pymupdf4llm vs 传统方法)

我用一份 100 页的技术手册测试:

工具输出内容是否保留结构耗时(100 页)可读性
PyPDF2纯文本~15 秒差,排版乱
pdfminer.six纯文本~25 秒一般,换行错乱
pymupdf4llmMarkdown + 图片~30 秒非常好,接近原文排版

可以看到,pymupdf4llm 在速度上并不落后(基于 PyMuPDF 的高效 C++ 内核),而在输出质量上远远优于传统方案。

实战场景

  1. 学术论文问答
    把整本论文集转成 Markdown 分块,直接让 LLM 回答“第 3 篇论文结论是什么?”

  2. 企业内部知识库
    把员工手册、技术白皮书、合同转成结构化 Markdown,再导入向量数据库。

  3. 自动摘要与报告生成
    利用 Markdown 的层级结构,让模型快速提取章节要点,生成高质量摘要。

总结

如果你在做 文档处理 + LLM 应用,推荐直接用 pymupdf4llm,它的优势在于:

  • 输出 Markdown,结构保留度高

  • 支持分页、分块,非常适合 RAG

  • 图片、表格、列表、样式都能提取

  • 与 LlamaIndex 等生态无缝对接

一句话总结:
👉 它是目前最实用的 PDF → LLM 数据转换工具之一

http://www.dtcms.com/a/389901.html

相关文章:

  • 机械设备钢材建材网站 网站模版
  • Mysql8 SQLSTATE[42000] sql_mode=only_full_group_by错误解决办法
  • 【第五章:计算机视觉-项目实战之图像分类实战】2.图像分类实战-(3)批量归一化(Batch Normalization)和权重初始化的重要性
  • SQL Server 多用户读写随机超时?从问题分析到根治方案
  • 2.css的继承性,层叠性,优先级
  • OpenStack 学习笔记(四):编排管理与存储管理实践(上)
  • list_for_each_entry 详解
  • Perplexity AI Agent原生浏览器Comet
  • 颈椎按摩器方案开发,智能按摩仪方案设计
  • Sui 学习日志 1
  • 六、Java—IO流
  • 数据库 事务隔离级别 深入理解数据库事务隔离级别:脏读、不可重复读、幻读与串行化
  • 从“纸面”到“人本”:劳务合同管理的数字化蜕变
  • ARM架构——学习时钟7.2
  • VS Code 调试配置详解:占位符与语言差异
  • 锁 相关知识总结
  • caffeine 发生缓存内容被修改以及解决方案-深度克隆
  • rust编写web服务06-JWT身份认证
  • 《怪猎:荒野》制作人:PC平台对日本游戏非常重要
  • 大模型训练框架(二)FSDP
  • MySQL——系统数据库、常用工具
  • 蓝桥杯题目讲解_Python(转载)
  • 性能测试监控实践(九):性能测试时,监控docker微服务资源利用率和分析
  • TCP,UDP和ICMP
  • Python语法学习篇(七)【py3】
  • 网页控制鼠标 查看鼠标位置
  • PIT 定时器
  • 【题解】 [蓝桥杯 2019 省 B] 特别数的和
  • 数字隔离器,串口通信的安全之“芯”
  • 山脊图 (Ridgeline Plot):使用 joypy 库,优雅地比较多组数据的分布情况