我正在尝试使用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的问题-文件是否会被错误地设置为受保护或锁定,并且您是否知道我可以进行检查并打开它?
提前谢谢!
答案 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");