1

我正在使用 tabula_py 读取 pdf 上的表格。有些很大。我有很多情况下,表格不止一页。Isuue 是 tabula_py 将每一页视为新表,而不是作为一个大表读取。与 Camelot 相同的问题

4

1 回答 1

1

你是对的。Camelot 和 Tabula 都是逐页工作的。

无论如何,您可以编写自定义函数来了解表格是否是统一的。如果是这样,您可以合并它们的内容并将它们一起处理。

例如,我创建了这个函数来处理 Camelot 输出:

from numpy import allclose 

def are_tables_united(table1_dict,table2_dict):
    if table2['page']==(table1['page']+1):
        if len(table2['cols'])==len(table1['cols']):

            # extract the vertical coordinates of the tables
            _,y_bottom_table1,_,_=table1['_bbox']
            _,_,_,y_top_table2=table2['_bbox']

            page_height=792

            # If the first table ends in the last 15% of the page 
            # and the second table starts in the first 15% of the page
            if y_bottom_table1<.15*page_height and\
            y_top_table2>.85*page_height:

                table1_cols=table1['cols']
                table2_cols=table2['cols']

                table1_cols_width=[col[1]-col[0] for col in table1_cols]
                table2_cols_width=[col[1]-col[0] for col in table2_cols]

                # evaluate if the column widths of the two tables are similar

              return(allclose(table1_cols_width,table2_cols_width,atol=3,rtol=0))

        else:
            return False
    else:
        return False 

函数参数table1_dicttable2_dict是 Camelot 输出表__dict__属性。

例如:

tables=camelot.read_pdf(...)
table1_dict=tables[0].__dict__
table2_dict=tables[1].__dict__
于 2020-06-15T07:19:43.533 回答