python camelot pdf表格提取

摘要

camelot 是一个通过图像分割提取表格的函数库,有强大的pdf表格提取功能,擅长于提取不规则表格,非结构性表格(例如通过颜色进行表格分割)有着显著的效果

正文

解决安装问题

安装camelot 后,camelot.read_pdf(path)提示没有创建read_pdf

  • 原因是你错误的安装camelot方式
# 首先你需要卸载你的camelot pip uninstall camelot  或者 pip uninstall camelot.py
# 第二步你需要拉下来github包
git clone https://www.github.com/camelot-dev/camelot
# 进入到文件夹
cd camelot
# 安装模块
pip install ".[cv]" 
# 可以加上镜像会快一些  -i https://pypi.tuna.tsinghua.edu.cn/simple 
  • 安装后发现read_pdf没有报错,但是提示 Ghostscript 没有被安装 , 这是因为连带安装中缺少这个
# 到这个网站下载,正常安装即可
https://www.ghostscript.com/download/gsdnld.html

关于camelot 的用法问题

# 这是官方的API文档介绍, 写的很详细可以仔细看看
https://camelot-py.readthedocs.io/en/master/

选择指定页码进行表格提取

# 注意此处的页码必须是字符串格式
# 返回的结果是一个列表,每一个索引位置代表了提取到的一个表格
table_list = camelot.read_pdf(path, pages=str('页码'))
df = table_list[0].df  
# 将对应索引的表格输出Dataframe格式
# 这也是camelot 最好用的地方可以和pandas 无缝衔接

调参

如果发现表格如下

python camelot pdf表格提取_第1张图片

# 普通的代码
tables_list = camelot.read_pdf(r'path',pages=str(page_num))
df1 = tables_list[0].df
# 并不能展示这一个行,因为行尺寸太小了
# 我们进行如下修改
tables_list = camelot.read_pdf(r'path',line_scale=40, pages=str(page_num))
# 添加了line_scale之后我们修改了最小行的指定 这样可以读取到这个了

camlot 有着灵活的参数设定

如果你发现你的表格是这样的

python camelot pdf表格提取_第2张图片
通过使用普通的read_pdf 是不可以的,提取出来表格格式是错误的
python camelot pdf表格提取_第3张图片
可以看出来,每一行的提取都是错误的,表结构都被打乱了,于是我们尝试第一次调参

tables_list = camelot.read_pdf(path, flavor='stream', pages=str(table_page))

python camelot pdf表格提取_第4张图片

# 如果你发现表格的过于长,但是camelot提取没有到表格的最下面 添加edge_tol=500
tables_list = camelot.read_pdf(path, flavor='stream', edge_tol=500,pages=str(table_page))

# 如果你发现表格行与行之间分割不明显,或者发生重叠的问题  添加row_tol=10
tables_list = camelot.read_pdf(path, flavor='stream', edge_tol=500, row_tol=10, pages=str(table_page))

提示报错某一个文件夹下目录不是空,这是因为在你调用read_pdf 中的参数 flavor='stream’后递归打开多个文件夹,当你打开一个pdf后它会创建一个临时的文件夹,然后结束后删除这个文件夹,因为调用了,shutil.rmtree 函数,这个函数就是会报错

  • 解决方法
  • 打开你报错的代码处,在shutil.rmtree(self.name) 后面加上ignore_errors=True
    python camelot pdf表格提取_第5张图片
  • 然后你手动打开报错的目录表, 删除对应报错的文件夹,再次运行就行了

你可能感兴趣的:(python camelot pdf表格提取)