Camelot识别pdf表格时的参数设置补充

利用Camelot识别pdf文件中的表格,除了必须加上flavor = 'stream' ,以及指定 table_areas识别区域之外,补充下在识别pdf表格时遇到的如多行数据、上下标等情况时的参数设置。

Camelot的安装及基本用法见 Python解析PDF表格——PDFPlumber vs Camelot ,

默认参数下,Camelot未能识别出全部的表格区域。如上图,第3页只识别出了15行,远小于表格所在页的行数。

除了在 Python解析PDF表格——PDFPlumber vs Camelot 介绍的用 camelot.plot() 命令查看表格所在区域然后再指定 table_areas 来处理外,也可以将'edge_tol'参数指定为一个较大的数字,如本例中将 edge_tol = 500 ,让Camelot自动扩大识别区域。

本例中,表头和个别数据条,单元格中包含了多行文本,有可能需要将多行文字自动合并,此时涉及到'row_tel'参数的调整。将该参数数值增大,Camelot会自动将多行文字合并,但这样也有可能带来意想不到的结果。

如上图,指定 row_tol = 40 虽然表头部分的多行文字被自动合并为了一行,合并后的文字用 '\n' 连接;但下面的数据条部分,也被Camelot给合并到了一起,这显然不是我们希望看到的结果。所以对于 'row_tol' 参数一定是要视情况灵活处理,也提醒我们在识别表格时需要随时检查中间结果是否识别正确。

当单元格中存在上标时,指定 'flage_size = True' ,Camelot会在上标下标中自动加上<s> </s>标签,如下图所示。

'flage_size 参数用于指定是否分割识别的字符串,如下图, 'flage_size = True' 时,表格外的字符串被分割后分到了各列。在本例中,这种自动分割的结果看起来并不是必须的,因为我们感兴趣的是表格内的数据部分,表格以外的文字本就会舍去。

'strip_text 参数用于指定是否分割识别的字符串,如下图, strip_text= ' ?§\n(<>)(</).'*,Camelot会在识别出文字后,自动删去类似上下标标准'<s>'、'</s>',跨行单元格的'\n'等等。

Camelot识别后结果,各国的疫情数据是个字符串而不是数字,因此还需要利用pandas.to_numeric,或是astype(int)将数据类型转换为数字型。

本例中上述参数设置如下。

最后用Pyecharts绘制地图,结果如下: