PyMuPDF4LLM,顾名思义,是在PyMuPDF基础上针对大语言模型(LLM)输出专门优化的一款工具。简单来说,它能够把PDF中的数据提取与整理成更适合喂给LLM的格式,极大提升处理效率。

这个库拥有几个令人印象深刻的特点:
多功能Markdown提取
它不仅能够从PDF中抓取文字,更厉害的是可以直接生成结构清晰的Markdown格式。无论是执行基础文本导出,还是为LLM微调准备训练数据,它都能出色地完成任务。
灵活的运用方式
除了常规的文本提取,它还支持按页检索、将数据存储为适合RAG(检索增强生成)任务的格式,甚至能够直接对接LlamaIndex等框架,省去大量中间环节。
丰富的提取功能
不仅限于文字,图像提取、分词、表格抽取等精细操作它也能轻松处理。这在实际应用中非常实用,比如构建知识库或进行情感分析时都能得心应手。
安装方法
上手很简单,一条命令即可完成:
pip install pymupdf4llm
用例1:基础Markdown提取
想获取PDF的Markdown内容?几行代码就能实现:
import pymupdf4llm
md_text = pymupdf4llm.to_markdown("document.pdf")
以Markdown格式导出时,标题、列表等结构都能完整保留,这对于准备LLM训练数据来说堪称完美。
用例2:只提取特定页面
如果只想从大部头的PDF中挑选几页使用,也可以轻松做到:
import pymupdf4llm
# 仅抽取指定的第8页和第9页
md_text = pymupdf4llm.to_markdown("document.pdf", pages=[8, 9])
这样操作,效率自然大幅提升。
用例3:把Markdown存到文件
提取出的内容当然要保存下来:
import pymupdf4llm
import pathlib
md_text = pymupdf4llm.to_markdown("document.pdf")
pathlib.Path("output.md").write_bytes(md_text.encode())
用例4:提取成LlamaIndex可直接使用的文档
如果你的工作流程中使用了LlamaIndex,那就有福了:
import pymupdf4llm
llama_reader = pymupdf4llm.LlamaMarkdownReader()
llama_docs = llama_reader.load_data("document.pdf")
数据格式直接兼容,能够无缝衔接。
用例5:提取图像
PDF中的图片也能轻松抽取出来:
md_text_images = pymupdf4llm.to_markdown(
doc="document.pdf",
pages=[1, 11],
page_chunks=True,
write_images=True,
image_path="images",
image_format="png",
dpi=300
)
用例6:分块提取并附带元数据
如果需要将数据切分成小块处理,同时保留上下文信息,可以这样操作:
md_text_chunks = pymupdf4llm.to_markdown(
doc="document.pdf",
pages=[0, 1, 2],
page_chunks=True
)
用例7:逐字级别的精细提取
对精度有极致要求?它还能以字为单位进行提取:
md_text_words = pymupdf4llm.to_markdown(
doc="document.pdf",
pages=[1, 2],
page_chunks=True,
write_images=True,
image_path="images",
image_format="png",
dpi=300,
extract_words=True
)
print(md_text_words[0]['words'][:5])
用例8:规整地提取表格
碰到PDF中的表格,最怕提取成一团乱码。这个库处理起来则非常规整:
import pymupdf4llm
md_text_tables = pymupdf4llm.to_markdown(
doc="document.pdf",
pages=[12] # 这里指定含有表格的页面
)
print(md_text_tables)
因此,如果你正在搭建RAG系统,或者准备微调自己的LLM,又或者只是想寻找一个顺手且强大的PDF提取工具,PyMuPDF4LLM都值得入手一试。
