Python如何读取PDF文档(或TXT)

   2023-02-09 学习力0
核心提示:目录如何读取PDF文档(或TXT)文档PDF的Python读取读取流程读取PDF文档完整实例总结如何读取PDF文档(或TXT)字符串在Python内部的表示是Unicode编码,首先我们来认识Python中encode()和decode()的作用与区别:在做编码转换时,通常需要以unicode作为中间编码,即先

如何读取PDF文档(或TXT)

字符串在Python内部的表示是Unicode编码,首先我们来认识Python中encode()和decode()的作用与区别:

在做编码转换时,通常需要以unicode作为中间编码,即先将其他编码的字符解码(decode)成unicode,再从unicode编码(encode)成另一种编码。

  • decode的作用是将其他编码的字符转换成unicode编码,如str1,decode(‘gb2312’),表示将gb2312编码的字符串str1转换成unicode编码。
  • encode的作用是将unicode编码转换成其他编码的字符串,如str2,encode(‘gb2312’),表示将unicode编码的字符串str2转换成gb2312编码。

常见文档读取有:

  • TXT
  • PDF

其中TXT文档的读取较为简单,爬取网页数据时注意read()的编码设置即可

我们主要来介绍使用pdfminer3k模块读取PDF

文档PDF的Python读取

——英文PDF文件支持最好且只支持英文PDF是pyPDF2库

——而对于多语言PDF文件支持最好的则是pdfminer,我们这里就使用pdfminer3k库来实现读取PDF。

1. 安装pdfminer3k:

——pip install pdfminer3k

——python setup.py install`在这里插入代码片`

2. 验证安装pdfminer3k是否成功:

在cmd下,进入tools目录下( cd ~/Downloads/pdfminer3k-1.3.1/tools)后使用命令 ——python3 pdf2txt.py ../samples/simple1.pdf        #..是退回上一层目录的意思

3. Python读取PDF文档:

pdfminer3k中类的关系:

Python如何读取PDF文档(或TXT)

读取流程

——打开pdf文档的文件对象:

fp = open("naacl06-shinyama.pdf", 'rb')     #本地文档
fp = urlopen('https://www.tencent.com/zh-cn/articles/802741466496787.pdf')   #在线pdf

——创建文档分析器(解析器):

pdf_parser = PDFParser(fp)       #传入pdf,从中获取数据 

——创建文档对象,保存获取的数据:

pdf_doc = PDFDocument()     #保存获取的数据,和PDFParser是相互关联的 

——连接分析器和文档对象:

pdf_parser.set_document(doc)          
doc.set_parser(pdf_parser)       

——判断文件是否允许文本提取:

 if not doc.is_extractable:
     raise PDFTextExtractionNotAllowed     #raise如果抛出异常,后续语句不执行

——对文档对象提供密码(password)初始化,没有就不用传该参数:

doc.initialize("")        

Python如何读取PDF文档(或TXT)

——创建资源管理器:

resource = PDFResourceManager()      #用于存储共享资源,如字体或图像

——创建参数分析器:

laparam = LAParams()

——创建一个页面聚合器对象:

device = PDFPageAggregator(resource, laparams=laparam)

——创建一个页面解析器对象来处理页面内容:

interpreter = PDFPageInterpreter(resource, device)     #传入的是页面资源和聚合器对象

Python如何读取PDF文档(或TXT)

——获取page列表:

 doc.get_pages() 

——使用页面解释器来读取:

interpreter.process_page(page)

——使用页面聚合器获得内容:

layout = device.get_result()       #这里layout是一个LTPage对象 里面存放着 这个page解析出的各种对象

——循环遍历取出聚合器获得的对象内容:

for out in layout:       
        if hasattr(out, 'get_text'):              #判断out对象是否具有get_text方法
            print(out.get_text())                 #输出out对象

Python如何读取PDF文档(或TXT)

Layout布局分析返回的PDF文档中的每个页面LTPage对象。

这个对象和页内包含的子对象,形成一个树结构。

如图所示:

Python如何读取PDF文档(或TXT)

树结构节点含义:

节点 含义
LTPage 表示整个页。可能会含有LTTextBox,LTFigure,LTImage,LTRect,LTCurve和LTLine子对象
LTTextBox 表示一组文本块可能包含在一个矩形区域。注意此box是由几何分析中创建,并且不一定表示该文本的一个逻辑边界。它包含LTTextLine对象的列表。使用 get_text()方法返回文本内容
LTTextLine 包含表示单个文本行LTChar对象的列表。字符对齐要么水平或垂直,取决于文本的写入模式。使用get_text()方法返回文本内容
LTAnno 在文本中字母实际上被表示为Unicode字符串。需要注意的是,虽然一个LTChar对象具有实际边界,LTAnno对象没有,因为这些是“虚拟”的字符,根据两个字符间的关系(例如,一个空格)由布局分析后插入
LTImage 表示一个图像对象。嵌入式图像可以是JPEG或其它格式,但是目前PDFMiner没有放置太多精力在图形对象
LTLine 代表一条直线。可用于分离文本或附图
LTRect 表示矩形。可用于框架的另一图片或数字。
LTCurve 表示一个通用的Bezier曲线

读取PDF文档完整实例

from urllib.request import urlopen
from pdfminer.pdfparser import PDFParser, PDFDocument
from pdfminer.pdfinterp import PDFResourceManager, PDFPageInterpreter
from pdfminer.pdfdevice import PDFDevice
 
from pdfminer.converter import PDFPageAggregator
from pdfminer.layout import LTTextBoxHorizontal, LAParams
 
#获取文档
#fp = open("naacl06-shinyama.pdf", 'rb')    
fp = urlopen('https://www.tencent.com/zh-cn/articles/802741466496787.pdf')
 
