目录

  • 一、Camelot库介绍
    • 1.1 项目地址及安装
    • 1.2 基本参数介绍
  • 二、使用方法介绍
    • 2.1 提取规整表格
    • 2.2 提取复杂表格
  • 三、优缺点分析
  • 全部代码

在日常工作学习中,我们经常会遇到需要从PDF文件中提取表格数据的需求。今天,就来分享一个能够很好解决这一需求的Python工具库—— Camelot。首先,我们可以看看官方给出效果图(左图为论文的表格,右图为提取结果)

一、Camelot库介绍

1.1 项目地址及安装

Camelot库是由作者vinayak-mehta开发的一个基于Python语言,提取PDF文件中表格数据的工具库,项目地址为:Camelot,安装方式可以通过pipconda的方式,具体如下所示

类型 安装命令
Using pip pip install camelot-py[cv]
Using conda conda install -c conda-forge camelot-py

1.2 基本参数介绍

Camelot库中主要由read_pdf函数读取PDF文档,其使用方法和参数含义如下所示,更多细节设置可参考官方文档Camelot高级使用参数设置进行学习。

import camelot
tables = camelot.read_pdf('xx.pdf',flavor="stream",pages="1",tables_area=['100,600,600,100'])
tables[0].df #转为data.frame形式
参数 含义及设置
flavor 表格解析方式,默认lattice,常用stream
pages 读取页码,传入类型为字符串,不同页码用逗号分隔(如读取4、5、6页,则设置pages="4,5,6"
table_areas 表格定位,默认自动识别表格,传入类型为列表,用于精确定位表格位置

注意:

1、flavor参数说明lattice的工作机制是利用 ghostscript 将PDF页面转换为图像,再用OpenCV进行处理的;而stream的工作机制是PDFMiner使用margin解析单元格之间有空格的表格以模拟表格。一般情况下,选择stream方式较多。但如果需要以lattice方式读入文件,必须安装ghostscript,并需要将其安装目录下的lib文件和bin文件配置到环境变量中,方可正确执行,否则会报错!

2、table_areas参数说明:[x1,y1,x2,y2][x_1,y_1,x_2,y_2][x1​,y1​,x2​,y2​],x1、x2x_1、x_2x1​、x2​为PDF坐标轴中的开始和结束的位置,y1y_1y1​表示最高点所在行,y2y_2y2​最低点所在行。这一参数会在后续示例演示中详细说明。

二、使用方法介绍

接下来,让我们以提取学术论文中规整和复杂的表格为例,详细介绍下具体使用方法。本次的案例论文为:【数字经济与长三角区域一体化发展——基于空间面板模型的分析】

2.1 提取规整表格

提取表4,考虑该表格在论文第5页,因此设置pages="5".

首先,需要定位表格所在位置

import camelot
import seaborn as sns  #笔者jupyter背景较暗,此库只用来明亮背景
sns.set()def extract_table(filepath,pages,table_area=['100,600,600,100']):table = camelot.read_pdf(filepath,flavor="stream",pages=pages,table_areas = table_area)return table[0]table = extract_table("论文.pdf",'5')
plt = camelot.plot(table,kind="textedge")
plt.show()


根据绘图结果,我们可以知道表格横向范围大致在90-600之间,纵向范围在100-200之间,因此我们设置table_areas
[90,200,600,100]。提取结果如下:

从结果来看,对于这种规整性表格可以完美提取!

2.2 提取复杂表格

现提取论文第6页的表6,如下所示

同理,我们可以按照以上方式先确定位置,再进行提取,这里直接放结果

从结果来看,提取效果依然是不错的,特别是空行的处理!这里,我们再导入Excel看下效果。从图可知,基本上只要再微调下,就与原表格保持一致。


此外,如果遇到更加复杂的表格,还可以通过设置split_textrow_col进行微调,这里可参照Camelot参数进阶设置进行学习。

三、优缺点分析

优点:一旦给定表格位置后,识别效果较为优秀。(有兴趣的小伙伴也可以去了解下pdfplumber库,它与Camelot的识别结果差异还是挺大的)

缺点:无法批量导出表格,如要精准识别每次还需要人为给定表格位置,效率较低。此外,Camelotpdfplumber只能识别文字性的pdf文档,对图片型的pdf文档不能有效识别。对于这一部分的识别,还是得依靠一些深度学习算法实现,期待未来大佬们的开发。

全部代码

import camelot
import seaborn as sns  #笔者jupyter背景较暗,此库只用来明亮背景
sns.set()def extract_table(filepath,pages,table_area=['100,600,600,100']):table = camelot.read_pdf(filepath,flavor="stream",pages=pages,table_areas = table_area)return table[0]#定位
table = extract_table("论文.pdf",'5')
plt = camelot.plot(table,kind="textedge")
plt.show()#提取
extract_table('论文.pdf','5',['90,200,600,100']).df

以上就是本次分享的全部内容~

Python 一键提取PDF版论文表格数据相关推荐

  1. 【办公自动化】使用Python一键提取PDF中的表格到Excel(文末送书5本)

  2. 怎么提取pdf中的表格数据_如何从pdf第1部分中提取表格数据

    怎么提取pdf中的表格数据 In this article, we talk about the challenges and principles of extracting tabular dat ...

  3. Python办公自动化——提取pdf文件中表格并到Excel

    Python办公自动化--提取pdf文件中表格合并到Excel 需求描述 现有一 pdf 文件内容如下,文件中内容主要是表格形式的获奖名单,共158页.现要读取这些表格信息并保存到 excel 文件中 ...

  4. python中提取几列_Python一键提取PDF中的表格到Excel(实例50)

    从PDF文件获取表格中的数据,也是日常办公容易涉及到的一项工作.一个一个复制吧,效率确实太低了.用Python从PDF文档中提取表格数据,并写入Excel文件,灰常灰常高效. 上市公司的年报往往包含几 ...

  5. Python提取pdf中的表格数据(附实战案例)

    14天阅读挑战赛 今天给大家介绍一个Python使用工具,那就是从pdf文件中读取表格数据,主要用到第三方库 pdfplumber. pdfplumber简介 pdfplumber是一款基于pdfmi ...

  6. java读取pdf多表格_在Java中使用tabula提取PDF中的表格数据

    问题:如何将pdf文件中指定的表格数据提取出来? 尝试过的工具包有:pdfbox.tabula.最终选用tabula 两种工具的比较 pdfbox 其中,pdfbox能将pdf中的内容直接提取成Str ...

  7. python批量提取pdf的数据_Python批量提取PDF文件中文本的脚本

    本文实例为大家分享了Python批量提取PDF文件中文本的具体代码,供大家参考,具体内容如下 首先需要执行命令pip install pdfminer3k来安装处理PDF文件的扩展库. import ...

  8. python提取网页中表格数据_Python2 BeautifulSoup 提取网页中的表格数据及连接

    网址:http://quote.eastmoney.com/ce- 要做的是提取网页中的表格数据(如:板块名称,及相应链接下的所有个股,依然是个表格) 暂时只写了这些代码: import urllib ...

  9. python怎么读取pdf为文本_轻松用Python批量提取PDF文本内容,这个小技巧告诉你!...

    轻松用Python批量提取PDF文本内容,这个小技巧告诉你!-1.jpg (22.73 KB, 下载次数: 0) 2018-9-7 08:33 上传 本文为你展示,如何用Python把许多PDF文件的 ...

  10. [小技巧] 使用tabula批量提取pdf中的表格

    想不到我也能更新这种东西了 原文链接~~~~~ [小技巧] 使用tabula批量提取pdf中的表格https://mp.weixin.qq.com/s/HWLneqJj42ywLghPR-ushA 起 ...

最新文章

  1. 从头搭建一个深度学习框架
  2. 计算机组成原理个人笔记(三)
  3. 第一章 基于任务的程序设计
  4. 全球最抠门的商场,一年卖了1000亿
  5. Json-lib, 实现Java对象与JSON数据格式的互转
  6. npm 报错 : npm ERR! Maximum call stack size exceeded
  7. 德裔美国Delphi程序员霍尔格-弗里克博士访谈
  8. linux fcitx-rime导入搜狗词库
  9. MATLAB学习笔记(1):MATLAB简介
  10. 计算机里怎样打字,电脑知识:如何电脑快速打字
  11. 一线互联网公司的前端开发流程
  12. 3t中文 studio_studio 3t免费版
  13. gstreamer: 官方参考内容 gst-launch-1.0命令行工具
  14. Linux下 man命令的使用 及 中文man手册的安装
  15. 为什么有阿里云ACP认证好找工作呢?
  16. 浅谈计算机领域及职业憧憬
  17. 语义分割|学习记录(4)膨胀卷积(空洞卷积 )
  18. 【前端基础知识】讲清楚正则表达式——第四期(4/5)
  19. docker安装和基础使用
  20. HAC集群状态检查、切换、数据同步验证方法

热门文章

  1. Pentest Wiki Part4 后渗透(二)
  2. 关于win10用户使用protel99se可能出现的问题以及解决方法
  3. linux编辑器终端,分享|尝试将 Jed 作为你的 Linux 终端文本编辑器
  4. 【181202】VC 屏幕画笔程序源码源代码
  5. c#明华rf读卡器_明华MW接触式IC卡智能卡读卡器读写器(U/MRD-EB/ET)
  6. 绘图软件Origin新手使用教程
  7. VS2008+Vassistx使用技巧
  8. 计算机组成与设计RISC-V版笔记
  9. 在CF卡上实现EWF功能
  10. Gephi教程【1】安装