背景
上市公司年报中,有很多表格,最近公司需要将这些表格结构化到数据库中,第一步就是如何提取这些表格。
难点
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将表格画出来,否则仅仅是通过坐标值,很难直观的看出来解析的表格是否正常。