圣诞节快到啦,我可以有python圣诞树词云吗?(中英文版及代码)

  一周以后就是圣诞节啦,作为程序猿的你,……
  好了,前言结束(哈哈哈自行脑补),下面是代码:

ps: 所有素材掩码已经打包好,文末领取

  

1 依赖库安装

  程序用到了wordcloud、PIL、numpy、jieba四个库,缺啥装啥:

pip install wordcloud
pip install PIL
pip install numpy
pip install jieba

  安装完成后,就可以开始生成词云了,下面的示例都是小红帽这个故事,其中中文版小红帽故事是直接通过百度翻译获得的,存在少许错别字,但是对最终结果影响不大。
  

2 英文词云

  英文词云的生成比较简单,不需要额外的分词及停用词,代码如下:

from wordcloud import WordCloud
import PIL.Image as image
import numpy as np

# 一些变量值,依据自己实际情况进行设置
edcoding_type = "utf-8"               # 编码方式     
background_color = "white"            # 生成图片的背景颜色
txt_path = "little red-cap.txt"       # 文本路径
mask_path = "mask.png"                 # 词云形状掩码路径
img_path = "red-cap_wordcloud.png"    # 输出生成的词云图片路径
max_words = 200                       # 最大显示词数量

# 读取文本内容
def get_txt(txtpath):
    with open(txtpath, encoding = edcoding_type) as f:
        text = f.read()
    return text

# 生成词云
def generate_wordcloud(wordlist, maskpath, backgroundcolor, maxwords):
    mask = np.array(image.open(maskpath))                      # 设置图形掩码
    wordcloud = WordCloud(
        background_color = backgroundcolor,                    # 设置图片背景颜色
        mask = mask,                                           # 设置掩码
        max_words = maxwords                                   # 设置最大显示词数
    ).generate(wordlist)                                
    return wordcloud

text = get_txt(txt_path)                                       # 获取文本
word_cloud = generate_wordcloud(text,                          # 生成词云
                                mask_path,
                                background_color,
                                max_words)
image_file = word_cloud.to_image()                             # 生成图片
image_file.show()                                              # 显示图片
word_cloud.to_file(img_path)                                   # 保存生成的图片

  生成的结果如下:
圣诞节快到啦,我可以有python圣诞树词云吗?(中英文版及代码)
  

3 中文词云

  中文词云生成比较复杂,需要自己进行分词(使用jieba),需要自己设置中文字体(这里使用黑体simhei),需要自己手动剔除停用词(停用词的意思就是去掉一些无意义的词,比如“的”、“和”、“或”等等,英文里面之所以不用,是因为wordcloud自带了有默认停用词库并且默认把分出的词给过滤了)。代码如下:

from wordcloud import WordCloud
import PIL.Image as image
import numpy as np
import jieba

# 一些变量值,依据自己实际情况进行设置
edcoding_type = "utf-8"                     # 编码方式     
background_color = "white"                  # 生成图片的背景颜色
txt_path = "小红帽.txt"                     # 文本路径
font_path = "simhei.ttf"                    # 字体路径
mask_path = "mask.png"                       # 词云形状掩码路径
stopwords_path = "chinese_stopwords.txt"    # 停用词路径
img_path = "小红帽词云.png"                 # 输出生成的词云图片路径
max_words = 200                             # 最大显示词数量

# 读取文本内容
def get_txt(txtpath):
    with open(txtpath, encoding = edcoding_type) as f:
        text = f.read()
    return text

# 进行分词
def cut_words(text):
    words = " ".join(jieba.cut(text, cut_all = False))     # cut_all=False是精确模式
    wordslist = words.split(" ")                            # 按空格进行分词
    return wordslist

# 读取停用词
def get_stopwordslist(stopwordspath):
    stopwords = [line.strip() for line in open(stopwordspath, encoding = edcoding_type).readlines()]
    return stopwords

# 去掉停用词
def refined_words(wordlist, stopwordlist):
    wordlistrefined = " "
    for word in wordlist:
        if word not in stopwordlist:
            if word != '\t':
                wordlistrefined += word
                wordlistrefined += " "
    return wordlistrefined

# 生成词云
def generate_wordcloud(wordlist, maskpath, fontpath, backgroundcolor, maxwords):
    mask = np.array(image.open(maskpath))                      # 设置图形掩码
    wordcloud = WordCloud(
        font_path = fontpath,                                  # 设置字体路径
        background_color = backgroundcolor,                    # 设置图片背景颜色
        mask = mask,                                           # 设置掩码
        max_words = maxwords                                   # 设置最大显示词数
    ).generate(wordlist)                                
    return wordcloud

text = get_txt(txt_path)                                       # 获取文本
words_list = cut_words(text)                                   # 获取词表
stop_words = get_stopwordslist(stopwords_path)                 # 加载停用词表
refined_words = refined_words(words_list, stop_words)          # 去掉停用词
word_cloud = generate_wordcloud(refined_words,                 # 生成词云
                               mask_path,
                               font_path,
                               background_color,
                               max_words)                 
image_file = word_cloud.to_image()                             # 生成图片
image_file.show()                                              # 显示图片
word_cloud.to_file(img_path)                                   # 保存生成的图片

  生成的结果如下:
圣诞节快到啦,我可以有python圣诞树词云吗?(中英文版及代码)
  

4 资料

  资料内容如下图:
圣诞节快到啦,我可以有python圣诞树词云吗?(中英文版及代码)

  资料下载链接:wordcloud_source.zip
  
  

上一篇:python-wordcloud词云库


下一篇:Python解决苹果电脑WordCloud词云图中文乱码