• PyPDF2提取pdf中的信息


    一、说在前面

    0、还没系统学习,很迷茫,整体思路不明朗

    1、完成了将pdf中的文字信息提取到txt,提取pdf中的前两级结构

    2、下阶段完成从文本中抽取目标数据

    3、所用包:pdfminer,PyPDF2

    二、将pdf中的文字信息提取到txt(为抽取目标数据做准备)

    # _*_coding:utf-8_*_
    import os
    
    from pdfminer.pdfparser import PDFParser
    from pdfminer.pdfdocument import PDFDocument
    from pdfminer.pdfpage import PDFPage
    from pdfminer.pdfinterp import PDFResourceManager, PDFPageInterpreter
    from pdfminer.converter import PDFPageAggregator
    from pdfminer.layout import LTTextBoxHorizontal, LAParams
    from pdfminer.pdfpage import PDFTextExtractionNotAllowed
    
    
    def parse(Path, Save_name):
        parser = PDFParser(Path)
        document = PDFDocument(parser)
    
        if not document.is_extractable:
            raise PDFTextExtractionNotAllowed
        else:
            rsrcmgr = PDFResourceManager()
            laparams = LAParams()
            device = PDFPageAggregator(rsrcmgr, laparams=laparams)
            interpreter = PDFPageInterpreter(rsrcmgr, device)
    
            for page in PDFPage.create_pages(document):
                interpreter.process_page(page)
                layout = device.get_result()
                for x in layout:
                    if (isinstance(x, LTTextBoxHorizontal)):
                        with open('%s' % (Save_name), 'a') as f:
                            results = x.get_text().encode('utf-8')
                            try:
                                f.write(results.decode())
                                #print(results.decode())
                            except:
                                print("error")
                            #print(results.decode('raw_unicode_escape'))
                            #print(str(results).encode('raw_unicode_escape').decode())
    
    def file_name(file_dir):
        for root, dirs, files in os.walk(file_dir):
            return files
    
    
    
    if __name__ == '__main__':
        file_dir = "data"
        files = file_name(file_dir)
        print(files)
        for i in range(len(files)):
            print(i, files[i])
            Path = open(file_dir+'/'+files[i], 'rb')
            names = files[i].split('.')
            parse(Path, 'rs/'+names[0]+'.txt')
    View Code

     三、提取pdf中的前两级结构

    import os
    
    from PyPDF2 import PdfFileReader as pdf_read
    
    #每个书签的索引格式
    #{'/Title': '书签名', '/Page': '指向的目标页数', '/Type': '类型'}
    
    directory_str = ''
    def bookmark_listhandler(list):
        global directory_str
        for message in list:
            if isinstance(message, dict):
                directory_str += message['/Title'] + '
    '
                # print(message['/Title'])
            else:
                bookmark_listhandler(message)
    
    
    
    
    def file_name(file_dir):
        for root, dirs, files in os.walk(file_dir):
            return files
    
    file_dir = "data"
    files = file_name(file_dir)
    print(files)
    for i in range(len(files)):
        print(i, files[i])
    
        with open(file_dir+'/'+files[i], 'rb') as f:
            pdf = pdf_read(f)
            # 检索文档中存在的文本大纲,返回的对象是一个嵌套的列表
            text_outline_list = pdf.getOutlines()
    
            bookmark_listhandler(text_outline_list)
        names = files[i].split('.')
        with open(names[0]+'.txt', 'w', encoding='utf-8') as f:
            f.write(directory_str)
    View Code

  • 相关阅读:
    我的大厂面试经历(附100+面试题干货)
    大厂面试题:集群部署时的分布式 session 如何实现?
    【转载】Android数据库(SqlLite)操作和db文件查看
    【转载】android ListView详解
    C#根据经纬度获取物理地址
    C#计算两个经纬度的距离
    EXT编写日志文件
    动态数组
    System.Windows.Forms.Timer和System.Timers.Timer的区别 [转]
    SQL Prompt 3 优秀的SQL查询工具 收藏
  • 原文地址:https://www.cnblogs.com/20183544-wangzhengshuai/p/14872954.html
Copyright © 2020-2023  润新知