![]() |
1
1
您可以使用PDFMiner来完成这项工作,根据我的经验,它比其他开源Python工具工作得更好。
关键是指定
布局的代码是 here 是的。使用超参数可以为此特定文档提供最佳结果。 这是有关pdf的示例代码。我在这里只用一页来演示:
给定页面(第6页对应于文档中的第7页)的输出如下所示。它不是完美的,但是表的所有数字部分都与文本在同一行中捕获。
|
![]() |
2
2
很难说为什么pdfminer会提供它所提供的文本提取结果。也许算法出了问题。 我工作的公司有pdf库的示例代码,我使用 TextExtract C(我这样做是为了测试是否有可能实现您正在寻找的结果)文档样本(说明如何编写代码来提取PDF文档的文本),并从第7页提取了以下内容:
正如你所看到的,它会按照你的要求返回结果。 |
![]() |
3
1
您的问题更多的是如何构建PDF文件,而不是pyPDF2的问题在解析PDF以重新构造页面布局时,我遇到了许多相同的问题。 生成pdf时,每个文本块都位于页面上,并根据应用的字体规则进行呈现(类似于只使用绝对定位和css构建html文档)。一个简单的pdf库只需按照文件中定义的顺序返回每个块的文本(当页面反向生成时,我已经有了文档,最后一段是首先定义的)。 要么您需要使用一个更高级的PDF库(可能是在简单库的基础上构建的库),它将获取每个文本块的X、Y位置及其字体信息,以确定垂直位置,要么您自己开发这个库看起来这个软件 约瑟法 正在谈论的正是这样做的。 |
![]() |
4
1
我先查了一下 extractText function of PyPDF2 并试图从输出中“剥离”任何新行,以使您“跨过”页面一行。 结果不太理想… output 而且,从你的产出来看,它似乎并不可靠。 从PyPDF2文档中: 不要依赖于此函数中文本的顺序,因为如果使此函数更复杂,它将发生变化。 所以我去探索使用tesseract的方法。因此,这与使用“pdf提取库”有点不同,它基本上是“构建自己的提取脚本”。 一旦你掌握了特塞拉克,就不难了。我花了大约一小时的时间研究现有的知识。 以下是我自己的代码逐页提取pdf的结果: https://gist.github.com/Benehiko/60862a6be13b3b652b7d506121b95811 请注意我的代码有一个缺点。它不按顺序提取页面。 以防链接死掉:
代码说明: 这首先将pdf转换为单独的“tiff”图像,因为由于某些原因,使用pytesseract读取多页tiff只读取第一页。tiff文件保存在名为“pages”的单独目录中Pytesseract读取每个文件,然后返回文本,然后使用“.replace”进行格式化,该命令删除所有行并将文本格式化为一行。 开始的地方: Tesseract install 在python中使用tesseract: pytesseract 使用的培训数据: eng.traineddata 额外来源: pdf to tiff 玻璃陶瓷: documentation 我希望这对你有帮助。不确定这是不是你要找的东西。 |
![]() |
gary · Pdfminer python 3.5 8 年前 |