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,如下图:

20021733730170549248537134.png

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

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

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

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

20021733730659493872488467.png

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

20021733730948749274432047.jpg

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

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

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

20021733731359635269913338.png

5、保存词云图片

wc.to_file("test.png")

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/534892.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

linux同时安装python2和python3_linux-Centos7安装python3并与python2共存

1.查看是否已经安装Python CentOS 7.2 默认安装了python2.7.5 因为一些命令要用它比如yum 它使用的是python2.7.5。 使用 python -V 命令查看一下是否安装Python 然后使用命令 which python 查看一下Python可执行文件的位置可见执行文件在/usr/bin/ 目录下,切换到该…

opencv获取模板旋转角度_OpenCV入门之获取图像的旋转角度

在我们的日常生活中,所碰到的图像往往都有一定的倾斜。那么,如何用OpenCV来获取图像的旋转角度呢?   我们以下面的图片为例,简单介绍如何用OpenCV来获取图像的旋转角度。可以看到,该图像存在着许多噪声,且…

后台使用orm多还是直接sql_Django应用app创建及ORM

Django应用app创建及ORM一.重要知识点回顾:1. form表单提交数据的注意事项:1. 是form不是from,必须要有method和action (action用来指定你的数据提交到后台哪个地方,method用来指定你提交数据的方式)2. 所有获取用户输入的表单标签要放在form表单里面&am…

求一批整数中出现最多的个位数字_C语言经典100例007-求低n-1位的数

系列文章《C语言经典100例》持续创作中,欢迎大家的关注和支持。喜欢的同学记得点赞、转发、收藏哦~后续C语言经典100例将会以pdf和代码的形式发放到公众号欢迎关注:计算广告生态 即时查收1 题目函数:unsigned fun(unsigned w)功能…

java文件序列化_Java序列化与反序列化,文件操作

参考两篇博客:http://blog.csdn.net/moreevan/article/details/6697777http://blog.csdn.net/moreevan/article/details/6698529针对第二篇博客,看了下面的评论,发现子类输出的书号其实是父类的,书名是自己先添加的成员变量&#…

python自定义模块和三方模块_python基础知识8——模块1——自定义模块和第三方开源模块...

模块的认识模块,用一砣代码实现了某个功能的代码集合。类似于函数式编程和面向过程编程,函数式编程则完成一个功能,其他代码用来调用即可,提供了代码的重用性和代码间的耦合。而对于一个复杂的功能来,可能需要多个函数…

dhcp只能分配与路由器相同网段么_路由器的桥接详解

网上关于路由器无线桥接的教程很多,让你注意那注意这的,都没有说明白。今天,我来试着缕清它们间的关系!1、主路由器这是我主路由器目前的状态,其中IP地址是我在上级光猫路由的可用ip段192.168.1.2~254里选的一个&#…

java orcl自动_Oracle自动生成编号

祝大家新年快乐,有任何问题可与我联系:今天用JAVA向Oracle数据库中插数据时,每次都要去计算ID,觉得好麻烦,于是想到了用数据库自带的ID来做,具体如下:1、首先得创建一序列序列(SEQUENCE)序列是一…

import java.awt.BorderLayout;_Swing-布局管理器之BorderLayout(边界布局)-入门

边界布局管理器(BorderLayout)把容器的的布局分为五个位置:CENTER、EAST、WEST、NORTH、SOUTH。依次对应为:上北(NORTH)、下南(SOUTH)、左西(WEST)、右东(EAST),中(CENTER),如下图所示。特征:l 可以把组件放在这五个位…

java 建造者实际中的用法_java中j建造者模式详解和使用方法

建造者模式(Builder Pattern)使用多个简单的对象一步一步构建成一个复杂的对象。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。一个 Builder 类会一步一步构造最终的对象。该 Builder 类是独立于其他对象的。介绍意图:将一个复杂的…

jsp测试mysql_Jsp登陆与MySQL对接验证

最近在做一个Web项目,账户登陆验证是Web项目中必不可少的环节,所以需要阶段性的记录,帮助自己更好的掌握其中的知识。Jsp登陆涉及到POST方法参数获取,以及MySQL数据库信息的获取。可能因为自己是新手,刚开始写的项目有…

数据归一化处理方法_科研常用的实验数据分析与处理方法

科研常用的实验数据分析与处理方法对于每个科研工作者而言,对实验数据进行处理是在开始论文写作之前十分常见的工作之一。但是,常见的数据分析方法有哪些呢?常用的数据分析方法有:聚类分析、因子分析、相关分析、对应分析、回归分…

信息系统项目管理师_信息系统项目管理师通过率是多少?

答:信息系统项目管理师考试每个地区的通过率都是不一样的,一般全国在10%-20%左右,这个20%的通过率是按参考人数作为统计,就是除去了那些报名了但是没去参加考试的考生,如果算上所有报名考生的通过率数据,那…

类型“unknown”上不存在属性“foreach”_JavaScript红宝书第四版精简解析系列--映射Map数据类型...

Map数据类型顾名思义也就是映射类型,包含一个[[Entries]]私有特性我们可以使用一个二维数组作为初始值const map1 new Map([[1, 1],[2, 2],[3, 3],]); console.log("Map数据类型>", map1);当然也可以使用迭代器进行初始化const map2 new Map({[Symbol.iterator]…

java面试笔试题整理(学习java基础理论最好的资料)_2020Java笔试/面试题(持续收集整理更新)...

说明:java本篇用于收集知识点方便随时巩固,持续更新与纠错。数组关于JDK版本,若无特殊说明,默认为JDK 1.8,。缓存关于JVM版本,若无特殊说明,默认为 HotSpot。安全目录数据结构1、Java 基础1.1 Java中的基本…

使用系统调用pipe建立一条管道线_使用Unixbench对服务器综合性能打分及测试结果...

Unixbench是一个类unix系统(Unix,BSD,Linux)下的性能测试工具,一个开源工具,被广泛用与测试linux系统主机的性能,简称UB。Unixbench的主要测试项目有:系统调用、读写、进程、图形化测试、2D、3D、管道、运算…

java.io.file.sync_Java(25)IO流和File类

IO流File类File类讲IO流之前先来讲以下File类。Java的标准库Java.io提供了File类来操作文件和目录。操作可以有:新建、删除、重命名等,但是不能访问文件本身的内容,如果想要访问,需要使用IO流。新建File对象:package day01;import…

val_loss突然变很大_女朋友突然变得很冷淡是怎么回事?该怎么办

原本和女朋友恋爱之后她一直都表现得比较比较热情,但是最近这段时间她突然对自己冷淡起来,很多男生可能就会很疑惑:女朋友突然变得很冷淡是怎么回事?该怎么办呢?一、女朋友突然变得很冷淡原因不管怎么说,女…

进程调度rr算法java实现_Java实现进程调度算法(二) RR(时间片轮转)

一、概述因为这次os作业对用户在控制台的输入输出有要求,所以我花了挺多的代码来完善控制台的显示。也因为我这次要实现多个类似算法,所以将一些共性单独提取出来作为一个类。如果只想要和算法有关的核心代码,看RR类的calc()即可。实现思路&a…

string 长度_String源码解析

本章源码分析基于JDK1.7实现的接口String类被final修饰词修饰,代表不可修改的特性,它实现了三个接口,Serializable是序列化接口,Compareble是排序接口,Char是字符序列接口。主要成员变量char[]:String通过c…