项目需要对一些如doc、docx、txt等常见格式的文件进行分词处理,之前只用Python的jieba库进行过简单的中文分词,效果不错,但是只能读取txt文件,功能受限。今天查阅了一些论坛,将doc转换为docx,成功读取docx文件并分词,并解决了txt读取的非法字符问题(docx和doc的暂未解决)三个地方。
下面将分别介绍三者如何实现。
一、将doc转换为docx
参照链接:
python大批量读写.doc文件的解决方案 - CSDN博客
注意:要提前安装pypewin32库
二、读取docx文件并分词
参照链接:
Python+wordcloud+jieba+docx生成中文词云和词频统计 - CSDN博客
https://blog.csdn.net/fengjianc/article/details/78929121
https://blog.csdn.net/fengjianc/article/details/78929121
一句话总结:
docx库的使用可以让我们得到docx文件的str内容,这样我们就可以用jieba库来进行分词了
提供的链接是一个很好的实战例子,里面编写的函数大多可以稍加修改后直接使用。
特别注意:
分词是为了后续词频的统计,对于词频的统计,jieba分词会产生大量的无意义词汇(可理解成普遍性存在,不能代表文章特殊性的词汇)。对于我们的词频处理是很不好的。之前我都是粗暴的人工筛选几遍排除掉一些无意义词汇。这篇文章里则提供了一种中文停用词表的存在。附链接如下 最全中文停用词表整理(1893个) - CSDN博客
https://blog.csdn.net/shijiebei2009/article/details/39696571。
复制后粘贴到txt文件后保存,注意此时不能直接使用,直接保存后的字符含有一些无用的空格,需要我们进行处理。
处理方法也很简单,调用str=str.strip()方法就能删去无用的空格。
stop_words = open('stopwords1893.txt')
stop_words_text = stop_words.read()
stop_words.close()
stop_words_text_list = stop_words_text.split('\n')
for i in range(len(stop_words_text_list)):
stop_words_text_list[i]=stop_words_text_list[i].strip()
三、txt读取的非法字符问题
仿照上一个链接中读取docx文件str内容的方法,我改写了读取txt中内容的方法。
读取docx文件内容
def readDocument(strFile):
'''
获取文档对象,将文档内容按段落读入,并存入doc中
'''
file = docx.Document(strFile)
doc = ""
for para in file.paragraphs:
doc = doc + para.text
return doc
读取txt中内容
def readTxt(strFile):
file=open(strFile,errors="ignore").read()
txt=file
return txt
然后我进行了一下测验,正常文件可以,但是含有特殊字符的就会报错,查阅相关资料后发现解决方法大致有在open(file)时加入encoding条件,如open(file,encoding="utf-8")或者open(file,errors="ignore")两种方法。前者是改变编码,后者是当发现有非法字符是采取忽略,不报错。
联系到自己的实际项目,我对分词的内容是基于文字的,识别不出来的非法字符对我没有什么卵用,故而我采取忽略策略。代码如上。