经过一些在线阅读后,我决定使用 tabula-py 从 pdf 文件中提取表格。我们使用 Anaconda,我刚刚安装了 tabula-py 1.1.1。
我想从一个简单的脚本开始,看看它会如何处理带有一些文本和两个表格的单页 pdf 文件(“table_p16.pdf”)。
编码:
from tabula import read_pdf
df = read_pdf("table_p16.pdf")
错误:
拿起 JAVA_TOOL_OPTIONS: -Djava.security.properties=c:\Windows\Sun\Java\Deployment\sam.security
回溯(最近一次通话最后):
文件“H:/Personlich/SVN/blademat_tb/blademat_toolbox/utility/read_pdf.py”,第 41 行,在 df = read_pdf("table_p16.pdf")
文件“C:\Users\xxxxxxxxxxxx\AppData\Local\Continuum\Anaconda3\envs\test_env\lib\site-packages\tabula\wrapper.py”,第 117 行,在 read_pdf return pd.read_csv(io.BytesIO(output) , **pandas_options)
文件“C:\Users\xxxxxxxxxxxx\AppData\Local\Continuum\Anaconda3\envs\test_env\lib\site-packages\pandas\io\parsers.py”,第 709 行,在 parser_f 返回 _read(filepath_or_buffer, kwds)
文件“C:\Users\xxxxxxxxxxxx\AppData\Local\Continuum\Anaconda3\envs\test_env\lib\site-packages\pandas\io\parsers.py”,第 455 行,在 _read data = parser.read(nrows)
文件“C:\Users\xxxxxxxxxxxx\AppData\Local\Continuum\Anaconda3\envs\test_env\lib\site-packages\pandas\io\parsers.py”,第 1069 行,读取 ret = self._engine.read(nrows )
文件“C:\Users\xxxxxxxxxxxx\AppData\Local\Continuum\Anaconda3\envs\test_env\lib\site-packages\pandas\io\parsers.py”,第 1839 行,读取数据 = self._reader.read(nrows )
文件“pandas/_libs/parsers.pyx”,第 902 行,在 pandas._libs.parsers.TextReader.read
文件“pandas/_libs/parsers.pyx”,第 924 行,在 pandas._libs.parsers.TextReader._read_low_memory
文件“pandas/_libs/parsers.pyx”,第 978 行,在 pandas._libs.parsers.TextReader._read_rows
文件“pandas/_libs/parsers.pyx”,第 965 行,在 pandas._libs.parsers.TextReader._tokenize_rows
文件“pandas/_libs/parsers.pyx”,第 2208 行,在 pandas._libs.parsers.raise_parser_error
pandas.errors.ParserError:数据标记错误。C 错误:预计第 9 行中有 8 个字段,看到 9
我尝试过的事情:
- 由于该错误似乎表明熊猫存在问题,因此我尝试使用一张表格阅读单页 pdf。同样的错误也成立。
- 将用户变量 PATH 设置为 Java。没有改变任何东西。无法将系统变量 PATH 设置为 Java,因为它目前用于我们的 SVN 程序。
不同的代码行,具有相同的错误:
df = read_pdf(r"table_p9.pdf") df = read_pdf(r"table_p9.pdf") df = read_pdf("table_p9.pdf", output_format='json')
我希望有人能插手帮助我找出问题所在。这可能是 Java 问题,但我对所需的 Java 交互不是很熟悉。非常感谢您的帮助。
编辑
我尝试了不同的表,有些似乎正在工作。很难确定哪种类型的表格有效。一些“合并”列和其他“合并”行似乎工作。但显然不是全部。此外,我无法使用参数 multiple_tables=True 读取多个表(2 或 3)。
Tabula 可以处理什么样的表格?这让我想知道 Tabula 是否是正确的程序。在我阅读完所有内容之后,我的印象是 Tabula 会擅长这一点。它似乎很难处理的表格并不复杂。
是否有关于如何最大限度地利用 Tabula 的清晰简单的资料?或者有关如何处理 Tabula 难以处理的表格的其他提示?
问候,加布里埃尔