ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

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

2021-12-18 12:35:21  阅读:460  来源: 互联网

标签:python mask wordcloud 词云 words 圣诞树 path txt


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

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)                                   # 保存生成的图片

  生成的结果如下:
在这里插入图片描述
  

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)                                   # 保存生成的图片

  生成的结果如下:
在这里插入图片描述
  

4 资料

  资料内容如下图:
在这里插入图片描述

  资料下载链接:wordcloud_source.zip
  
  

标签:python,mask,wordcloud,词云,words,圣诞树,path,txt
来源: https://blog.csdn.net/weixin_44120025/article/details/122010441

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有