Python生成词云图及词云形状关键秘诀

前两个代码来自于网上对于词云的处理,代码3是自己改进的内容。词云这玩意,有一个关键是要看自己的找的图片是否美观,因为生成的词云是以背景照片的形状为模板的,遇到非白色的像素才会显示出来,图片的颜色会自动影响词云本身的颜色属性。

代码1

来源于:Python生成中文词云图

#添加自定义分词

import jieba
from os import path  #用来获取文档的路径

#词云
from PIL import Image
import numpy as  np
import matplotlib.pyplot as plt
#词云生成工具
from wordcloud import WordCloud,ImageColorGenerator
#需要对中文进行处理
import matplotlib.font_manager as fm

#背景图
bg=np.array(Image.open("tuoyuan.jpg"))

#获取当前的项目文件加的路径
d=path.dirname(__file__) 
#读取停用词表
stopwords_path='stopwords.txt'
#添加需要自定以的分词
# jieba.add_word("叶文洁")

#读取要分析的文本
text_path="ziranyuyan.txt"
#读取要分析的文本,读取格式
text=open(path.join(d,text_path),encoding="utf8").read()
#定义个函数式用于分词
def jiebaclearText(text):
    #定义一个空的列表,将去除的停用词的分词保存
    mywordList=[]
    #进行分词
    seg_list=jieba.cut(text,cut_all=False)
    #将一个generator的内容用/连接
    listStr='/'.join(seg_list)
    #打开停用词表
    f_stop=open(stopwords_path,encoding="utf8")
    #读取
    try:
        f_stop_text=f_stop.read()
    finally:
        f_stop.close()#关闭资源
    #将停用词格式化,用\n分开,返回一个列表
    f_stop_seg_list=f_stop_text.split("\n")
    #对默认模式分词的进行遍历,去除停用词
    for myword in listStr.split('/'):
        #去除停用词
        if not(myword.split()) in f_stop_seg_list and len(myword.strip())>1:
            mywordList.append(myword)
    return ' '.join(mywordList)
text1=jiebaclearText(text)
#生成
wc=WordCloud(
        background_color="white", #设置背景为白色,默认为黑色
        width=990,              #设置图片的宽度
        height=440,              #设置图片的高度
        margin=10,               #设置图片的边缘

    max_font_size=50,
    random_state=30,
    font_path='C:/Windows/Fonts/simkai.ttf'   #中文处理,用系统自带的字体
    ).generate(text1)
#为图片设置字体
my_font=fm.FontProperties(fname='C:/Windows/Fonts/simkai.ttf')
#产生背景图片,基于彩色图像的颜色生成器
image_colors=ImageColorGenerator(bg)
#开始画图
plt.imshow(wc)
#为云图去掉坐标轴
plt.axis("off")
#画云图,显示
#保存云图
wc.to_file("tuoyuan3.png")

代码2

来源于:基于python的词云生成

import jieba
from os import path  #用来获取文档的路径

#词云
from PIL import Image
import numpy as  np
import matplotlib.pyplot as plt
#词云生成工具
from wordcloud import WordCloud,ImageColorGenerator
#需要对中文进行处理
import matplotlib.font_manager as fm

#背景图
bg=np.array(Image.open("man.jpg"))

#获取当前的项目文件加的路径
d=path.dirname(__file__) 
#读取停用词表
stopwords_path='stopwords.txt'
#添加需要自定以的分词
jieba.add_word("侯亮平")
jieba.add_word("沙瑞金")
jieba.add_word("赵东来")

#读取要分析的文本
text_path="人民的名义.txt"
#读取要分析的文本,读取格式
text=open(path.join(d,text_path),encoding="utf8").read()
#定义个函数式用于分词
def jiebaclearText(text):
    #定义一个空的列表,将去除的停用词的分词保存
    mywordList=[]
    #进行分词
    seg_list=jieba.cut(text,cut_all=False)
    #将一个generator的内容用/连接
    listStr='/'.join(seg_list)
    #打开停用词表
    f_stop=open(stopwords_path,encoding="utf8")
    #读取
    try:
        f_stop_text=f_stop.read()
    finally:
        f_stop.close()#关闭资源
    #将停用词格式化,用\n分开,返回一个列表
    f_stop_seg_list=f_stop_text.split("\n")
    #对默认模式分词的进行遍历,去除停用词
    for myword in listStr.split('/'):
        #去除停用词
        if not(myword.split()) in f_stop_seg_list and len(myword.strip())>1:
            mywordList.append(myword)
    return ' '.join(mywordList)
text1=jiebaclearText(text)
#生成
wc=WordCloud(
    background_color="white", 
    max_words=200,
    mask=bg,            #设置图片的背景
    max_font_size=60,
    random_state=42,
    font_path='C:/Windows/Fonts/simkai.ttf'   #中文处理,用系统自带的字体
    ).generate(text1)
#为图片设置字体
my_font=fm.FontProperties(fname='C:/Windows/Fonts/simkai.ttf')
#产生背景图片,基于彩色图像的颜色生成器
image_colors=ImageColorGenerator(bg)
#开始画图
plt.imshow(wc.recolor(color_func=image_colors))
#为云图去掉坐标轴
plt.axis("off")
#画云图,显示
plt.figure()
#为背景图去掉坐标轴
plt.axis("off")
plt.imshow(bg,cmap=plt.cm.gray)

#保存云图
wc.to_file("man.png")

代码3

# #!/usr/bin/env python
# #-*- coding:utf-8 -*-
#
import matplotlib.pyplot as plt
from PIL import Image as image
import jieba
import numpy
from wordcloud import WordCloud,ImageColorGenerator,STOPWORDS


# todo 1 通过jieba工具将中文文本做处理,并返回指定格式的内容
def chinese_jieba(text):
    wordlist_jieba = jieba.cut(text)
    text_jieba = ' '.join(wordlist_jieba)
    return text_jieba

# todo 2 主函数
def main(filename):
    with open(filename,'rb') as f:
        text = chinese_jieba(f.read().decode())

    bg = numpy.array(image.open("./image/cloudword.png"))      #  背景图,设置遮罩层

    stopwords = set(STOPWORDS)
    stopwords = stopwords.union(set(['经与', '失败']))   # 将不想在词云上出现的词,放入集合中,也就是设置固定词个数为0

    wordclod = WordCloud(
        background_color='white',  #  设置背景颜色,默认是黑色
        width=990,                  # 设置图片的宽度
        height=440,                 # 设置图片的高度
        margin=0,                  # 设置图片的边缘
        max_words=200,       # 关键字的个数
        max_font_size=80,    # 字体大小
        font_path='C:/Windows/Fonts/simkai.ttf' ,  # 设置中文识别
        mask=bg,        # 添加遮罩层,也就是设置词云形状
        stopwords=stopwords,  # 过滤固定的词
    ).generate(text)          # 将text里面所有的词统计,产生词云

    image_colors=ImageColorGenerator(bg)
    plt.imshow(wordclod.recolor(color_func=image_colors))
    # plt.imshow(wordclod)
    plt.axis('off')
    plt.show()
    wordclod.to_file('wordcloud.jpg')  # 保存图片


# if __name__ == "__main__":
#     filename = r'术语\user_dict.txt'
#     main(filename)


  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值