序言

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/

3. 文本提取步骤

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

  1. 打开Word应用程序

  2. 打开Word文档/PDF文档

  3. 保存为txt文档

  4. 关闭Word应用程序


第2节 Word文本信息提取

1. 文本提取需求概述

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

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文档内容信息如下:

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文档文本内容的抽取),可以在根目录下文档的批量抽取,并自动保存到指定位置。

实现思路

实现思路:

  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)

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

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节 附录

第07章 文本信息提取相关推荐

  1. JavaWeb笔记:第07章 MVC |EL |JST |Filter |Listener |JQuery |AJAX |Maven |JSON |Redis |Linux |Nginx

    JavaWeb笔记:第07章 MVC |EL |JST |Filter |Listener |JQuery |AJAX |Maven |JSON |Redis |Linux |Nginx 1. MVC ...

  2. 数据可视化第二版-03部分-07章-局部与整体

    文章目录 数据可视化第二版-03部分-07章-局部与整体 总结 可视化视角-局部与整体 代码实现 韦恩图 venn3 venn2 饼图 环形图 旭日图 园堆积图 矩形树图 漏斗图 基于matplot' ...

  3. 《面向对象程序设计》第07章在线测试

    <面向对象程序设计>第07章在线测试  <面向对象程序设计>第07章在线测试 剩余时间: 59:56  答题须知:1.本卷满分20分.            2.答完题后,请一 ...

  4. 《微机原理及接口技术》第07章在线测试

    <微机原理及接口技术>第07章在线测试  <微机原理及接口技术>第07章在线测试 剩余时间: 59:55  答题须知:1.本卷满分20分.            2.答完题后, ...

  5. 《计算机网络》第10章在线测试,《计算机网络》第07章在线测试

    <计算机网络>第 07 章在线测试 答题须知:1.本卷满分 20 分. 剩余时间:54:29 2.答完题后,请一定要单击下面的"交卷"按钮交卷,否则无法记录本试卷的成绩 ...

  6. 计算机专业英语第07章,计算机专业英语电子教案第07章.ppt

    计算机专业英语电子教案第07章 Computer English Chapter 7 Programming Languages 复杂定语(从句)的翻译技巧之二 四.句子结构调整法 有时,原文句中一个 ...

  7. python中文文本信息提取_PyMuPDF提取文本信息

    本文作者:王碧琪 文字编辑:方    言 技术总编:张    邯 Python云端培训课程火热招生中~ 爬虫俱乐部将于2020年7月25日至28日在线上举行Python编程技术训练营,本次培训采用理论 ...

  8. 《计算传播学导论》读书笔记——第二章文本分析简介

    <计算传播学导论>读书笔记--第二章文本分析简介 第一节 文本分析研究现状 常用文本挖掘技术 第二节 文本分析与传播学研究 (一)为什么文本挖掘技术逐渐受到传播学者的关注 (二)不同文本分 ...

  9. 《计算传播学导论》读书笔记:第二章 文本分析简介

    目录 第二章 文本分析简介 第一节 文本分析研究现状 第二节 文本分析与传播学研究 一.为什么文本挖掘技术逐渐受到传播学者的关注? 二.不同的文本分析研究对传播学的理论贡献 第三节 文本分析的基本步骤 ...

最新文章

  1. JSP显示页面和数据库乱码
  2. Garbage First
  3. C语言易错题集 第三部
  4. JAVA volatile关键字正确使用姿势
  5. python多个装饰器执行顺序_Python面试题之多个装饰器执行顺序
  6. 进程、线程和协程的理解
  7. CSDN博客如何调整文字的字体、大小、颜色
  8. JasperReport| JasperReport中使用自定义字体(font)
  9. 二叉树的层次遍历算法
  10. android5.1 xposed,Xposed框架oppo下载
  11. flex builder 4.6破解
  12. 计算机主板提示ahci,映泰主板设置硬盘模式AHCI或IDE的教程
  13. 2022 RoboCom 世界机器人开发者大赛-本科组(省赛)RC-u4 攻略分队
  14. Android JNI学习-调用第三方SO库
  15. LightOJ1197 Help Hanzo(欧拉筛+区间素数)
  16. linux内核max函数实现
  17. <figure> <figcaption>筆記
  18. Maya粒子特效制作(二)
  19. 因子分析累计贡献率_累计方差贡献率_spss累计方差贡献率_因子分析方差贡献率...
  20. BUUCTF [GYCTF2020] Blacklist

热门文章

  1. FPGA学习笔记(七): DSB调制解调的仿真
  2. 其他——dhtmlxGantt甘特图API精华总结
  3. 什么是MIT开源协议
  4. linux 设置深信服easyconnect 代理
  5. 适合的才是最好的:记一次内网安装feather经历
  6. java.lang.ClassNotFoundException(通俗易懂)
  7. 在Ubuntu上安装NTL
  8. 我爱赚钱吧:你知道自己建网站可以赚钱吗?①
  9. 难得轻闲-海豚湾恋人
  10. 算法设计技巧与分析(六):图遍历(Graph Traversal)