theKingofBeasts 2021-01-26 16:24 采纳率: 0%
浏览 199

python3如何按阅读顺序从PDF文件中提取文本,或者如何整理成阅读的顺序?

想从PDF中提取文本,并整理成阅读顺序,求一个好的提取方法,或者好的整理方法,尤其是分栏的PDF文件,求大佬指点

  • 写回答

1条回答 默认 最新

  • AI算法爱好者角落 2021-01-29 15:53
    关注
    import pyocr
    import importlib
    import sys
    import time
     
    importlib.reload(sys)
    time1 = time.time()
    # print("初始时间为:",time1)
     
    import os.path
    from pdfminer.pdfparser import  PDFParser,PDFDocument
    from pdfminer.pdfinterp import PDFResourceManager, PDFPageInterpreter
    from pdfminer.converter import PDFPageAggregator
    from pdfminer.layout import LTTextBoxHorizontal,LAParams
    from pdfminer.pdfinterp import PDFTextExtractionNotAllowed
     
    text_path = r'words-words.pdf'
    # text_path = r'photo-words.pdf'
     
    def parse():
        '''解析PDF文本,并保存到TXT文件中'''
        fp = open(text_path,'rb')
        #用文件对象创建一个PDF文档分析器
        parser = PDFParser(fp)
        #创建一个PDF文档
        doc = PDFDocument()
        #连接分析器,与文档对象
        parser.set_document(doc)
        doc.set_parser(parser)
     
        #提供初始化密码,如果没有密码,就创建一个空的字符串
        doc.initialize()
     
        #检测文档是否提供txt转换,不提供就忽略
        if not doc.is_extractable:
            raise PDFTextExtractionNotAllowed
        else:
            #创建PDF,资源管理器,来共享资源
            rsrcmgr = PDFResourceManager()
            #创建一个PDF设备对象
            laparams = LAParams()
            device = PDFPageAggregator(rsrcmgr,laparams=laparams)
            #创建一个PDF解释其对象
            interpreter = PDFPageInterpreter(rsrcmgr,device)
     
            #循环遍历列表,每次处理一个page内容
            # doc.get_pages() 获取page列表
            for page in doc.get_pages():
                interpreter.process_page(page)
                #接受该页面的LTPage对象
                layout = device.get_result()
                # 这里layout是一个LTPage对象 里面存放着 这个page解析出的各种对象
                # 一般包括LTTextBox, LTFigure, LTImage, LTTextBoxHorizontal 等等
                # 想要获取文本就获得对象的text属性,
                for x in layout:
                    if(isinstance(x,LTTextBoxHorizontal)):
                        with open(r'2.txt','a') as f:
                            results = x.get_text()
                            print(results)
                            f.write(results  +"\n")
     
    if __name__ == '__main__':
        parse()
        time2 = time.time()
        print("总共消耗时间为:",time2-time1)

     

    评论

报告相同问题?