camelot是怎么做表格抽取的(一)—— camelot框架概览

背景介绍

最近在做一个表格信息抽取的项目,该项目需要从pdf文件中找到的目标表格,并把目标表格中需要的行和列给抽取出来。由于项目中pdf扫描件占比相对较少(不太到10%吧),所以目前主要把精力花在可编辑pdf文件的表格抽取上。更多的背景介绍这里就不展开了,感兴趣的朋友可以到冰焰虫子-github pages探索发现频道-知乎专栏找《pdfplumber是怎么做表格抽取的》系列看一下。

camelot是作者调研的众多开源框架中效果相对比较好的之一,接下来,本文将对camelot框架进行简单的梳理,主要包括与camelot相关的一些资源以及camelot的各项功能。有关camelot具体功能的梳理与剖析会在后续的文章中陆续给出,欢迎各位看官阅读、点赞、收藏 ^_^。

camelot相关资源

  • camelot项目页
  • camelot代码仓库,有两个,其中一个可以直接通过上面的项目页跳转,可以把两个仓库看作是项目的不同分支。
    • camelot-dev: 这个可以直接从项目跳转,但是只有400多星,why?
    • atlanhq:这个2600星
  • Excalibur:基于camelot的前端可视化pdf抽取工具,可以通过Excalibur体验、测试camelot的效果。
  • camelot实现了Anssi Nurminen硕士论文中用于抽取非线框类表格的算法

camelot功能

功能完备性

camelot是一个可以从可编辑的pdf文档中抽取表格的开源框架,与pdfplumber相比,其功能的完备性要差不少,因为除了表格抽取之外,并不能用它从pdf文档中解析出字符、单词、文本、线等较为低层次的对象。在表格抽取的过程中,camelot使用pdfminer实现底层对象的解析,但是这些底层对象的抽取逻辑并没有封装成通用的函数或方法,所以用camelot获取底层对象还是不太方便的。

两种表格抽取模式

camelot的主要功能是表格抽取,支持latticestream两种不同的模式,其中lattice用来抽取线框类的表格,stream用来抽取非线框类的表格。

在抽取线框类表格的时候,lattice包含以下几步:

  1. 把pdf页面转换成图像
  2. 通过图像处理的方式,从页面中检测出水平方向和竖直方向可能用于构成表格的直线。
  3. 根据检测出的直线,生成可能表格的bounding box
  4. 确定表格各行、列的区域
  5. 根据各行、列的区域,水平、竖直方向的表格线以及页面文本内容,解析出表格结构,填充单元格内容,最终形成表格对象。

在抽取线框类表格的时候,stream包含以下几步:

  1. 通过pdfminer获取连续字符串
  2. 通过文本对齐的方式确定可能表格的bounding box
  3. 确定表格各行、列的区域
  4. 根据各行、列的区域以及页面上的文本字符串,解析表格结构,填充单元格内容,最终形成表格对象。

文章作者:Aaron Li

原始链接:http://iceflameworm.github.io/2020/01/13/camelot-table-extraction-1/

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。