PDF-Extract-Kit (PDF内容抽取开源项目)

打印 上一主题 下一主题

主题 596|帖子 596|积分 1788

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输特殊式

  1. {
  2.     "layout_dets": [    # 页中的元素
  3.         {
  4.             "category_id": 0, # 类别编号, 0~9,13~15
  5.             "poly": [
  6.                 136.0, # 坐标为图片坐标,需要转换回pdf坐标, 顺序是 左上-右上-右下-左下的x,y坐标
  7.                 781.0,
  8.                 340.0,
  9.                 781.0,
  10.                 340.0,
  11.                 806.0,
  12.                 136.0,
  13.                 806.0
  14.             ],
  15.             "score": 0.69,   # 置信度
  16.             "latex": ''      # 公式识别的结果,只有13,14有内容,其他为空,另外15是ocr的结果,这个key会换成text
  17.         },
  18.         ...
  19.     ],
  20.     "page_info": {         # 页信息:提取bbox时的分辨率大小,如果有缩放可以基于该信息进行对齐
  21.         "page_no": 0,      # 页数
  22.         "height": 1684,    # 页高
  23.         "width": 1200      # 页宽
  24.     }
  25. }
复制代码
其中category_id(类别)包含的范例如下:
  1. {0: 'title',              # 标题
  2. 1: 'plain text',         # 文本
  3. 2: 'abandon',            # 包括页眉页脚页码和页面注释
  4. 3: 'figure',             # 图片
  5. 4: 'figure_caption',     # 图片描述
  6. 5: 'table',              # 表格
  7. 6: 'table_caption',      # 表格描述
  8. 7: 'table_footnote',     # 表格注释
  9. 8: 'isolate_formula',    # 行间公式(这个是layout的行间公式,优先级低于14)
  10. 9: 'formula_caption',    # 行间公式的标号
  11. 13: 'inline_formula',    # 行内公式
  12. 14: 'isolated_formula',  # 行间公式
  13. 15: 'ocr_text'}              # ocr识别结果
复制代码
效果展示

结合多样性PDF文档标注,训练了鲁棒的布局检测和公式检测模子。在论文、教材、研报、财报等多样性的PDF文档上,pipeline都能得到准确的提取结果,对于扫描含糊、水印等情况也有较高鲁棒性。

使用教程

情况安装 (Linux)

  1. conda create -n pipeline python=3.10
  2. pip install -r requirements.txt
  3. pip install --extra-index-url https://miropsota.github.io/torch_packages_builder detectron2==0.6+pt2.3.1cu121
复制代码
安装完情况后,可能会遇到一些版本冲突导致版本变动,如果遇到了版本相关的报错,可以尝试下面的命令重新安装指定版本的库。
  1. pip install pillow==8.4.0
复制代码
除了版本冲突外,可能还会遇到torch无法调用的错误,可以先把下面的库卸载,然后重新安装cuda12和cudnn。
  1. pip uninstall nvidia-cusparse-cu12
复制代码
运行提取脚本

  1. python pdf_extract.py --pdf data/pdfs/ocr_1.pdf
复制代码
参数表明:


  • pdf :待处理的pdf文件,如果传入一个文件夹,则会处理文件夹下的所有pdf文件。
  • output: 处理结果保存的路径,默认是"output"
  • vis: 是否对结果可视化,是则会把检测的结果可视化出来,重要是检测框和类别
  • render: 是否把识别得的结果渲染出来,包罗公式的latex代码,以及普通文本,都会渲染出来放在检测框中。注意:此过程非常耗时,别的也需要提前安装xelatex和imagemagic。
   本项目专注使用模子对多样性文档进行高质量内容提取,不涉及提取后内容拼接成新文档,如PDF转Markdown。如果有此类需求,请参考另一个Github项目: MinerU
  
在Windows上运行 : 在Windows情况下使用PDF-Extract-Kit

在macOS上运行: 在macOS系统使用PDF-Extract-Kit


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

自由的羽毛

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表