我试图用tabula-py从多页PDF中提取表格,虽然PDF的某些页面上的表被完美地提取出来,但是-一些页面被完全省略了。
遗漏似乎是随机的,并且不遵循PDF上任何可见的视觉特性(因为每一页看起来相同),因此表格省略了第1页、提取的第2页、省略的第3和第4页、提取的第5页、省略的第6页、提取的第8和9页、省略的10、提取的11等等。我有macOS塞拉利昂10.12.6和Python 3.6.3 ::Anaconda自定义(64-bit)。
我尝试过将PDF分成更短的部分,甚至是一个寻呼机,但是不管我尝试了什么,省略的页面似乎都不可能提取出来。我已经阅读了相关文档,并在Tabula-py GitHub页面上以及在堆栈溢出上归档了问题,但我似乎没有找到解决方案。
我通过iPython笔记本使用的代码如下:
要通过终端安装tabula:
pip install tabula-py要提取PDF中的表格:
from tabula import read_pdf
df = read_pdf("document_name.pdf", pages="all")我还尝试了以下几种方法,但没有起到任何作用
df = read_pdf("document_name", pages="1-361")要将数据帧保存到csv中:
df.to_csv('document_name.csv')如果你能帮我做这件事的话,我真的很感激,因为我觉得我被一个PDF文件困住了,我只从其中提取了大约50%的数据。这是令人恼火的,因为50%看起来绝对完美,但其余的50%似乎超出了我的能力范围,使得分析数据的更大项目无法进行。
我还想知道这是否可能是PDF而不是Tabula的问题--文件是否会被错误地设置为受保护的或锁定的,以及你们中是否有人知道我如何检查并打开它?
提前谢谢你!
发布于 2020-03-27 11:55:07
这可能是因为PDF文件中的数据区域超过了表格正在读取的区域。尝试以下几点:
首先获取数据的位置,将其中一个页面解析为JSON格式(这里我选择了第2页),然后提取并打印位置:
tables = read_pdf("document_name.pdf", output_format="json", pages=2, silent=True)
top = tables[0]["top"]
left = tables[0]["left"]
bottom = tables[0]["height"] + top
right = tables[0]["width"] + left
print(f"{top=}\n{bottom=}\n{left=}\n{right=}")现在,您可以尝试通过实验稍微扩展这些位置,直到从PDF文档收到更多数据:
# area = [top, left, bottom, right]
# Example from page 2 json output: area = [30.0, 59.0, 761.0, 491.0]
# You could then nudge these locations slightly to include a wider data area:
test_area = [10.0, 30.0, 770.0, 500.0]
df = read_pdf(
"document_name.pdf",
multiple_tables=True,
pages="all",
area=test_area,
silent=True, # Suppress all stderr output
)而df变量现在将使用PDF数据保存表。
发布于 2018-08-08 07:15:03
尝试使用java_options (如:java_options="-Xmx4g" )
https://stackoverflow.com/questions/51585444
复制相似问题