上面就数据表示猫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。下载地址:https://pan.baidu.com/s/1-2BsiTs8XjMIe5Gnh_GFjw 密码: 7j3t
预装完win32com以后,以下代码便完成抽取word文本信息。
算法思路:
定义文件路径和转存路径:split
修改新的文件名:fnmatch
设置完整的保存路径:join
启动应用程序格式转换:Dispatch
保存文本:SaveAs
算法流程:
代码实现:
#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
算法流程:
代码实现:
# 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