Pdfminer使用布局和bbox解析文档

2024-05-13 11:08:19 发布

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

我使用pdfminer解析某些类型的pdf(仅用于文本),如学位证书等。因此,对于特定机构,这些类型保持不变,并且可能因不同机构而异

因为,我是新手,如果我能对如何解析布局中的不同对象(如-注册号)有任何想法,我将不胜感激。分析或操纵边界框或任何曲线等的不同方式有哪些

这可能是广泛的,但考虑到pdfminer的文档,它似乎会帮助更多的用户。下面是我开始使用的示例代码:-

from pdfminer.pdfparser import PDFParser
from pdfminer.pdfdocument import PDFDocument
from pdfminer.pdfpage import PDFPage
from pdfminer.pdfpage import PDFTextExtractionNotAllowed
from pdfminer.pdfinterp import PDFResourceManager
from pdfminer.pdfinterp import PDFPageInterpreter
from pdfminer.pdfdevice import PDFDevice
from pdfminer.layout import LAParams, LTTextBox, LTTextLine, LTImage, LTFigure
from pdfminer.converter import PDFPageAggregator
from pdfminer.converter import TextConverter
from pdfminer.converter import HTMLConverter
from io import StringIO

def get_layouts(pdf_doc):
    fp = open(pdf_doc, 'rb')
    parser = PDFParser(fp)
    doc = PDFDocument(parser)
    parser.set_document(doc)
    #print (doc.catalog)
    try:
        outlines = doc.get_outlines()
        for (level, title, dest, a, se) in outlines:
            print (' ' * level, title)
    except PDFNoOutlines:
        pass

    if not doc.is_extractable:
        raise PDFTextExtractionNotAllowed

    rsrcmgr = PDFResourceManager()
    laparams = LAParams()
    device = PDFPageAggregator(rsrcmgr, laparams=laparams)
    interpreter = PDFPageInterpreter(rsrcmgr, device)
    text = ''
    for page in PDFPage.create_pages(doc):
        interpreter.process_page(page)
        layout = device.get_result()
        for lt_obj in layout:
            if isinstance(lt_obj, LTTextBox) or isinstance(lt_obj, LTTextLine):
                text += lt_obj.get_text()
        break
    return text

Tags: textinfromimportltobjparserfor
1条回答
网友
1楼 · 发布于 2024-05-13 11:08:19

如果每个记录上的必要信息位于完全相同的位置,则可以使用每个LTTextContainer(LTTextContainer.x0、LTTextContainer.x1、LTTextContainer.y0、LTTextContainer.y1)的x和y坐标来查找LTTextContainer的位置。不过,如果不同的学校有不同的证书格式,这可能行不通

相关问题 更多 >