能否使用PyMuPDF在PDF中对文本进行分段搜索?

问题描述 投票:0回答:1
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, "块中行", block_type, block_no)

我的主要目的是。

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

我的想法是

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

如果有任何关于实现主要目标的建议,我将非常感激。

谢谢你

python pdf text-search pymupdf
1个回答
0
投票

作为前言,我要说的是,你的问题会对我的文库的问题页有好处。

Page.searchFor() 搜索页面上任意数量的文本项。限制是点击的数量,这有一个限制,你必须在调用中指定。但是你可以在这里使用任何数字(比如说100)。这个方法 摘录 无文本,忽略字符套管,还支持非水平文本或跨多行的文本。它的输出可以直接用于创建文本标记注释等。

当然,你也可以自由地通过使用不同的 Page.getText(option) 然后运用你的技巧在输出中找到你想要的东西。option 可能是 "text"、"words"、"block"、"dict"、"rawdict"、"html"、"xhtml "或 "xml"。每种输出方式显然都有其优点和缺点。许多变体都带有文本位置信息,或字体信息,包括文本颜色等.但正如所说:这取决于你如何定位东西。让我再次建议我们在Github repo问题页面上继续这个对话,在那里我可以更好地指出其他资源。或者随时使用我的私人邮箱。

如果你的问题是指(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))
© www.soinside.com 2019 - 2024. All rights reserved.