我正在使用 tabula_py 读取 pdf 上的表格。有些很大。我有很多情况下,表格不止一页。Isuue 是 tabula_py 将每一页视为新表,而不是作为一个大表读取。与 Camelot 相同的问题
问问题
856 次
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_dict
和table2_dict
是 Camelot 输出表__dict__
属性。
例如:
tables=camelot.read_pdf(...)
table1_dict=tables[0].__dict__
table2_dict=tables[1].__dict__
于 2020-06-15T07:19:43.533 回答