专业的 PDF 解析库 - 基于 RAGFlow DeepDoc 模块抽取
这是一个从 RAGFlow 项目的 DeepDoc 模块中抽取出来的专门用于 PDF 解析的 Python 库。它提供了强大的 PDF 文档解析能力,支持 OCR 文字识别、智能布局分析、表格提取等高级功能。
- 🔍 智能 OCR 识别 - 基于深度学习的文字识别,支持中英文混合文档
- 📄 布局分析 - 自动识别文档结构,区分标题、正文、表格、图片等
- 📊 表格提取 - 智能识别和提取表格内容,输出结构化 HTML
- 🚀 高性能 - 支持并行处理,提高解析速度
- 🎯 智能分块 - 自动将文档分割成有意义的文本块
- 📱 易于使用 - 提供简洁的 API 接口,一行代码即可使用
使用 uv(推荐):
uv add deepdoc-pdfparser
使用 pip:
pip install deepdoc-pdfparser
其他操作系统可根据具体的报错信息以此安装依赖项。
import nltk
nltk.download('wordnet')
brew install libomp poppler tesseract libmagic ghostscript pandoc
from deepdoc_pdfparser import parse_pdf
# 解析PDF文件
result = parse_pdf("document.pdf")
# 查看解析结果
print(f"共解析出 {len(result)} 个文本块")
print(f"包含 {len(result.tables)} 个表格")
# 遍历文本块
for chunk in result:
print(f"页码: {chunk.page_number}")
print(f"内容: {chunk.content}")
print(f"布局类型: {chunk.layout_type}")
print("-" * 50)
from deepdoc_pdfparser import extract_text
# 直接提取所有文本
text = extract_text("document.pdf")
print(text)
from deepdoc_pdfparser import extract_text_by_page
# 提取第一页的文本
page_text = extract_text_by_page("document.pdf", page_number=0)
print(page_text)
from deepdoc_pdfparser import extract_tables
# 提取所有表格(HTML格式)
tables = extract_tables("document.pdf")
for i, table_html in enumerate(tables):
print(f"表格 {i+1}:")
print(table_html)
from deepdoc_pdfparser import PdfParser
# 创建解析器实例
parser = PdfParser()
# 自定义进度回调
def progress_callback(progress, message):
print(f"进度: {progress:.1%} - {message}")
# 解析指定页面范围
result = parser.parse(
"document.pdf",
from_page=0, # 起始页(从0开始)
to_page=10, # 结束页
callback=progress_callback
)
# 按页面获取文本
page_2_text = result.get_text_by_page(2)
print(page_2_text)
# 按页面获取表格
page_2_tables = result.get_tables_by_page(2)
for table in page_2_tables:
print(table.html)
from deepdoc_pdfparser import parse_pdf_binary
# 从二进制数据解析
with open("document.pdf", "rb") as f:
pdf_binary = f.read()
result = parse_pdf_binary(pdf_binary, filename="document.pdf")
专业的 PDF 解析器,支持 OCR 和布局分析。
方法:
parse(pdf_path, from_page=0, to_page=100000, callback=None, **kwargs)
- 解析 PDF 文件parse_binary(pdf_binary, filename="document.pdf", **kwargs)
- 解析二进制数据
使用深度学习模型解析 PDF 文件的主要函数。
参数:
pdf_path
(str): PDF 文件路径from_page
(int): 起始页码(从 0 开始)to_page
(int): 结束页码callback
(Callable): 进度回调函数**kwargs
: 其他参数
返回:
ParseResult
: 解析结果对象
提取 PDF 中的所有文本。
参数:
pdf_path
(str): PDF 文件路径**kwargs
: 其他参数
返回:
str
: 提取的文本内容
提取 PDF 指定页面的文本。
参数:
pdf_path
(str): PDF 文件路径page_number
(int): 页码(从 0 开始)**kwargs
: 其他参数
返回:
str
: 提取的文本内容
提取 PDF 中的所有表格(HTML 格式)。
参数:
pdf_path
(str): PDF 文件路径**kwargs
: 其他参数
返回:
List[str]
: 表格的 HTML 列表
解析 PDF 二进制数据。
参数:
pdf_binary
(bytes): PDF 二进制数据filename
(str): 文件名(用于显示)**kwargs
: 其他参数
返回:
ParseResult
: 解析结果对象
解析结果容器。
属性:
chunks: List[ChunkResult]
- 文本块列表tables: List[TableResult]
- 表格列表metadata: Dict[str, Any]
- 元数据
方法:
get_text() -> str
- 获取所有文本get_text_by_page(page_number: int) -> str
- 获取指定页面文本get_tables_by_page(page_number: int) -> List[TableResult]
- 获取指定页面表格
文本块结果。
属性:
content: str
- 文本内容page_number: int
- 页码position: Optional[Tuple[float, float, float, float]]
- 位置信息layout_type: Optional[str]
- 布局类型confidence: Optional[float]
- 置信度raw_data: Optional[Dict[str, Any]]
- 原始数据
表格结果。
属性:
html: str
- 表格 HTMLpage_number: Optional[int]
- 页码position: Optional[Tuple[float, float, float, float]]
- 位置信息
from deepdoc_pdfparser import parse_pdf, extract_text, extract_tables
# 解析PDF文件
pdf_path = "example.pdf"
# 方法1: 使用便捷函数快速提取文本
text = extract_text(pdf_path)
print("提取的文本:")
print(text)
# 方法2: 使用便捷函数提取表格
tables = extract_tables(pdf_path)
print(f"\n找到 {len(tables)} 个表格:")
for i, table in enumerate(tables):
print(f"表格 {i+1}:")
print(table)
# 方法3: 使用完整解析获取详细信息
result = parse_pdf(pdf_path)
print(f"\n解析结果:")
print(f"总文本块: {len(result.chunks)}")
print(f"总表格: {len(result.tables)}")
print(f"元数据: {result.metadata}")
# 查看每个文本块的详细信息
for chunk in result.chunks:
print(f"页码: {chunk.page_number}")
print(f"布局类型: {chunk.layout_type}")
print(f"内容: {chunk.content[:100]}...")
if chunk.position:
print(f"位置: {chunk.position}")
print("-" * 50)
本库依赖于 RAGFlow 的 DeepDoc 模块。请确保:
- 已正确安装所有依赖
- 模型文件位于正确的路径
- 系统有足够的内存处理大型 PDF 文件
欢迎贡献代码!请:
- Fork 项目
- 创建功能分支
- 提交更改
- 推送到分支
- 创建 Pull Request
本项目采用 Apache 2.0 许可证。详见 LICENSE 文件。
本项目基于 RAGFlow 项目的 DeepDoc 模块开发。感谢 RAGFlow 团队的出色工作。
如果您遇到问题或有功能请求,请:
注意: 这是一个实验性项目,从 RAGFlow 中抽取。建议在生产环境使用前进行充分测试。