将边界框内的pdf文本直接提取到python中

时间:2019-04-09 00:26:11

标签: python pdf text-extraction pypdf2 pdfminer

我正在尝试提取给定边界矩形内的pdf文本。我了解有用于pdf抓取的工具,例如pdfminer,pypdf和pdftotext。我已经尝试了所有3种方法,到目前为止,我只得到了pdftotext的代码以从给定的边界框中提取文本。该代码如下所示:

s = "pdftotext -x %d -y %d -w %d -h %d"
s = s%(<various inputs into my function>)
cmd = [s, pdf_path,
           text_out]
subprocess.call(cmd)

但是,这会输出/写入一个文本文件。我想立即使用该文本,这意味着我不想去打开文本文件来检索该边界框中的任何单词,因为我将对10,000多个文档执行此操作,然后打开那么多文件会很痛苦。我基本上是从python脚本运行命令行提示符,所以我认为实际上没有办法解决这个问题,但是我不确定。由于pdfminer和pypdf是实际的python程序包,因此我可以获取它们的文本,但是它们似乎没有任何方法可以在给定的像素范围内提取文本。

作为进一步的说明-我希望专门在python中执行此操作,因为对于同一总体项目,我还有大量其他代码。

2 个答案:

答案 0 :(得分:0)

您可以使用text=open(text_out,'r').read()打开文本文件,这会将来自该文本文件的所有文本放入一个字符串中。然后,您可以根据选择的分隔符,使用text.split('your_delimiter')将该字符串解析为字符串列表。

答案 1 :(得分:0)

PyMuPDF / Fitz软件包可用于此目的。他们在以下位置提供脚本: https://github.com/pymupdf/PyMuPDF/wiki/How-to-extract-text-from-a-rectangle https://github.com/pymupdf/PyMuPDF-Utilities/blob/master/textboxtract.py

他们的脚本通过查找边界词来工作,您可以通过简单地执行rect = fitz.Rect(x0,y0,x1,y1)而不是他们的rect =〜他们的东西〜来将其替换为矩形。另外,如果不清楚,pno就是您要从中提取的页码。