• 第07章 文本信息提取


     

     

    序言

    1. 内容介绍

    本章详细介绍了Word 文本信息提取方式、PDF 文本信息提取方式等内容。

    2. 理论目标

    • 了解Word 文本信息提取方式
    • 了解PDF 文本信息提取方式

    3. 实践目标

    • 掌握Word 文本信息提取方法,能完成Word 文本信息提取
    • 掌握PDF 文本信息提取方法,能完成PDF 文本信息提取

    4. 实践案例

    5. 内容目录

    • 1.文本提取介绍

    • 2.Word 文本信息提取

    • 3.PDF 文本信息提取

    • 4.文本信息提取实战


    第1节 文本提取介绍

    1. 文本提取概述

    通过数据采集获取的数据信息往往五花八门、杂乱无章,因此需要对这些不同类型的数据进行集成,并将集成数据传入到电脑中,然后通过算法模型挖掘其潜在的价值,作为智能应用的支撑。

     

    采集的原数据存在数据质量差、文档格式杂、数据表示形式多样化、数据信息错误等诸多问题,单纯考虑文本信息处理工作,就文本信息而言,采集到的文档数据可能是网页、SQL文件、PDF文档、doc文档等,对这些文本数据继承的思路就是文本信息的提取,然后进行格式化处理,常见的文本抽取方式包括:

    1. 使用在线格式转换工具转换。
    2. 使用office内置格式进行转换。
    3. 自己开发文本抽取工具进行文本抽取。

    作为优秀的程序员,本章将针对第三种方式展开讨论。

    2. Pywin32 库安装

    Pywin32 是Python的第三方库文件,它提供了从Python 访问Windows API 的功能。Windows Pywin32 允许开发者使用Python 开发win32 应用和对Windows 系统实现自动化操作,Pywin32 核心模块是 win32.com。

    本章通过Pywin32 启动Word应用程序,打开相关文档并将相关文本信息保存为txt文档。

    安装命令

    pip install pypiwin32 -i https://pypi.tuna.tsinghua.edu.cn/simple/
    

    5aec0fb2193874ed6511a189aabe805e.png

    3. 文本提取步骤

    本章将应用Pywin32 调用系统本地应用接口,通过本地应用对源文档进行打开、另存为文本文档。基本步骤:

    1. 打开Word应用程序

    2. 打开Word文档/PDF文档

    3. 保存为txt文档

    4. 关闭Word应用程序


    第2节 Word文本信息提取

    1. 文本提取需求概述

    下面将以抽取Word文档中的文本为例,来介绍抽取文件信息的方法,Word文档内容信息如下:

    84ab0447113fe69dc545902bbcfd7faa.png

    2. 文本提取实现

    代码逻辑:

    1. 打开Word应用程序
    2. 打开Word文档
    3. 保存为txt文档
    4. 关闭Word应用程序
     

    from win32com import client as wc path = r'E:/gdlgxy/6.数据采集与预处理/准备材料/01教学课件/MarkDown/第07章_文本信息提取/' filename = r"Python数据预处理.docx" wordapp = wc.Dispatch('Word.Application') mytxt = wordapp.Documents.Open(path + filename) ## 建议此处使用绝对路径 mytxt.SaveAs(path + r"Python数据预处理word.txt", FileFormat=4) ## 建议此处使用绝对路径,FileFormat=4 表示提取文本信息 mytxt.Close()


    第3节 PDF文本信息提取

    1. 文本提取需求概述

    下面将以抽取PDF文档中的文本为例,来介绍抽取文件信息的方法,PDF文档内容信息如下:

    b53c622f46fdb7e77be2c1854c7e5596.png

    2. 文本提取实现

    代码逻辑:

    1. 打开Word应用程序
    2. 打开PDF文档
    3. 保存为txt文档
    4. 关闭Word应用程序
     

    from win32com import client as wc path = r'E:/gdlgxy/6.数据采集与预处理/准备材料/01教学课件/MarkDown/第07章_文本信息提取/' filename = r"Python数据预处理.pdf" wordapp = wc.Dispatch('Word.Application') mytxt = wordapp.Documents.Open(path + filename) ## 建议此处使用绝对路径 mytxt.SaveAs(path + r"Python数据预处理pdf.txt", FileFormat=4) ## 建议此处使用绝对路径,FileFormat=4 表示提取文本信息 mytxt.Close()


    第4节 文本信息提取实战

    1. 需求描述与实现思路

    需求描述

    结合前述的文本抽取方法,实现目录下新闻文本的批量抽取(历史、教育、汽车各30篇的PDF文档文本内容的抽取),可以在根目录下文档的批量抽取,并自动保存到指定位置。

    fcf9a7e41c5b7d5840c11a7b066541a1.png

    实现思路

    实现思路:

    1. 实现获取文件列表功能;
    2. 实现PDF文档文本信息提取功能(保存为txt文档);
    3. 调用获取文件列表功能(步骤1),循环调用文本信息提取功能(步骤2),完成文本信息提取。

    2. 获取文件列表

    遍历文件列表思路:

    1. 获取目录下所有文件及文件夹
    2. 判断是文件还是文件夹
    3. 如果是文件则更新至文件列表内,如果是文件夹则返回步骤1

    此处需重复执行骤1~步骤3,引入递归遍历策略,以上思路更新如下:

    • 步骤1.首先通过传入根目录来判断是否是文件夹,然后判断文件夹下是否有二级目录
    • 步骤2.判断是文件还是二级目录
    • 2.1. 如果不是二级目录,就打印出文件名(更新至文件列表内)
    • 2.2. 如果是二级目录,继续做递归处理(即以二级目录代替步骤1的根目录重复调用),直至遍历所有文件为止。

    实现方式:

    1. 获取文件列表功能使用类封装:
    2. 使用时先创建对象,创建时初始化待遍历目录路径:
    3. 然后调用遍历目录文件方法获取文件列表,访问目录下文件列表、新文件列表等属性。
     

    import os, time class FileScan(): def __init__(self, rootDir): # 1 初始化 self.rootDir = rootDir # 目录路径 self.fileList = [] # 目录下文件列表 self.newFileList = [] # 新文件列表 def AllFilesScan(self, rootDir): # 2 递归遍历所有文件,并提供具体文件操作功能 for rootDiri in os.listdir(rootDir): # 返回指定目录包含的文件或文件夹的名字的列表 path = os.path.join(rootDir, rootDiri) # 待处理文件夹名字集合 if os.path.isfile(path): # 核心算法:如果是文件就更新至文件列表,如果是目录则递归调用函数自身 self.fileList.append(os.path.abspath(path)) # 获取绝对路径 filename = path.replace("./", "").replace("/", "_").replace("\\", "_").replace(".pdf", ".txt") # 增加路径前缀 self.newFileList.append(filename) elif os.path.isdir(path): self.AllFilesScan(path) def DirScan(self): # 3 启动遍历目录文件方法 self.AllFilesScan(self.rootDir) if __name__ == '__main__': rootDir = r"./EnPapers/" # 根目录文件路径 fs = FileScan(rootDir) # 默认方法参数打印所有文件路径 fs.DirScan() # 遍历文件并进行相关操作 print(len(fs.fileList)) # 访问根目录文件列表 print(len(fs.newFileList))

    3. PDF文本信息提取

    结合第 3 节介绍的PDF文本信息提取方法,通过函数封装,方便遍历时重复调用。

    • 实现针对指定PDF文件信息进行提取,并保存到指定位置。
     

    from win32com import client as wc def pdf2txt(fin, fd, fout): print(fin) wordApp = wc.Dispatch('Word.Application') mytxt = wordApp.Documents.Open(fin) mytxt.SaveAs(fd + fout, FileFormat=4) mytxt.Close() if __name__ == '__main__': fin = r'E:/gdlgxy/6.数据采集与预处理/准备材料/01教学课件/MarkDown/第07章_文本信息提取/' + r"Python数据预处理.pdf" fd = r'E:/gdlgxy/6.数据采集与预处理/准备材料/01教学课件/MarkDown/第07章_文本信息提取/EnPapersOutput/' fout = r"Python数据预处理.txt" pdf2txt(fin, fd, fout)

    E:/gdlgxy/6.数据采集与预处理/准备材料/01教学课件/MarkDown/07章_文本信息提取/Python数据预处理.pdf
    

    4. 遍历提取文本信息

    遍历“获取文件列表功能”返回的文件列表,重复调用函数“PDF文本信息提取”,完成文本信息提取及保存。

     

    if __name__ == '__main__': rootDir = r"./EnPapers/" # 根目录文件路径 fd = r'E:/gdlgxy/6.数据采集与预处理/准备材料/01教学课件/MarkDown/第07章_文本信息提取/EnPapersOutput/' # 结果文件路径 fs=FileScan(rootDir) # 默认方法参数打印所有文件路径 fs.DirScan() # 遍历文件并进行相关操作 for i in range(len(fs.fileList)): # 访问根目录文件列表 fin = fs.fileList[i] fout = fs.newFileList[i] print(fin) pdf2txt(fin, fd, fout)

    1. E:\gdlgxy\6.数据采集与预处理\准备材料\01教学课件\MarkDown\第07章_文本信息提取\EnPapers\历史\1.pdf
    2. E:\gdlgxy\6.数据采集与预处理\准备材料\01教学课件\MarkDown\第07章_文本信息提取\EnPapers\历史\10.pdf
    3. E:\gdlgxy\6.数据采集与预处理\准备材料\01教学课件\MarkDown\第07章_文本信息提取\EnPapers\历史\11.pdf
    4. E:\gdlgxy\6.数据采集与预处理\准备材料\01教学课件\MarkDown\第07章_文本信息提取\EnPapers\历史\12.pdf
    5. E:\gdlgxy\6.数据采集与预处理\准备材料\01教学课件\MarkDown\第07章_文本信息提取\EnPapers\历史\13.pdf
    6. ...

    5. 文本信息提取实战小结

    综合以上步骤方法,通过类封装成PDF转换txt文档工具,用户只要输入两个参数(源目录路径,目标目录路径),即可完成把源目录下的所有PDF文件转为txt文档,存放至目标目录下。

    创建文档转换工具基本结构:

    1. 定义类 FileScan
    2. 定义构造器(实例属性)
    • 源目录路径
    • 目标目录路径
    1. PDF转txt方法
    2. 遍历目录文件方法
    3. 遍历目录文件方法启动
     

    #!/usr/bin/python # -*- coding: utf-8 -*- # @Time : 2021年8月17日 # @Author : Alan # @Webchat : kingdragon_lun@126.com # @FileName: ch07.py # @Software: Python 3.7 ''' 功能描述: 遍历目录,将目录下所有PDF文件提取为txt文档 参数描述: 1 rootDir 源目录路径 2 destDir 目标目录路径 ''' import os from win32com import client as wc class FileScan(): def __init__(self, rootDir, destDir): # 1 初始化 self.rootDir = rootDir # 源目录路径(此处只能是相对路径) self.destDir = destDir # 目标目录路径 def pdf2txt(self, fin, fout): # 2 PDF转txt wordApp = wc.Dispatch('Word.Application') mytxt = wordApp.Documents.Open(fin) print(self.destDir + fout) mytxt.SaveAs(self.destDir + fout, FileFormat=4) mytxt.Close() def AllFilesScan(self, rootDir): # 3 递归遍历所有文件,并提供具体文件操作功能 # 返回指定目录包含的文件或文件夹的名字的列表 for rootDiri in os.listdir(rootDir): path = os.path.join(rootDir, rootDiri) # 待处理文件夹名字集合 # 核心算法:如果是文件就更新至文件列表,如果是目录则递归调用函数自身 if os.path.isfile(path): if path[-4:] == '.pdf': fin = os.path.abspath(path) # 获取绝对路径 filename = path.replace("./", "").replace("/", "_").replace("\\", "_").replace(".pdf", ".txt") # 增加路径前缀 self.pdf2txt(fin, filename) else: pass elif os.path.isdir(path): self.AllFilesScan(path) def fileTrans(self): # 4 遍历目录文件方法启动 self.AllFilesScan(self.rootDir) if __name__ == '__main__': rootDir = r"./EnPapers/" # 源目录文件路径(此处只能是相对路径) destDir = r'E:/python/python37/DataCollection/ch07/EnPapersOutput/' # 目标目录文件路径 fs=FileScan(rootDir, destDir) # 默认方法参数打印所有文件路径 fs.fileTrans() # 遍历文件并进行相关操作


    开始实验

    第5节 附录

     

     

  • 相关阅读:
    【面试经典150 | 区间】用最少数量的箭引爆气球
    行人重识别reid
    windows11 连接蓝牙鼠标
    Worthington丨Worthington 中性蛋白酶说明书
    【限时免费】20天拿下华为OD笔试之 【模拟】2023B-整数分解【欧弟算法】全网注释最详细分类最全的华为OD真题题解
    C和C++关键字
    计算机毕业设计springboot基于SpringBoot构建的高校疫情防控平台523g7源码+系统+程序+lw文档+部署
    React Router 中的 exact 属性
    【微信小程序高频面试题——精选一】
    SpringMVC入门
  • 原文地址:https://blog.csdn.net/a1234556667/article/details/126447466