当前位置: 首页 > news >正文

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

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

一、wordColud设计中文词云乱码

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

1、中文词云乱码

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

2、替换默认字体

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

38cd8253302e4d32d81007be506ef737.png

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

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

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

8f8aeda311f9d0f9ba0508f62c1a0ea4.png

二、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()

f0f2ca495f1c4654aca871908acbc4bc.png

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

3dd324c092c97fb270a3f77983123db6.png

下面以蜡笔小新的这张图片作为背景来设计一个词云,我们通过读取一个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")))

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")

plt.imshow(default_colors,interpolation="bilinear")

plt.axis("off")

plt.show()

eda2771ef3f3efc480126ea3bd714323.png

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()

5a19edb2218bbd5a0f7e667eb7289f9e.png

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

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,interpolation="bilinear")

plt.show()

32a8da85b37b6b6031281b70faa6037a.png

5、保存词云图片

wc.to_file("test.png")

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

相关文章:

  • 儿童手工制作日历_怎么做手工儿童卡通绵羊日程管理小日历
  • 内存cpu占用不高但mysql很卡_解决Mysql占用cpu,内存高故障案例
  • 康乐面板mysql默认密码_Linux安装kangle(康乐)网站管理面板的详细教程
  • mysql jpa 不要自动建表_18.1. 从零开始学springboot-配置jpa自动建表为innodb
  • mysql 存储json如何查出_Mysql如何提取存储的JSON值
  • mysql增量备份backupex_数据库增量备份,恢复innobackex
  • python如何剪辑音频_剪辑音乐要很久?3行语句Python瞬间搞定
  • tomcat文件路径更换_tomcat图片上传指定位置并显示(修改配置文件)
  • 小程序在输入npm命令_【微信小程序】使用npm包-傻瓜式教程
  • java继承总结_Java继承篇总结
  • java查询elasticsearch_java – 与ElasticSearch完全匹配(在查询时)
  • java sha256 解密_如何解密SHA-256加密字符串?
  • java 5 注解机制_Java Annotaions?(注解)的本质和实现原理(上)
  • java hibernate批量更新_使用HQL查询进行Hibernate批量更新
  • 火焰纹章2java_火焰之纹章2手机java版有秘籍么?
  • [译] 怎样写一个基础的编译器
  • 【JavaScript】通过闭包创建具有私有属性的实例对象
  • android百种动画侧滑库、步骤视图、TextView效果、社交、搜房、K线图等源码
  • Android框架之Volley
  • angular2 简述
  • bearychat的java client
  • java概述
  • linux学习笔记
  • macOS 中 shell 创建文件夹及文件并 VS Code 打开
  • Node项目之评分系统(二)- 数据库设计
  • Python socket服务器端、客户端传送信息
  • SSH 免密登录
  • Vue.js源码(2):初探List Rendering
  • vue-cli3搭建项目
  • vue-cli在webpack的配置文件探究
  • 给Prometheus造假数据的方法
  • 跨域
  • 码农张的Bug人生 - 初来乍到
  • 七牛云假注销小指南
  • 三栏布局总结
  • 设计模式走一遍---观察者模式
  • 事件委托的小应用
  • 它承受着该等级不该有的简单, leetcode 564 寻找最近的回文数
  • 再次简单明了总结flex布局,一看就懂...
  • 《码出高效》学习笔记与书中错误记录
  • 【干货分享】dos命令大全
  • kubernetes资源对象--ingress
  • Nginx惊现漏洞 百万网站面临“拖库”风险
  • ​2020 年大前端技术趋势解读
  • #Z2294. 打印树的直径
  • $jQuery 重写Alert样式方法
  • $var=htmlencode(“‘);alert(‘2“); 的个人理解
  • (12)目标检测_SSD基于pytorch搭建代码
  • (23)Linux的软硬连接
  • (3)nginx 配置(nginx.conf)
  • (C语言)输入一个序列,判断是否为奇偶交叉数
  • (Demo分享)利用原生JavaScript-随机数-实现做一个烟花案例
  • (java版)排序算法----【冒泡,选择,插入,希尔,快速排序,归并排序,基数排序】超详细~~
  • (第9篇)大数据的的超级应用——数据挖掘-推荐系统
  • (二十四)Flask之flask-session组件