3

我正在尝试使用 tabula-py 从多页 PDF 中提取表格,虽然 PDF 某些页面上的表格被完美提取,但某些页面被完全省略

遗漏似乎是随机的,不遵循 PDF 上任何可见的视觉特征(因为每个页面看起来都一样),因此 tabula 省略了第 1 页,提取的第 2 页,省略了第 3 和第 4 页,提取的第 5 页,省略了页面6,提取第8页和第9页,省略10,提取11等。我有macOS Sierra 10.12.6和Python 3.6.3 :: Anaconda custom(64位)。

我尝试将 PDF 分成更短的部分,甚至分成单页,但无论我尝试什么,似乎都无法提取被省略的页面。我已经阅读了 Tabula-py GitHub 页面以及 Stack Overflow 上的相关文档并提交了问题,但我似乎没有找到解决方案。

我通过 iPython 笔记本使用的代码如下:

通过终端安装表格:

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 的问题 - 文件是否会被错误地设置为受保护或锁定,你们中是否有人知道我如何检查并打开它?

提前致谢!

4

2 回答 2

1

这可能是因为 PDF 文件中的数据区域超出了 tabula 正在读取的区域。尝试以下操作:

首先通过将其中一个页面解析为 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 数据。

于 2020-03-27T11:55:07.557 回答
0

尝试java_options像这样使用: java_options="-Xmx4g"

于 2018-08-08T07:15:03.167 回答