IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> Python 一键提取PDF版论文表格数据 -> 正文阅读

[Python知识库]Python 一键提取PDF版论文表格数据


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

一、Camelot库介绍

1.1 项目地址及安装

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

类型安装命令
Using pippip install camelot-py[cv]
Using condaconda 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参数说明 [ x 1 , y 1 , x 2 , y 2 ] [x_1,y_1,x_2,y_2] [x1?,y1?,x2?,y2?] x 1 、 x 2 x_1、x_2 x1?x2?为PDF坐标轴中的开始和结束的位置, y 1 y_1 y1?表示最高点所在行, y 2 y_2 y2?最低点所在行。这一参数会在后续示例演示中详细说明。

二、使用方法介绍

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

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知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2022-04-18 17:36:49  更:2022-04-18 17:39:33 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 17:55:12-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码