1. 项目概述
在处理PDF文档时,我们经常面临各种挑战:复杂的排版布局、多列文本、表格和图片混排、嵌入字体,以及扫描件需要OCR识别等问题。作为一名长期从事文档处理的技术人员,我发现LangChain结合不同PDF解析库可以很好地解决这些问题。本文将分享四种经过实战验证的PDF处理方案,从最简单的纯文本提取到最复杂的结构化解析,帮助开发者根据实际需求选择最合适的工具。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 环境准备
2.1 安装依赖包
不同的PDF处理方案需要不同的Python库支持。以下是四种主流方案的安装命令:
bash复制# 方案一:PyPDF(最轻量)
pip install pypdf langchain-community
# 方案二:PyMuPDF(功能强大)
pip install pymupdf
# 方案三:Unstructured(智能解析)
pip install "unstructured[pdf]" langchain-unstructured
# 中文OCR支持(可选)
# macOS
brew install tesseract-lang
# Ubuntu
sudo apt-get install tesseract-ocr-chi-sim
# 一键安装所有依赖
pip install pypdf pymupdf "unstructured[pdf]" langchain-community langchain-unstructured
提示:如果处理中文PDF扫描件,强烈建议安装Tesseract的中文语言包,否则OCR识别效果会很差。
2.2 准备测试PDF
为了测试不同方案的效果,建议准备以下几种类型的PDF文件:
- 纯文本技术文档(测试基本文本提取能力)
- 图文混排的产品手册(测试复杂布局处理)
- 包含表格的学术论文(测试表格识别)
- 扫描版PDF文件(测试OCR能力)
3. 方案一:PyPDF(轻量快速)
3.1 基本使用
PyPDF是最简单的PDF处理方案,适合快速提取纯文本内容。以下是使用LangChain封装的PyPDFLoader的示例代码:
python复制from langchain_community.document_loaders import PyPDFLoader
# 加载PDF文件
loader = PyPDFLoader("example.pdf")
data = loader.load()
# 遍历每一页
for i, page in enumerate(data):
print(f"=== 第 {i+1} 页 ===")
print(page.page_content)
print(f"元数据: {page.metadata}")
print("-" * 50)
3.2 特点分析
✅ 优势:
- 安装简单,无外部依赖
- 速度快,内存占用低
- 按页分割,结构清晰
- 适合纯文本PDF
❌ 劣势:
- 不支持复杂布局
- 无法识别文档结构(标题、段落)
- 不支持扫描件OCR
- 表格提取效果差
3.3 适用场景
PyPDF最适合以下情况:
- 只需要提取简单的文本内容
- 对处理速度有较高要求
- 文档结构简单,不需要识别标题、段落等元素
- 处理大量PDF文件时资源受限
4. 方案二:PyMuPDF(功能强大)
4.1 基本功能
PyMuPDF提供了更丰富的PDF处理能力,可以提取图片、链接和元数据等:
python复制import pymupdf
# 打开PDF文件
doc = pymupdf.open("example.pdf")
# 提取所有页面的文本
text = [page.get_text() for page in doc]
print(text)
# 获取文档元数据
print("文档页数:", len(doc))
print("文档标题:", doc.metadata.get("title", "N/A"))
print("文档作者:", doc.metadata.get("author", "N/A"))
doc.close()
4.2 进阶功能
PyMuPDF还支持更多高级功能:
python复制# 提取并保存图片
for img_index, img in enumerate(page.get_images()):
xref = img[0]
base_image = doc.extract_image(xref)
with open(f"image_{img_index}.pn
