可以使用PyMuPDF在PDF中分块搜索文本吗?

2024-09-30 02:24:45 发布

您现在位置:Python中文网/ 问答频道 /正文

page.getTextBlocks()

输出

[(42.5, 86.45002746582031, 523.260009765625, 100.22002410888672, TEXT, 0, 0),
(65.75, 103.4000244140625, 266.780029296875, 159.59010314941406, TEXT, 1, 0),
(48.5, 86.123456, 438.292048492, 100.92920404974, TEXT, 0, 0)]

(x0、y0、x1、y1,“块中的线”,块类型,块编号)

我的主要目标是:

在PDF中搜索文本并将其高亮显示 必须搜索的文本可以在页面中存在n次。使用tp.search(text,hit_max=1)可以限制出现的最大次数,但无法解决问题,因为它将选择文本的第一次出现,但对我来说,第二次或第三次出现可能很重要

我的想法是:

getTextBlocks提取如上所述的文本,使用这个信息,特别是block_no,我想为这个特定的块执行page.searchFor函数。从逻辑上讲,这应该是可能的,但实际上,我需要关于如何做到这一点的帮助

如果能为实现主要目标提供任何意见,我将不胜感激

谢谢


Tags: text文本类型目标searchpdfpage页面
1条回答
网友
1楼 · 发布于 2024-09-30 02:24:45

作为前言,请允许我说,您的问题将有利于我的存储库的问题页面

Page.searchFor()在页面上搜索任意数量的文本项。限制是点击次数,这有一个您必须在调用中指定的限制。但是你可以在这里使用任何数字(以100为例)。此方法不提取任何文本,忽略字符大小写,还支持非水平文本或跨多行分布的文本。其输出可直接用于创建文本标记注释等

当然,您可以使用Page.getText(option)的变体自由地提取文本,然后应用您的技巧在输出中找到您想要的内容option可以是“文本”、“单词”、“块”、“dict”、“rawdict”、“html”、“xhtml”或“xml”。每种输出都有其优点和缺点。许多变体带有文本位置信息,或字体信息,包括文本颜色等。 但正如所说的:如何定位东西取决于你自己。让我再次建议我们在Github回购问题页面上继续这个对话,在这里我可以更好地指向其他资源。或者可以随意使用我的私人电子邮件

如果您的问题是(1)定位文本引用,然后(2)将每个引用链接到文本块编号,则只需列出块矩形并检查每个引用是否包含在块矩形中:

for j, rect in enumerate(page.searchFor(text,...)):
    for i, bbox in enumerate(block_rectangles):
        if rect in bbox:
            print("occurrence %i is contained in block %i" % (j, i))

相关问题 更多 >

    热门问题