前言
笔者今天在处理一批 PDF 文档时,使用了 pyMuPDF 库来提取文本和表格。今天在查阅相关文档时无意间发现了一个名为 pymupdf4llm 的库,它是基于 pyMuPDF 的一个扩展,专门针对将 PDF 内容转换为适合 LLM 输入的 Markdown 格式进行了优化。这个库不仅能提取文本,还能识别表格和图片,并将它们以 Markdown 语法的形式输出,非常适合我们在 RAG 流水线中使用。在这篇文章中,我们先重点关注下pyMuPDF的基本使用。
关于 PyMuPDF
PyMuPDF 是一个功能强大的 Python 库,用于处理 PDF、XPS、OpenXPS、CBZ 和 EPUB 等文档格式。它提供了丰富的 API 来提取文本、图像、表格等内容,并支持对文档进行修改和注释。PyMuPDF 的核心优势在于其高效的解析能力和对复杂文档结构的良好支持,使得它成为处理 PDF 文档的首选工具之一。
安装
在 Python 环境中安装 PyMuPDF 非常简单:
pip install --upgrade pymupdfPyMuPDF 基础功能
1. 打开文档
import fitz # PyMuPDF 的别名
doc = fitz.open("example.pdf") # 打开 PDF 文档(路径填写相对路径或者绝对路径)
print(f"文档页数: {doc.page_count}")这里,doc 是一个 Document 对象,表示打开的 PDF 文档。你可以通过 doc.page_count 获取文档的总页数。如果你查看 doc 对象的类型,你会发现它是一个 Document 类的实例。
print(type(doc)) # <class 'fitz.Document'>2. 提取文本
获取 PDF 文档中第一页的文本内容:
# get text from the first page
doc = fitz.open("example.pdf")
page = doc[0] # 获取第一页
text = page.get_text() # 获取页面文本
print(text) # 打印页面文本如果你想提取所有页面的文本,可以使用循环:
for page_num in range(doc.page_count):
page = doc[page_num]
text = page.get_text()
print(f"第 {page_num + 1} 页的文本内容:\n{text}\n")如果你想将提取的文本保存到一个文本文件中,可以这样做:
with open("extracted_text.txt", "w", encoding="utf-8") as f: ## "w"表示写入模式,encoding="utf-8"确保文本以UTF-8编码保存
for page_num in range(doc.page_count):
page = doc[page_num]
text = page.get_text()
f.write(f"第 {page_num + 1} 页的文本内容:\n{text}\n\n")以上代码会将每页的文本内容写入到 extracted_text.txt 文件中,每页之间用空行分隔。
3. 对 PDF 进行处理
3.1 旋转 PDF
# 旋转
doc = fitz.open("example.pdf")
page = doc[0]
page.set_rotation(90) # 旋转90度
doc.save("example_rotated.pdf") # 保存旋转后的页面
doc.close() # 3.2 裁剪 PDF
# 裁剪
doc = fitz.open("example.pdf")
page = doc[0]
page.set_cropbox(fitz.Rect(100, 100, 400, 400)) # 裁剪页面
doc.save("example_cropped.pdf") # 保存裁剪后的页面
doc.close() 3.3 删除 PDF 页面
# 删除页面
doc = fitz.open("example.pdf")
doc.delete_page(0) # 删除第一页
doc.save("example_deleted.pdf") # 保存删除后的文档
doc.close()类似的,我们还可以使用别的方法来处理 PDF 文档,比如添加水印、合并多个 PDF 文件、提取图像等。PyMuPDF 提供了丰富的 API 来满足各种需求。具体的使用方法可以参考官方文档和社区资源。