概述
PDF是一种日常工作中广泛使用的跨平台文档格式,常常包含丰富的内容:包括文本、图表、表格、公式、图像。在现代信息处理工作流中发挥了重要的作用,尤其是RAG项目中,通过将非结构化数据转化为结构化和可访问的信息,极大地提高了信息检索和生成的准确性、效率和实用性。所以PDF文档提取在RAG中显得尤为重要。
目前提取PDF文档内容的思路主要分为三个精细度:
- 直接解析PDF的内容流和内部结构,获取文本和元素信息。这种方式只适合标准的PDF,扫描版的PDF无法识别。
- 基于布局分析小模型和OCR模型识别文本块、段落和表格等。这种方式适用于标准版和扫描版的PDF,满足大多数需求,但是如果PDF非标准化布局,效果就不太好。OCR工具可以识别文字,布局分析模型识别PDF的基本布局和元素。
- 基于布局分析模型、OCR模型、识别公式和表格的模型,识别PDF中更加丰富的元素。这种方法能识别复杂和丰富的各种PDF元素,但是基于大模型,需要的资源较多,并且在CPU环境下速度较慢,需要基于GPU运行。
下面是几个开源的PDF提取工具分析调研和总结,希望能跟感兴趣的同行一起分享学习。
PyMuPDF
这是一个Python处理PDF的神器,后面会重点写博客,介绍这个工具的使用技巧和方法。
PyMuPDF 是一个基于 MuPDF 引擎的轻量级 PDF 处理库,用于在 Python 中处理和分析 PDF (和其他)文档。它提供了丰富的功能,包括从 PDF 中提取文本和图像、处理注释、生成页面截图等。PyMuPDF 的设计目标是高效、灵活且易于使用,适合需要对 PDF 文档进行深入处理的开发者和数据分析师。
基本原理
核心依赖于 MuPDF 引擎,MuPDF 是一款高性能的 PDF 和 XPS 渲染器,专注于快速、紧凑的 PDF 处理。PyMuPDF 将 MuPDF 的强大功能通过 Python 接口暴露出来,提供给用户。
- 页面渲染:MuPDF 使用高效的渲染算法,将 PDF 页面内容转换为位图图像。PyMuPDF 可以直接调用这些渲染功能,将页面生成高质量的图像文件。
- 文本和图像提取:MuPDF 能够解析 PDF 文档的内容流,识别出其中的文本、图像和绘制对象。PyMuPDF 使用这些解析功能,将文本和图像提取为 Python 对象。
- 内容结构分析:MuPDF 的解析引擎可以读取 PDF 的内部结构,PyMuPDF 基于此提供页面内容分析功能,允许用户深入了解 PDF 页面各个部分的构成。
主要功能
- 文本提取:
- 直接从 PDF 页面中提取文本,支持提取特定区域的文本内容。
- 可以按段落、行或单词提取文本,同时保留文本的布局信息。
- 图像提取:
- 从 PDF 页面中提取嵌入的图像,支持提取图像对象和绘制的矢量图形。
- 可以指定页面区域来提取部分图像内容。
- 页面渲染:
- 将 PDF 页面渲染为图像文件(如 PNG、JPEG),用于创建页面截图或预览。
- 支持设置渲染分辨率和缩放比例,以满足不同分辨率下的需求。
- 处理注释和标注:
- 读取和提取 PDF 页面上的注释和标注(如高亮、下划线、注释框)。
- 可以添加、删除或修改页面上的注释对象。
- PDF 文件操作:
- 支持合并、分割、旋转、裁剪和重新排列 PDF 页面。
- 可以创建新的 PDF 文档,添加文本、图像和图形。
- 页面搜索:
- 在 PDF 文档中搜索特定的文本内容,返回匹配文本的位置和所在页面。
- 内容分析:
- 提供对 PDF 页面内容(如文本块、图形、形状、路径等)的详细分析功能,帮助用户了解页面的结构和内容布局。
实际使用效果
优点:
- 可以准确的提取出正常PDF中的所有元素和bbox布局,包括文字、表格和图片。文字的识别准确率基本高于99%。
- 可以直接进行PDF页面的拷贝和截取
- 可以直接把PDF页面转换为图片
- 可以合并、分割、旋转、裁剪和重新排列PDF页面
缺点:
- 识别图片只能识别图层,某些复杂的PDF识别出来的图片并不是原始的图片
- 识别表格,容易把表格邻近的文字识别进去
- 无法识别公式
- 无法自动去除页眉页脚
扩展功能
1. PyMuPDF4LLM
支持将PDF转换为Markdown格式,也支持输出LlamaIndex的文档输出。可以识别文本、表格、图片和标题。