• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

python词云库wordCloud使用方法详解(解决中文乱码)

python 搞代码 4年前 (2022-01-07) 70次浏览 已收录 0个评论

这篇文章主要介绍了python词云库wordCloud使用方法详解(解决中文乱码),需要的朋友可以参考下

文章中的例子主要借鉴wordColud的examples,在文章对examples中的例子做了一些改动。

一、wordColud设计中文词云乱码

使用wordColud设计词云的时候可能会产生乱码问题,因为wordColud默认的字体不支持中文,所以我们只需要替换wordColud的默认字体即可正常显示中文。

1、中文词云乱码

我们使用simhei(黑体)来替换wordColud的默认字体。

2、替换默认字体

a、在字体文件*.tff字体文件(simhei.tff)拷贝到wordColud安装的文件夹中,文件夹路径:anaconda(python)–>lib–>site-packages–>wordcolud,如下图:

其中矩形框出来的是wordColud默认的字体,椭圆形框的是我们下载的字体。

b、修改wordcolud.py文件中的字体设置,打开改路径下的wordcolud.py文件,找到下图的所示的框出来的这一行(29行)

将系统的DroidSansMono.tff修改为simhei.tff即可。

二、wordColud示例

1、设计一个简单的圆形词云

 import numpy as np import matplotlib.pyplot as plt from wordcloud import WordCloud,STOPWORDS from PIL import Image from os import path import matplotlib.pyplot as plt #用来正常显示中文 plt.rcParams["font.sans-serif"]=["SimHei"] #用来正常显示负号 plt.rcParams["axes.unicode_minus"]=False import os import random,jieba ''' 绘制单个词一个圆形的词云 ''' def single_wordColud(): text = "第一 第二 第三 第四" #产生一个以(150,150)为圆心,半径为130的圆形mask x,y = np.ogrid[:300,:300] mask = (x-150) ** 2 + (y-150) ** 2 > 130 ** 2 mask = 255 * mask.astype(int) wc = WordCloud(background_color="white",repeat=True,mask=mask) wc.generate(text) #将x轴和y轴坐标隐藏 plt.axis("off") plt.imshow(wc,interpolation="bilinear") plt.show()

2、以图片形状作为背景设计词云

下面以蜡笔小新的这张图片作为背景来设计一个词云,我们通过读取一个txt文件,文件中包含了很多段落,然后通过jieba对句子进行分词,去除停用词之后,生成一张词云的照片。

a、读取文件内容

使用jieba分词后,词之间需要通过空格进行分割,不然在产生词云的时候回变成一个词。

 ''' 中文分词 ''' def segment_words(text): article_contents = "" #使用jieba进行分词 words = jieba.cut(text,cut_all=False) for word in words: #使用空格来分割词 article_contents += word+" " return article_contents

b、读取停用词

停用词包括一些标点符号,和一些没有实际意义的词,我们需要将这些词都去除。

 ''' 从文件中读取停用词 ''' def get_stopwords(): dir_path = path.dirname(__file__) if "__file__" in locals() else os.getcwd() #获取停用词的路径 stopwords_path = os.path.join(dir_path,"txt/stopwords.txt") #创建set集合来保存停用词 stopwords = set() #读取文件 f = open(stopwords_path,"r",encoding="utf-8") line_contents = f.readline() while line_contents: #去掉回车 line_contents = line_contents.replace("\n","").replace("\t","").replace("\u3000","") stopwords.add(line_contents) line_contents = f.readline() return stopwords

c、生成词云图片

 def drow_mask_wordColud(): #获取当前文件的父目录 d = path.dirname(__file__) if "__file__" in locals() else os.getcwd() mask = np.array(Image.open(path.join(d,"img/test.jpg-600"))) text = open(path.join(d,"txt/test.txt"),"r",encoding="utf-8").read(). replace("\n","").replace("\t","").replace("\u3000","") #对文本进行分词 text = segment_words(text) #获取停用词 stopwords = get_stopwords() #创建词云 ''' max_words:显示词的数量 mask:背景 stopwords:停用词,是一个set集合 margin:词之间的间隔 background_color:词云图片背景颜色 ''' wc = WordCloud(max_words=100,mask=mask,background_color="white", stopwords=stopwords,margin=10,random_state=1).generate(text) default_colors = wc.to_array() # #保存词云图片 # wc.to_file("a_new_hope.png-600") plt.imshow(default_colors,interpolation="bilinear") plt.axis("off") plt.show()

3、自定义词云的颜色

 from wordcloud import WordCloud,get_single_color_func import matplotlib.pyplot as plt ''' 定义一个字体颜色设置类 ''' class GroupedColorFunc(object): def __init__(self,color_to_words,default_color): self.color_func_to_words=[ (get_single_color_func(color),set(words)) for (color,words) in color_to_words.items() ] self.defalt_color_func=get_single_color_func(default_color) def get_color_func(self,word): try: #设置每个词的颜色 color_func = next(color_func for (color_func,words) in self.color_func_to_words if word in words) except StopIteration: #词的默认颜色 color_func = self.defalt_color_func return color_func def __call__(self,word,**kwargs): return self.get_color_func(word)(word,**kwargs) if __name__ == "__main__": text = "第一 第二 第三 第四 第五 第六" #创建词云 wc = WordCloud(collocations=False,background_color="white").generate(text) #设置词的颜色 color_to_words={ #使用RGB来设置词的颜色 "#00ff00":["第一","第五"], "red":["第三","第六"], "yellow":["第二"] } #设置词默认的颜色 default_color = "blue" grouped_color_func = GroupedColorFunc(color_to_words,default_color) #设置词云的颜色 wc.recolor(color_func=grouped_color_func) #显示词云图 plt.figure() plt.imshow(wc,interpolation="bilinear") plt.axis("off") plt.show()

通过词的颜色设置类,来设置不同词的颜色。

4、自定义突出词的重要程度

在生成词云的时候,默认使用的是使得词频高的词更加突出,突出的词会比较大,有时候我们已经计算出了词的权重,想通过词云图来突出权重大小的差别。

 from wordcloud import WordCloud import matplotlib.pyplot as plt import numpy as np def get_mask(): x,y = np.ogrid[:300,:300] mask = (x-150) ** 2 + (y-150) ** 2 > 130 ** 2 mask = 255 * mask.astype(int) return mask if __name__ == "__main__": #每个词的权重 text = {"第一":0.1,"第二":0.2,"第三":0.3,"第四":0.4,"第五":0.5} wc = WordCloud(background_color="white",mask=get_mask()) wc.generate_from_frequencies(text) plt.axis("off") plt.imshow(wc,interpola<strong style="color:transparent">来源gaodai#ma#com搞@@代~&码网</strong>tion="bilinear") plt.show()

5、保存词云图片

 wc.to_file("test.png-600")

更多关于python词云库wordCloud使用方法请查看下面的相关链接

以上就是python词云库wordCloud使用方法详解(解决中文乱码)的详细内容,更多请关注gaodaima搞代码网其它相关文章!


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:python词云库wordCloud使用方法详解(解决中文乱码)

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址