直接将PDF文本在边界框内提取到Python中。

6

我正在尝试从给定的边界矩形中提取pdf文本。我知道有一些pdf抓取工具,如pdfminer、pypdf和pdftotext。我已经尝试过这三种工具,到目前为止,我只能通过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)

然而,这个命令会输出/写入一个文本文件。我想立即使用该文本文件,也就是说,我不想去打开文本文件来检索那个 bounding box 中的任何单词,因为我将对 10,000 多个文档进行相同的操作,而打开那么多文件可能会很痛苦。基本上,我正在从我的 Python 脚本运行命令行提示符,所以我不认为有办法避免这种情况,但我不确定。由于 pdfminer 和 pypdf 是实际的 Python 包,因此我可以获取它们的文本,但它们似乎没有任何方法来提取给定像素限制内的文本。
进一步说明一下 - 我特别想在 Python 中完成这个任务,因为我有大量其他与该项目相关的代码。
3个回答

5
PyMuPDF/Fitz 包适用于此。他们在以下网址提供脚本和文档: https://github.com/pymupdf/PyMuPDF-Utilities/tree/master/textbox-extraction 他们的脚本通过查找边界词工作,您可以通过简单地执行 rect = fitz.Rect(x0, y0, x1, y1) 替换它,并避免使用“rect = ~their stuff~”。如果不清楚,请注意 pno 是您要提取的页面编号。

x0,y0,x1,y1 代表哪些坐标? - RodrikTheReader

0

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


我知道这个,这是我的当前方法。我正在寻找一种避免使用open()命令的方法,因为我不认为打开文件是一个特别快速或高效的过程,而且最终我将会打开大约40,000个文件。 - Evan Mata

0
使用PyMuPDF和包含嵌入文本的PDF的最简示例(您可以在PDF中选择文本):
import fitz

##x1, y1, x2, y2
bbox = [56, 170, 220, 230]

doc = fitz.open(fileName)

for page_num,page in enumerate(doc.pages()):
    print(page.get_textbox(bbox))

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接