前言:
大家好,我是python新人小白。学python也是自己在摸爬滚打,对python也是知之甚少,写博客是一方面是在记录自己学python时所遇到的问题以作备忘;另一方面也是真心希望各位python大佬们能够对我的问题进行指点迷津,通过各位大佬的评论汲取经验。TKS whenever!
问题描述:
今天在使用wordcloud库对txt文件中的中文内容生成词云时,遇到了编码错误提示,但奇怪的是txt文件中保存的是纯英文时,在生成词云的时候,一点毛病都没有!下面是我写的简单代码以及报错提示
from scipy.misc import imread
import jieba
new_mask = imread('carton2.jpg')
with open('词云填充内容.txt','r') as file:
raw_txt = file.read()
pro_txt = jieba.lcut(raw_txt)
final_txt = ' '.join(pro_txt)
alen = wordcloud.WordCloud(background_color = 'white', \
font_path="msyh.ttc",\
width = 1000,\
height = 1000,\
max_words = 200,\
mask = new_mask,\
).generate(final_txt)
alen.to_file('词云2.png')
解决方案:
在网上查看了一些解决方案,基本上都是在open时设置编码格式进行解决,这种方法成功解决了我的问题。以下是我参考的原文链接:原文连接
图片上的字体设置一定不要忘了添加,不然生成词云时就会像下面一样
最后献上成功生成的词云图片,虽然代码写的很简单,不过也着实让小白基动,咳咳,兴奋了一下。
学习总结:
1、在运用wordcloud库时,由于所有的功能都封装在WordCloud()中了,所以在实际使用是,一定要实例化一个WordCloud类的对象,就像代码中的‘alen’一样;
2、词云生成时,需要以空格或者标点符号为分隔符号对目标文件进行分词处理。在处理英文文本时,由于每个英文单词都是以空格分开的,所以不需要我们在进行分词操作,但是中文就不一样了,需要使用jieba库进行分词处理,流程大概是这样的:
(1)首先在.py文件所在路径下创建一个包含中文内容的txt文件;
(2)open(‘词云填充内容.txt’,‘r’,encoding=‘编码格式’)—设置编码格式;
(3)read()----读出中文,输出字符串s1
jieba.lcut()—对字符串s1进行精确分词,以列表类型输出
join()函数----将列表各元素(即分好的词语)以空格连接起来,输出字符串s2
(4)wordcloud.WordCloud().generate()----设置参数(想要改变词云形状的可以设置mask参数)
(5)to_file()----生成词云图片
3.打完收工。