如何使用PDFMiner获取PDF中文本的位置?

2024-05-23 18:44:13 发布

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

PDFMiner的文档显示:

PDFMiner allows one to obtain the exact location of text in a page

但是,我还没有找到如何做到这一点。PDFMiner的“文档”非常稀少,所以我不知道如何做到这一点。


Tags: ofthetotextin文档pagelocation
1条回答
网友
1楼 · 发布于 2024-05-23 18:44:13

您正在每个布局对象上查找bbox属性。PDFMiner文档中有一些关于how to parse the layout hierarchy的信息,但它并没有涵盖所有内容。

下面是一个例子:

from pdfminer.pdfdocument import PDFDocument
from pdfminer.pdfpage import PDFPage
from pdfminer.pdfparser import PDFParser
from pdfminer.pdfinterp import PDFResourceManager, PDFPageInterpreter
from pdfminer.converter import PDFPageAggregator
from pdfminer.layout import LAParams, LTTextBox, LTTextLine, LTFigure


def parse_layout(layout):
    """Function to recursively parse the layout tree."""
    for lt_obj in layout:
        print(lt_obj.__class__.__name__)
        print(lt_obj.bbox)
        if isinstance(lt_obj, LTTextBox) or isinstance(lt_obj, LTTextLine):
            print(lt_obj.get_text())
        elif isinstance(lt_obj, LTFigure):
            parse_layout(lt_obj)  # Recursive


fp = open('example.pdf', 'rb')
parser = PDFParser(fp)
doc = PDFDocument(parser)

rsrcmgr = PDFResourceManager()
laparams = LAParams()
device = PDFPageAggregator(rsrcmgr, laparams=laparams)
interpreter = PDFPageInterpreter(rsrcmgr, device)
for page in PDFPage.create_pages(doc):
    interpreter.process_page(page)
    layout = device.get_result()
    parse_layout(layout)

如果您对单个LTChar对象的位置感兴趣,您可以递归地解析成LTTextBoxLTTextLine的子布局对象,就像在上面的示例中对LTFigure所做的那样。

相关问题 更多 >