使用Python从PDF中的物理坐标返回文本字符串

use*_*643 5 python pdf

在过去的几个小时里,我一直在与谷歌和PDFMiner的有限文档作斗争,尽管我感觉很亲近,但我还是得不到我需要的东西.我已经通过http://www.unixuser.org/~euske/python/pdfminer/和所有三个YouTube视频进行了工作,以便更好地了解PDF,我可以输出原始文本.

我正在编写一个脚本来解析多个PDF页面.不幸的是,对于这个项目,我正在处理质量差的PDF文件,我看到的唯一可靠的常量是文本字符串的物理位置完全相同.虽然我已经阅读了文字字符串可以通过物理坐标提取的提示,但我还没有看到一个有效的例子.

是否有人可以解释如何使用PDFMiner完成这项工作?如果有一个明显更好的选择,我对其他模块开放,但是我需要坚持使用Python作为脚本.

另外,我已经尝试过PyPdf也没有成功(除了基本的文本输出).

谢谢!

Jac*_*man 9

我一直在编写一个库,试图简化这个过程,pdfquery.要从特定页面中的特定位置提取文本,您可以:

pdf = pdfquery.PDFQuery(file)
# load first, third, fourth pages
pdf.load(0, 2, 3) 
# find text between 100 and 300 points from left bottom corner of first page
text = pdf.pq('LTPage[page_index=0] :in_bbox("100,100,300,300")').text() 
# save tree as XML to try to figure out why the last line didn't work the way you expected :)
pdf.tree.write(filename, pretty_print=True)
Run Code Online (Sandbox Code Playgroud)

如果要在该框中找到单个字符,而不是完全在该框中的文本行,请将merge_tags = None传递给PDFQuery(默认情况下,它将连续字符合并为单个元素以使树不那么荒谬,因此整条线将具有在盒子里面).如果要查找与该框部分重叠的任何内容,请使用:overlaps_bbox而不是:in_bbox.

这基本上是使用PyQuery选择器语法从PDFMiner布局中获取文本,所以如果你的文档对于PDFMiner来说太乱了,它也可能太乱了,但至少它会更快玩.


ale*_*xis 3

感谢 Denis Papathanasiou 的一些代码,我能够找到 pdfminer 的方法。该代码在他的博客中进行了讨论,您可以在这里找到源代码:layout_scanner.py

特别是看一下方法 parse_lt_objs( )。在最后的循环中,k 应该是一对包含该文本位的坐标(并且它被丢弃)。我没有可以在这里发布的工作坐标提取器(我对它们不感兴趣),但听起来您可以轻松地从那里找到自己的路。

祝你好运!