数据预处理之抽取文本信息(2) (2)

上面就数据表示猫1这张图片,长宽位点(12,100)处只有蓝色构成;狗2这张图片,长宽位点(101,234)处有红绿蓝3中色构成;猪3这张图片,长宽位点(202,24)处只有绿构成。这就是非结构数据图片转化为数值型数据的原理。完整流程数据挖掘的流程图如下所示:

数据预处理之抽取文本信息(2)

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

数据预处理之抽取文本信息(2)

经过实际操作会发现采用在线格式转换工具存在几个弊端,其限制文件转化的数据,要么就是收费的;而采用本地的office自带文档,一个个另存为文本,肯定不现实。基于上述情况,我们对工具抽取的弊端总结如下:

格式转换后,识别乱码较多

不支持或者限制支持批量处理

批量转化收费问题

格式转换后的txt文件存在编码问题

生成文件名一堆数字乱码

操作不够灵活便捷

我们针对以上问题,就去寻求解决方式,那就是自己动手丰衣足食,我们自己去打造批量文本抽取问题,我们期待效果是:

支持PDF/Word等多格式文本抽取

自动过滤不符合指定格式的文件

生成的目标文件与原文件目录一致

生成文档采用统一的编码格式保存(如:UTF-8 )

支持默认保存路径和自定义保存路径

3 抽取Word文档文本

做word文档抽取工作,我们运行环境是在win10-64bit下,python3.5,Anaconda4.4版本下执行的,所使用的插件是win32com。下载地址:https://pan.baidu.com/s/1-2BsiTs8XjMIe5Gnh_GFjw 密码: 7j3t
预装完win32com以后,以下代码便完成抽取word文本信息。

算法思路:

定义文件路径和转存路径:split

修改新的文件名:fnmatch

设置完整的保存路径:join

启动应用程序格式转换:Dispatch

保存文本:SaveAs

算法流程:

数据预处理之抽取文本信息(2)

代码实现:

#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' elif fnmatch.fnmatch(filename,'*.docx'): new_name = filename[:-5]+'.txt' else: return print('->',new_name) # 3 文件转化后的保存路径 if savePath=='': savePath = dirs else: savePath = savePath word_to_txt = os.path.join(savePath,new_name) print('->',word_to_txt) # 4 加载处理应用,word转化txt wordapp = wc.Dispatch('Word.Application') mytxt = wordapp.Documents.Open(filePath) mytxt.SaveAs(word_to_txt,4) mytxt.Close() if __name__=='__main__': filepath = os.path.abspath(r'../dataSet/filename.doc') # savepath = '' Word2Txt(filepath) 4 抽取PDF文档文本

算法思路:

定义文件路径和转存路径:split

修改新的文件名:fnmatch

设置完整的保存路径:join

启动应用程序格式转换:Dispatch

保存文本:SaveAs

算法流程:

数据预处理之抽取文本信息(2)

代码实现:

# coding=utf-8 """ Description: PDF文件转化TXT文本 Author:伏草惟存 Prompt: code in Python3 env """ import os,fnmatch from win32com import client as wc from win32com.client import Dispatch,gencache ''' 功能描述:pdf文件转化txt文本 参数描述:1 filePath:文件路径 2 savePath: 指定保存路径 ''' def Pdf2Txt(filePath,savePath=''): # 1 切分文件上级目录和文件名 dirs,filename = os.path.split(filePath) # print('目录:',dirs,'\n文件名:',filename) # 2 修改转化后的文件名 new_name = "" if fnmatch.fnmatch(filename,'*.pdf') or fnmatch.fnmatch(filename,'*.PDF'): new_name = filename[:-4]+'.txt' # 截取".pdf"之前的文件名 else: return print('新的文件名:',new_name) # 3 文件转化后的保存路径 if savePath=="": savePath = dirs else: savePath = savePath pdf_to_txt = os.path.join(savePath,new_name) print('保存路径:',pdf_to_txt) # 4 加载处理应用,pdf转化txt wordapp = wc.Dispatch('Word.Application') mytxt = wordapp.Documents.Open(filePath) mytxt.SaveAs(pdf_to_txt,4) mytxt.Close() if __name__=='__main__': # 使用绝对路径 filePath = os.path.abspath(r'../dataSet/Corpus/pdftotxt/2018年世界新闻自由日.pdf') # savePath = r'E:\\' Pdf2Txt(filePath) 5 文本抽取工具与编码

算法思路:

定义文件夹路径和转存夹路径:split

修改新的文件名:TranType(filename, typename)、fnmatch

设置完整的保存路径:join

启动应用程序格式转换:Dispatch

保存文本:SaveAs

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zyddfy.html