Github 地址:https://github.com/opendatalab/PDF-Extract-Kit
整体介绍
PDF文档中包含大量知识信息,例如文本、表格、图像、公式等。此外,PDF的文档布局也相当复杂,页眉、页脚、表格标题、图片标题等等,提取高质量的PDF内容并非易事。将PDF内容提取工作进行拆解:
- 布局检测:使用LayoutLMv3模型进行区域检测,如
图像
,表格
,标题
,文本
等; - 公式检测:使用YOLOv8进行公式检测,包含
行内公式
和行间公式
; - 公式识别:使用UniMERNet进行
公式识别
; - 光学字符识别:使用PaddleOCR进行
文本识别
;
注意: 由于文档类型的
多样性
,现有开源的布局检测
和公式检测
很难处理多样性的PDF文档,为此内容采集多样性数据进行标注和训练
,使得在各类文档上取得精准的检测效果,细节参考布局检测和公式检测部分。
对于公式识别,UniMERNet
方法可以媲美商业软件,在各种类型公式识别上均匀很高的质量。
对于OCR,我们采用PaddleOCR
,对中英文OCR效果不错。
PDF内容提取框架如下图所示
PDF-Extract-Kit输出格式
{
"layout_dets": [ # 页中的元素
{
"category_id": 0, # 类别编号, 0~9,13~15
"poly": [
136.0, # 坐标为图片坐标,需要转换回pdf坐标, 顺序是 左上-右上-右下-左下的x,y坐标
781.0,
340.0,
781.0,
340.0,
806.0,
136.0,
806.0
],
"score": 0.69, # 置信度
"latex": '' # 公式识别的结果,只有13,14有内容,其他为空,另外15是ocr的结果,这个key会换成text
},
...
],
"page_info": { # 页信息:提取bbox时的分辨率大小,如果有缩放可以基于该信息进行对齐
"page_no": 0, # 页数
"height": 1684, # 页高
"width": 1200 # 页宽
}
}
其中category_id(类别)包含的类型如下:
{0: 'title', # 标题
1: 'plain text', # 文本
2: 'abandon', # 包括页眉页脚页码和页面注释
3: 'figure', # 图片
4: 'figure_caption', # 图片描述
5: 'table', # 表格
6: 'table_caption', # 表格描述
7: 'table_footnote', # 表格注释
8: 'isolate_formula', # 行间公式(这个是layout的行间公式,优先级低于14)
9: 'formula_caption', # 行间公式的标号
13: 'inline_formula', # 行内公式
14: 'isolated_formula', # 行间公式
15: 'ocr_text'} # ocr识别结果
效果展示
结合多样性PDF文档标注,训练了鲁棒的布局检测
和公式检测
模型。在论文、教材、研报、财报等多样性的PDF文档上,pipeline都能得到准确的提取结果,对于扫描模糊、水印等情况也有较高鲁棒性。
使用教程
环境安装 (Linux)
conda create -n pipeline python=3.10
pip install -r requirements.txt
pip install --extra-index-url https://miropsota.github.io/torch_packages_builder detectron2==0.6+pt2.3.1cu121
安装完环境后,可能会遇到一些版本冲突导致版本变更,如果遇到了版本相关的报错,可以尝试下面的命令重新安装指定版本的库。
pip install pillow==8.4.0
除了版本冲突外,可能还会遇到torch无法调用的错误,可以先把下面的库卸载,然后重新安装cuda12和cudnn。
pip uninstall nvidia-cusparse-cu12
运行提取脚本
python pdf_extract.py --pdf data/pdfs/ocr_1.pdf
参数解释:
- pdf :待处理的pdf
文件
,如果传入一个文件夹
,则会处理文件夹下的所有pdf文件。 - output: 处理
结果
保存的路径
,默认是"output" - vis:
是否对结果可视化
,是则会把检测的结果可视化出来,主要是检测框和类别 - render: 是否把识别得的
结果渲染
出来,包括公式的latex代码,以及普通文本,都会渲染出来放在检测框中。注意:此过程非常耗时
,另外也需要提前安装xelatex
和imagemagic
。
本项目专注使用模型对多样性文档进行高质量内容提取,不涉及提取后内容拼接成新文档,如PDF转Markdown。如果有此类需求,请参考另一个Github项目: MinerU