Python数据预处理之抽取文本信息(2)
- 数据特点:没有固定格式的数据
- 常见格式:Word、PDF、PPT、图片、音视频等。
- 应用场合:图片识别、人脸识别、医疗影像、文本分析等。
- 数据采集:网络爬虫、数据存档等方式。
2 常见的文本抽取方法
针对数据不同形式,通过特定方式的数据采集方式(文档下载、数据库导出、网络爬虫、语音收集、图片解析等等)获取数据,无论是结构化的数据库文件、半结构化的网页数据,还是非结构化的图片、音视频。我们最终的目的都是将数据传入到电脑之中,通过算法模型挖掘其潜在的价值,为最终的AI技术做支撑。不同的是,在结构化和半结构化数据数据集成过程中,我们可以提取相关文本信息,做进一步的数据预处理;而非结构化的图片、音视频我们采用一定的技术手段,获取其对应的数据点矩阵。这一点不太容易理解,我们比如说想解析一张图片的数据,我们知道图片是有长宽高组成的,还包括红蓝绿三种基本色。那么我们就找到对应的多维特征,采用数据点占位表示,比如:
| 图片名 | 长(bit) | 宽(bit) | 红 | 绿 | 蓝 |
|---|---|---|---|---|---|
| 猫1 | 12 | 100 | 0 | 0 | 1 |
| 狗2 | 101 | 234 | 1 | 1 | 1 |
| 猪3 | 202 | 24 | 0 | 1 | 0 |
上面就数据表示猫1这张图片,长宽位点(12,100)处只有蓝色构成;狗2这张图片,长宽位点(101,234)处有红绿蓝3中色构成;猪3这张图片,长宽位点(202,24)处只有绿构成。这就是非结构数据图片转化为数值型数据的原理。完整流程数据挖掘的流程图如下所示:

我根据不同的数据类型,采用对应的数据采集方式获取目标数据。这时候的数据质量很差,存在文本格式不同,数据表示形式不同等诸多问题。这里我们单纯的考虑文本信息的处理,就文本信息而言,你采集的数据可能是网页、数据库文件、pdf文档、word文档等等。我们想去处理这些数据,还需要对数据进行集成即转化为统一的数据格式,这里我们就需要文本信息抽取,常见的抽取方式包括以下几个内容:在线格式转换工具、office内置格式转换、自己开发文本抽取工具。详见下图:

经过实际操作会发现采用在线格式转换工具存在几个弊端,其限制文件转化的数据,要么就是收费的;而采用本地的office自带文档,一个个另存为文本,肯定不现实。基于上述情况,我们对工具抽取的弊端总结如下:
- 格式转换后,识别乱码较多
- 不支持或者限制支持批量处理
- 批量转化收费问题
- 格式转换后的txt文件存在编码问题
- 生成文件名一堆数字乱码
- 操作不够灵活便捷
我们针对以上问题,就去寻求解决方式,那就是自己动手丰衣足食,我们自己去打造批量文本抽取问题,我们期待效果是:
- 支持PDF/Word等多格式文本抽取
- 自动过滤不符合指定格式的文件
- 生成的目标文件与原文件目录一致
- 生成文档采用统一的编码格式保存(如:UTF-8 )
- 支持默认保存路径和自定义保存路径
3 抽取Word文档文本
做word文档抽取工作,我们运行环境是在win10-64bit下,python3.5,Anaconda4.4版本下执行的,所使用的插件是win32com。下载地址:
代码实现:
#coding=utf-8 """ Description: Word文件转化TXT文本 Author:伏草惟存 Prompt: code in Python3 env Install package: pip install pypiwin32 """ import os,fnmatch from win32com import client as wc from win32com.client import Dispatch ''' 功能描述:word文件转存txt文件,默认存储当前路径下;用户可以指定存储文件路径。 参数描述:1 filePath:文件路径 2 savePath: 指定保存路径 ''' def Word2Txt(filePath,savePath=''): # 1 切分文件上级目录和文件名 dirs,filename = os.path.split(filePath) # print(dirs,'\n',filename) # 2 修改转化后的文件名 new_name = '' if fnmatch.fnmatch(filename,'*.doc'): new_name = filename[:-4]+'.txt' el
