web-dev-qa-db-ja.com

どのようにしてPDFMinerでPDF内のテキストの場所を取得しますか?

PDFMinerのドキュメントによると:

PDFMinerを使用すると、ページ内のテキストの正確な位置を取得できます

しかし、私はこれを行う方法を見つけることができませんでした。 PDFMinerの「ドキュメント」はかなりまばらなので、これを行う方法がわかりません。

18
Glycan

すべてのレイアウトオブジェクトでbboxプロパティを探しています。 PDFMinerのドキュメントには レイアウト階層の解析方法 に関する情報が少しありますが、すべてを網羅しているわけではありません。

次に例を示します。

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オブジェクトの場所に関心がある場合は、LTTextBoxで行うのと同じように、LTTextLineLTFigureの子レイアウトオブジェクトに再帰的に解析できます。 ] _上記の例では。

19
Matt Swain