使用pdfplumber提取pdf中不规则表格

背景

上市公司年报中,有很多表格,最近公司需要将这些表格结构化到数据库中,第一步就是如何提取这些表格。

难点

1.表格分页,如图1
2.不规则表格,如图2


图1
图2

表格分页的思路就是判断最后一个表格的最后一行和最后一个字符的y坐标比较,如果最后一行后没有字符,那再判断下页第一个表格第一行前是否有字符。

提取不规则表格,以图2为例,找到第一个表格的第一行最左边的点和最后一行最左边的点,将这两个点连接为一条线;第一行的最右边的点和最后一行最右边的点,将这两个点连接为一条线。如图3就是通过debug_tablefinder将图2打印显示的表格。


图3

通过extract_tables解析出完整的表格如下:

[['公司名称', '业务性质', '注册资本', '股权比例', None], [None, None, None, '直接', '间接'], ['上海蓝脉医疗科技有限公司', '技术开发', '人民币5,000,000元', '100%', '-'], ['江西心脉医疗器械销售有限公司', '医疗器械销售', '人民币2,000,000元', '100%', '-']]
[['期间', '公司名称', '增减变动', '原因'], ['2017年度', '江西心脉医疗器械销售有限公司', '增加合并单位', '新设'], ['2018年度', '上海蓝脉医疗科技有限公司', '增加合并单位', '新设']]

理解table_settings参数的含义对于整个表格解析至关重要,explicit_vertical_lines表示垂直线,既可以是一个x坐标(列),也可以是line或rect。一定要使用notebook和debug_tablefinder将表格画出来,否则仅仅是通过坐标值,很难直观的看出来解析的表格是否正常。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1. 前言 前端圈有个“梗”:在面试时,问个css的position属性能刷掉一半人,其中不乏工作四五年的同学。在...
    YjWorld阅读 4,523评论 5 15
  • LayUI 主要内容 LayUI 的安装及使用 LayUI 的介绍 ​ layui(谐音:类UI) 是一款采用自身...
    一纸油伞阅读 1,173评论 0 0
  • LayUI 的安装及使用 LayUI 的介绍 layui(谐音:类UI) 是一款采用自身模块规范编写的前端 UI ...
    芝麻小叮当阅读 1,250评论 0 0
  • 在实际研究中,我们经常需要获取大量数据,而这些数据很大一部分以pdf表格的形式呈现,如公司年报、发行上市公告等。面...
    诸葛青云999阅读 15,037评论 0 16
  • 用两张图告诉你,为什么你的 App 会卡顿? - Android - 掘金 Cover 有什么料? 从这篇文章中你...
    hw1212阅读 12,858评论 2 59