Python读写文件与非法字符处理

项目需要对一些如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

一句话总结:
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")两种方法。前者是改变编码,后者是当发现有非法字符是采取忽略,不报错。
联系到自己的实际项目,我对分词的内容是基于文字的,识别不出来的非法字符对我没有什么卵用,故而我采取忽略策略。代码如上。





  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值