列表中省略了我要提取的PDF文档中的页面

时间:2018-07-29 23:46:50

标签: python pdf tabula pdf-extraction

我正在尝试使用tabula-py从多页PDF中提取表格,并且在PDF的某些页面上的表格被完美提取的同时,某些页面被完全省略了

忽略似乎是随机的,并且没有遵循PDF上的任何可见视觉特征(因为每个页面看起来都相同),因此表格省略了第1页,第2页,第3页和第4页,第5页,以及第5页,省略第6页,提取第8和9页,省略10,提取11等。我有macOS Sierra 10.12.6和Python 3.6.3 :: Anaconda定制(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的问题-文件是否会被错误地设置为受保护或锁定,并且您是否知道我可以进行检查并打开它?

提前谢谢!

2 个答案:

答案 0 :(得分:1)

这可能是因为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数据保存表格。

答案 1 :(得分:0)

尝试像这样使用mvn clean package MavenProject mavenProject = new MavenProject("/home/admin/projects/maven-sample-project"); mavenProject.clean(); mavenProject.package(jarLocation = "/home/admin/projects/maven-sample-project/target/maven-sample-project-1.0.0-SNAPSHOT.jar");