gpt4 book ai didi

python - 在没有错误消息的情况下使用 camelot 提取表数据的问题

转载 作者:行者123 更新时间:2023-12-05 01:54:48 27 4
gpt4 key购买 nike

我正在尝试从此 pdf link 中提取表格但是,使用 camelot 时,请按照以下代码尝试:

import camelot

file = 'relacao_medicamentos_rename_2020.pdf'

tables = camelot.read_pdf(file)
tables.export('relacao_medicamentos_rename_2020.csv', f='csv', compress=False)

简单的没有任何反应。这很奇怪,因为当我尝试使用相同的代码但使用此 pdf link效果很好。

最佳答案

作为Stefano建议您需要指定相关页面并设置选项 flavor='stream'。默认的 flavor='lattice' 仅在单元格之间有线条时才有效。

此外,增加 row_tol 有助于将行分组在一起。因此,例如,第一个表的标题不会被读取为三个单独的行,而是被读取为一行。特别是“Concentração/Composição”被识别为连贯的文本。

您可能还想使用 strip_text='\n' 删除换行符。

这导致(以阅读第 17 和 18 页为例):

import camelot
file = 'relacao_medicamentos_rename_2020.pdf'
tables = camelot.read_pdf(file, pages='17, 18', flavor='stream', row_tol=20, strip_text='\n')
tables.export('foo.csv', f='csv', compress=False)

不过,通过这种方式,您最终每页一个表格,每个表格一个 csv 文件。 IE。在上面的示例中,您将获得两个 .csv 文件。这需要在 camelot 之外处理。使用 pandas 合并跨多个页面的表格:

import pandas as pd
dfs = [] # list to store dataframes
for table in tables:
df = table.df
df.columns = df.iloc[0] # use first row as header
df = df[1:] # remove the first row from the dataframe
dfs.append(df)
df = pd.concat(dfs, axis=0) # concatenate all dataframes in list
df.to_csv('foo.csv') # export dataframe to csv

此外,在包含文本和表格的页面上识别表格区域也很困难(例如 pdf 第 16 页)。在这些情况下,可以指定表区域。对于第 16 页的表格,这将是:

tables = camelot.read_pdf(in_dir + file, pages='16', flavor='stream', row_tol=20, strip_text='\n', table_areas=['35,420,380,65'],)

注意:在整篇文章中,我通过“计算”文件的页数来引用页面,而不是通过打印在每页上的页码(后者从文档的第二页开始) .

关于python - 在没有错误消息的情况下使用 camelot 提取表数据的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70533438/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com