您当前的位置:首页 > IT编程 > python
| C语言 | Java | VB | VC | python | Android | TensorFlow | C++ | oracle | 学术与代码 | cnn卷积神经网络 | gnn | 图像修复 | Keras | 数据集 | Neo4j | 自然语言处理 | 深度学习 | 医学CAD | 医学影像 | 超参数 | pointnet | pytorch | 异常检测 | Transformers | 情感分类 | 知识图谱 |

自学教程:python解析PDF程序代码

51自学网 2021-10-30 22:27:26
  python
这篇教程python解析PDF程序代码写得很实用,希望能帮到您。

说在前面

和word的文本相比PDF更类似于一张张图片,图上放着一个个文字。对其的解析是将图片上的文字提取到text文件中,方便之后的分析。

添加依赖

在python的环境中安装PDFminer3k,不要装错了,一开始我装的是PDFminer,结果有几个包不能用
pip install pdfminer3k

源程序代码

#!/usr/bin/env python3# -*- coding:utf-8 -*-# pip3 install pdfminer3kimport osfrom pdfminer.converter import PDFPageAggregatorfrom pdfminer.layout import LAParams, LTTextBoxHorizontalfrom pdfminer.pdfparser import PDFParser, PDFDocumentfrom pdfminer.pdfinterp import PDFResourceManager, PDFPageInterpreter, PDFTextExtractionNotAllowedfrom pdfminer.pdfdevice import PDFDevicedef read_pdf(pdf_name, result_name):    # 以二进制读模式打开    fp = open(pdf_name, '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    # 创建PDf 资源管理器 来管理共享资源    rsrcmgr = PDFResourceManager()    # 创建一个PDF设备对象    laparams = LAParams()    device = PDFPageAggregator(rsrcmgr, laparams=laparams)    # 创建一个PDF解释器对象    interpreter = PDFPageInterpreter(rsrcmgr, device)    with open(result_name, "w", encoding="u8") as fd_out:        # 循环遍历列表,每次处理一个page的内容        for i, page in enumerate(doc.get_pages(), 1):            index = "===========《第{}页》===========".format(i)            print(index)            fd_out.write(index + "/n")            interpreter.process_page(page)            # 接受该页面的LTPage对象            layout = device.get_result()            for x in layout:                # 这里layout是一个LTPage对象 里面存放着 这个page解析出的各种对象 一般包括LTTextBox,                # LTFigure, LTImage, LTTextBoxHorizontal 等等 想要获取文本就获得对象的text属性                if not isinstance(x, LTTextBoxHorizontal):                    continue                results = x.get_text()                print(results)                fd_out.write(results)if __name__ == '__main__':    # 获取读取文件夹    filePath = '../PDFfile'    #遍历文件夹    for i,j,k in os.walk(filePath):        for m in k:            # 格式化输出的名称和地址            result = '../TextFile/' + m[:-4] + '.txt'            # 格式化源文件路径            fileName = i + '/' + m            # 调用函数解析            read_pdf(fileName, result)

参考以下代码内容:python 读取pdf文本内容

#!/usr/bin/env python3#-*- coding:utf-8 -*-# pip3 install pdfminer3k  from pdfminer.converter import PDFPageAggregatorfrom pdfminer.layout import LAParams, LTTextBoxHorizontalfrom pdfminer.pdfparser import PDFParser, PDFDocumentfrom pdfminer.pdfinterp import PDFResourceManager, PDFPageInterpreter, PDFTextExtractionNotAllowedfrom pdfminer.pdfdevice import PDFDevice def read_pdf(pdf_name, result_name):    # 以二进制读模式打开    fp = open(pdf_name, '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    # 创建PDf 资源管理器 来管理共享资源    rsrcmgr = PDFResourceManager()    # 创建一个PDF设备对象    laparams = LAParams()    device = PDFPageAggregator(rsrcmgr, laparams=laparams)    # 创建一个PDF解释器对象    interpreter = PDFPageInterpreter(rsrcmgr, device)         with open(result_name,"w",encoding="u8") as fd_out:        # 循环遍历列表,每次处理一个page的内容        for i,page in enumerate(doc.get_pages(),1):            index = "===========《第{}页》===========".format(i)            print(index)            fd_out.write(index + "/n")            interpreter.process_page(page)            # 接受该页面的LTPage对象            layout = device.get_result()            for x in layout:                # 这里layout是一个LTPage对象 里面存放着 这个page解析出的各种对象 一般包括LTTextBox,                # LTFigure, LTImage, LTTextBoxHorizontal 等等 想要获取文本就获得对象的text属性                if not isinstance(x, LTTextBoxHorizontal):                    continue                results = x.get_text()                print(results)                fd_out.write(results)                          if __name__ == '__main__':    pdf_name = 'test.pdf'    result = 'test.txt'    read_pdf(pdf_name, result)

以上就是python解析PDF的详细内容,更多关于python解析PDF的资料请关注51zixue.net其它相关文章!


Python快速将ppt制作成配音视频课件的操作方法
用python搭建一个花卉识别系统
万事OK自学网:51自学网_软件自学网_CAD自学网自学excel、自学PS、自学CAD、自学C语言、自学css3实例,是一个通过网络自主学习工作技能的自学平台,网友喜欢的软件自学网站。