文章中的例子主要借鉴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")))

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

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

plt.show()

5、保存词云图片

wc.to_file("test.png")

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

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

  1. python修改文件内容_Python批量修改文本文件内容的方法详解

    这篇文章主要介绍了Python批量修改文本文件内容的方法的相关资料,需要的朋友可以参考下 Python批量替换文件内容,支持嵌套文件夹 import os path="./" fo ...

  2. python创建双链表_Python双链表原理与实现方法详解

    本文实例讲述了Python双链表原理与实现方法.分享给大家供大家参考,具体如下: Python实现双链表 文章目录 Python实现双链表 单链表与双链表比较 双链表的实现 定义链表节点 初始化双链表 ...

  3. 基于python的贝叶斯分类器_Python实现朴素贝叶斯分类器的方法详解

    本文实例讲述了Python实现朴素贝叶斯分类器的方法.分享给大家供大家参考,具体如下: 贝叶斯定理 贝叶斯定理是通过对观测值概率分布的主观判断(即先验概率)进行修正的定理,在概率论中具有重要地位. 先 ...

  4. python怎么数据归一化_python数据归一化及三种方法详解

    数据标准化(归一化)处理是数据挖掘的一项基础工作,不同评价指标往往具有不同的量纲和量纲单位,这样的情况会影响到数据分析的结果,为了消除指标之间的量纲影响,需要进行数据标准化处理,以解决数据指标之间的可 ...

  5. 用python做透视表_python制作数据透视表pivot_table方法详解

    数据透视表(Pivot Table)是一种交互式的表,可以进行某些计算,如求和与计数等.所进行的计算与数据跟数据透视表中的排列有关. 之所以称为数据透视表,是因为可以动态地改变它们的版面布置,以便按照 ...

  6. python学习笔记分享(四十)网络爬虫(7)反爬虫问题,解决中文乱码,登陆和验证码处理

    网络爬虫深度知识 一.反爬虫问题 (一)反爬虫原因 1.网络爬虫浪费了网站的流量 2.数据是私有资源 3.爬虫协议与原则 (二)反爬虫方式 (三)反反爬虫 1.原理 2.三种方法 二.解决中文乱码 ( ...

  7. python支持向量机回归_Python中支持向量机SVM的使用方法详解

    除了在Matlab中使用PRTools工具箱中的svm算法,Python中一样可以使用支持向量机做分类.因为Python中的sklearn库也集成了SVM算法,本文的运行环境是Pycharm. 一.导 ...

  8. python求乘积_Python实现求笛卡尔乘积方法详解

    这篇文章主要介绍了Python实现求笛卡尔乘积的方法,结合实例形式分析了Python计算笛卡尔乘积的原理与实现技巧,需要的朋友可以参考下 本文实例讲述了Python实现求笛卡尔乘积的方法.分享给大家供 ...

  9. python中update是啥意思_python中update的基本使用方法详解

    前言 Python 字典 update()方法用于更新字典中的键/值对,可以修改存在的键对应的值,也可以添加新的键/值对到字典中. 语法格式 d.update(e) 参数说明 将e中键-值对添加到字典 ...

最新文章

  1. 1、使用库函数计算两个向量的夹角
  2. js 抛出异常 throw
  3. 如何用人工智能帮你找论文?
  4. 只身单车游山东(五)
  5. linux服务器崩,Linux系统崩溃最快速的解决方法
  6. Spring整合Hibernate
  7. 5.解决UltraEdit在无网线情况下连接不到虚拟机上的问题,回环网卡设置
  8. SAML request和response的一对典型例子,供将来参考
  9. Knative 实战:基于阿里云 Kafka 实现消息推送
  10. Python初学者的资源总结
  11. 十六进制的字符对照表
  12. 强力推荐一款游戏十分好玩
  13. 手机端网站底部悬浮 广告代码 代关闭_只要是安卓手机就不能少这个APP
  14. 林大陈宇老师的原创高斯
  15. GitHub开源14.5万行阿波罗11号源代码
  16. word中仿宋字体显示不清楚的问题
  17. Linux系统生成CA证书
  18. 张朝阳:如果超新浪 我会很骄傲
  19. 小程序中WxParse循环解析返回的富文本数据
  20. 关于涉密信息系统集成资质认证问题汇总与解答

热门文章

  1. uvm 形式验证_UVM基础
  2. python删除链表的倒数第k个节点,剑指offer 链表中的倒数第K个节点 Python and C++
  3. 聚合多个文件_python数据分析与挖掘(二十五)--- Pandas高级处理分组与聚合
  4. php 模数 指数 公钥生成_php实现JWT认证
  5. jq(jquery)之点击隐藏段落
  6. 计算机原理 信息化教学设计,小学数学信息化教学设计
  7. ++递归 字符串全排列_超全递归技巧整理,这次一起拿下递归
  8. 模糊匹配查询_必须掌握的6个查询函数应用技巧,办公必备,收藏备用!
  9. 台式机没有显示计算机图标,为什么台式电脑没有喇叭图标
  10. Java自动化获取页面主题_基于Selenium2+Java的UI自动化(4) - WebDriver API简单介绍