之前有分享过一些处理常见格式文件的策略,今天分享一些非常比较好用提取python生态下的第三方库以及工具。
一、python的几个第三方库
1、PyMUPDF ------通用打法
首当其冲的就是PyMuPDF了,它又叫fitz。很多人直接 import fitz,它的包名叫 PyMuPDF,是基于 MuPDF 引擎的 Python 第三方库,用于 PDF、XPS、EPUB 等文档处理,PDF 文本 / 图片提取能力极强,速度快、占用低。
| 维度 | 评分 |
|---|---|
| 文本提取 | ⭐⭐⭐⭐ |
| 表格提取 | ⭐⭐ |
| 精度控制 | ⭐⭐⭐⭐⭐ |
| 速度 | ⭐⭐⭐⭐⭐ |
| 学习曲线 | di |
注意:在安装这个模块的时候,命令是pip install PyMuPDF,不是pip install fitz!fitz 只是导入时的模块名,安装包叫PyMuPDF。
常用API:
1、打开文档提取所有文本
python
import fitz # PyMuPDF
doc = fitz.open("document.pdf")
for page in doc:
text = page.get_text()
images = page.get_images(full=True)
注意: 中文混合排版时,文本顺序可能不完美,但大部分场景够用。
2. pdfplumber --- 表格提取之王
| 维度 | 评分 |
|---|---|
| 文本提取 | ⭐⭐⭐⭐ |
| 表格提取 | ⭐⭐⭐⭐⭐ |
| 精度控制 | ⭐⭐⭐⭐⭐ |
| 速度 | ⭐⭐⭐ |
| 学习曲线 | 中 |
特点: 在 pdfminer.six 之上封装,提供精确的字符级定位和可视化调试。提取表格时能精确识别单元格边界。
最佳场景: 报表、发票、结构化表格数据。
python
import pdfplumber
with pdfplumber.open("invoice.pdf") as pdf:
for page in pdf.pages:
tables = page.extract_tables()
text = page.extract_text()
注意: 比 PyMuPDF 慢,处理大文件(几百页)时明显。
3. Camelot --- 表格专项
| 维度 | 评分 |
|---|---|
| 表格提取 | ⭐⭐⭐⭐⭐ |
| 准确性 | ⭐⭐⭐⭐⭐ |
| 安装复杂度 | ⭐⭐(有依赖) |
| 速度 | ⭐⭐⭐ |
| 学习曲线 | 中高 |
特点: 提供两种模式 --- Lattice(有边框线)和 Stream(无边框线,靠空格对齐)。内置准确度评分。
最佳场景: 复杂表格、无边框表格、需要高精度表格场景。
python
import camelot
tables = camelot.read_pdf("report.pdf", flavor="lattice")
tables[0].df # 转为 DataFrame
tables[0].accuracy # 准确度评分
注意: 依赖 Ghostscript 和 OpenCV,安装稍麻烦。Windows 上配置环境变量劝退过不少人。
二、OCR 方案(图片型)
当 PDF 是扫描件(图片组成),上述所有库都无能为力,必须 OCR。
1. PaddleOCR --- 中文 OCR 王者
百度出品,中文识别效果目前最强。内置版面分析,能识别表格结构。
python
from paddleocr import PaddleOCR
ocr = PaddleOCR(use_angle_cls=True, lang="ch")
result = ocr.ocr("scanned.pdf", cls=True)
注意: 模型较大(~15MB),首次加载慢。GPU 加速后性能不错。
2. EasyOCR --- 开箱即用
python
import easyocr
reader = easyocr.Reader(["ch_sim", "en"])
result = reader.readtext("scan.pdf")
注意: 速度慢,精度中等,但 API 最简单。
三、推荐组合
| 场景 | 推荐方案 |
|---|---|
| 通用文本提取 | PyMuPDF(最快够用) |
| 提取表格数据 | pdfplumber(首选)或 Camelot(精度要求高时) |
| 扫描件/图片PDF | PaddleOCR |
| 批量处理 | PyMuPDF + pdfplumber 混合 |
| 全都要 | PyMuPDF 提取文本 + pdfplumber 提取表格 + PaddleOCR 处理扫描页 |
除了以上一些python的第三方库,另外还有一些工具。
四、PDF 提取工具
1. Marker --- 转 Markdown 的首选
将 PDF 快速转为 Markdown,内置 OCR 兜底、版面分析、公式识别。
bash
pip install marker-pdf
marker /path/to/pdf /path/to/output
特点: 输出干净,支持多语言、表格、公式。比传统库的提取结果更"像人读的"。
缺点: 需要 GPU 才能跑得快,纯 CPU 慢。
2. Docling
IBM 开源,基于深度学习做版面理解和文档解析。输出 Markdown 或 JSON,支持表格、图片、标题层级识别。
python
from docling.document_converter import DocumentConverter
converter = DocumentConverter()
result = converter.convert("report.pdf")
print(result.document.export_to_markdown())
特点: 深度理解文档结构,不只是"把文字串起来"。
3. MinerU(PDF-Extract-Kit)
上海 AI Lab 开源,学术论文提取精度很高,支持公式 LaTeX 还原。
特点: 学术场景最强,排版还原度好。
4. LlamaParse(云服务)
LlamaIndex 旗下的 PDF 解析服务,API 调用,支持表格、图片、复杂排版。
python
from llama_parse import LlamaParse
parser = LlamaParse(result_type="markdown")
docs = parser.load_data("report.pdf")
特点: 精度极高,但按页收费,适合小批量高质量需求。
怎么选?
| 对比维度 | 传统库(PyMuPDF/pdfplumber) | 新派工具(Marker/Docling) |
|---|---|---|
| 速度 | 快,毫秒级 | 慢,秒级甚至分钟级 |
| 硬件要求 | 无 | 最好有 GPU |
| 输出质量 | 原始文本,可能乱序 | 结构化 Markdown,排版还原 |
| 表格 | pdfplumber 不错 | 更好,但也不是完美 |
| 适合场景 | 批量处理、简单提取 | 高质量文档转换、RAG 预处理 |
总结: 先判断 PDF 复杂度。简单报表用 PyMuPDF/pdfplumber。复杂排版/学术论文/多栏布局,直接上 Marker 或 Docling,省得自己调参。