#创建解释器
pdf_parser = PDFParser(fp)
 
#PDF文档对象
doc = PDFDocument()
 
#连接解释器和文档对象
parser.set_document(doc)
doc.set_parser(parser)
 
#初始化文档
doc.initialize()
 
#创建PDF资源管理器
resource = PDFResourceManager()
 
# 创建一个PDF参数分析器
laparam = LAParams()
 
# 创建聚合器
device = PDFPageAggregator(resource, laparams=laparam)
 
#创建PDF页面解析器
interpreter = PDFPageInterpreter(resource, device)
 
# 循环遍历列表,每次处理一页的内容
# doc.get_pages() 获取page列表

for page in doc.get_pages():
    #使用页面解释器来读取
    interpreter.process_page(page)
    #使用聚合器获得内容
    layout = device.get_result()
    for out in layout:       
        if hasattr(out, 'get_text'):
            print(out.get_text())

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持。

原文地址:https://blog.csdn.net/qq_42415326/article/details/89432839
 
标签: Python PDF文档 TXT
反对 0举报 0 评论 0
 

免责声明:本文仅代表作者个人观点,与乐学笔记(本网)无关。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
    本网站有部分内容均转载自其它媒体,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责,若因作品内容、知识产权、版权和其他问题,请及时提供相关证明等材料并与我们留言联系,本网站将在规定时间内给予删除等相关处理.

  • 如何在Abaqus的python中调用Matlab程序
    目录1. 确定版本信息2. 备份python3. 设置环境变量4. 安装程序5. 调试运行参考资料Abaqus2018操作系统Win10 64位Python版本2.7(路径C:\SIMULIA\CAE\2018\win_b64\tools\SMApy\python2.7)2. 备份python将上述的“python2.7”文件夹复制出来,避免因操作错误
    03-16
  • SICP:复数的直角和极坐标的表示(Python实现)
    SICP:复数的直角和极坐标的表示(Python实现)
    数据抽象屏障是控制复杂性的强有力工具,然而这种类型的数据抽象还不够强大有力。从一个另一个角度看,对于一个数据对象可能存在多种有用的表示方式,且我们希望所设计的系统能够处理多种表示形式。比如,复数就可以表示为两种几乎等价的形式:直角坐标形式(
    03-16
  • [个人发展] 我做了一个可以永远谈论任何事情的女士对话AI(TypeScript,Python)
    [个人发展] 我做了一个可以永远谈论任何事情的
    在个人发展中对话式人工智能服务 Eveki我做了虚构角色1这是一项以人工智能为特色的服务,可以再现并享受自然对话。这一次,作为第一个艾小姐发表了。请先尝试实物。服务概览与人工智能对话基本上只需输入您的信息是。对话是用女士的语言进行的,就像人类一样
    03-08
  • ruby写爬虫 ruby python
    ruby写爬虫 ruby python
    http://www.javaeye.com/topic/545160爬虫性能比较http://www.rubyrailways.com/data-extraction-for-web-20-screen-scraping-in-rubyrails/srcapihttp://huacnlee.com/blog/ruby-scrapi-collect-koubei  2009年4月22日 星期三用ruby写的一个网络爬虫程序前
    03-08
  • sf02_选择排序算法Java Python rust 实现
    Java 实现package common;public class SimpleArithmetic {/** * 选择排序 * 输入整形数组:a[n] 【4、5、3、7】 * 1. 取数组编号为i(i属于[0 , n-2])的数组值 a[i],即第一重循环 * 2. 假定a[i]为数组a[k](k属于[i,n-1])中的最小值a[min],即执行初始化 min =i
    02-09
  • Python vs Ruby: 谁是最好的 web 开发语言?
    Python 和 Ruby 都是目前用来开发 websites、web-based apps 和 web services 的流行编程语言之一。 这两种语言在许多方面有相似之处。它们都是高级的面向对象的编程语言,都是交互式脚本语言、都提供标准库且支持持久化。但是,Python 和 Ruby 的解决方法却
    02-09
  • 详解Python手写数字识别模型的构建与使用
    详解Python手写数字识别模型的构建与使用
    目录一:手写数字模型构建与保存1 加载数据集2 特征数据 标签数据3 训练集 测试集4 数据流图 输入层5 隐藏层6 损失函数7 梯度下降算法8 输出损失值 9 模型 保存与使用10 完整源码分享二:手写数字模型使用与测试一:手写数字模型构建与保存1 加载数据集# 1加
  • Python asyncore socket客户端实现方法详解
    Python asyncore socket客户端实现方法详解
    目录介绍1.定义类并且继承 asyncore.dispatcher2.实现类中的回调代码调用父类方法创建socket对象连接服务器3.创建对象并且执行asyncore.loop进入运行循环服务端示例代码运行结果注意介绍asyncore库是python的一个标准库,提供了以异步的方式写入套接字服务的
  • Python+Sklearn实现异常检测
    目录离群检测 与 新奇检测Sklearn 中支持的方法孤立森林 IsolationForestLocal Outlier FactorOneClassSVMElliptic Envelope离群检测 与 新奇检测很多应用场景都需要能够确定样本是否属于与现有的分布,或者应该被视为不同的分布。离群检测(Outlier detectio
  • Python基础教程之while循环用法讲解 Python中的while循环
    Python基础教程之while循环用法讲解 Python中的
    目录1.while 循环2.无限循环3、while 循环使用 else 语句4、简单语句组附小练习:总结1.while 循环Python 中 while 语句的一般形式:while 判断条件(condition):    执行语句(statements)……执行流程图如下:同样需要注意冒号和缩进。另外,在 Python 中
点击排行