美文网首页
< 制作词云 E02 >—Python

< 制作词云 E02 >—Python

作者: MrAndyW | 来源:发表于2018-02-05 08:15 被阅读0次

在前两章,介绍了文本材料的准备 以及 WordArt 可视化。这里我介绍如何自己动手DIY属于自己的词云。

  • 材料:

    • 文本数据
    • python (jieba,wordcloud)
      安装 jiebawordcloud

      pip install jieba
      pip install wordcloud

      wordcloud 用于生成词云,Github地址: https://github.com/amueller/word_cloud
      wordcloud 生成需要词语作为元素,由于wordcloud是国外的,对中文支持不好,所以我们需要提前对文本进行分词统计处理,得到关键词进行可视化。
  • 实现:

    • 方式一:
      直接将分词结果放入wordcloud.generate()函数中进行处理(wrd_dict是分词的结果)
        import matplotlib.pyplot as plt
        from wordcloud import WordCloud 
        #可视化
        BKImg=np.array(Image.open("heart.jpg"))# 加入自定义背景图片
        my_wordcloud = WordCloud(      
              background_color='white',    # 设置背景颜色
              mask = BKImg,        # 设置背景图片
              max_words = rank_K,            # 设置最大现实的字数
              #stopwords = "小嫣嫣小星星",        # 设置停用词
              font_path = 'FZLTHJW.TTF',# 设置字体格式,如不设置显示不了中文
              max_font_size = 80,            # 设置字体最大值
              min_font_size = 10,
              # relative_scaling=0.5,
              random_state = 30,            # 设置有多少种随机生成状态,即有多少种配色方案
                  scale=1
                  ).generate(wrd_dict)
        clr=ImageColorGenerator(BKImg) # 加入背景的配色方案
        plt.imshow(my_wordcloud.recolor(color_func=clr))`
        plt.imshow(my_wordcloud)
        plt.axis("off")
        plt.show() #显示
        my_wordcloud.to_file("result1.png") # 将结果写入png
    
    • 方式二:
      • 方式一是将分好的词加入自定义词典,加入generate() 函数,但是这样得到的结果却不是很理想,最终 wordcloud 整理出来的结果将人名和一些人所说的话并在一起,导致“小王 哈哈哈”,“小王”都被分进词云的词典,导致“小王”这个词重复出现。
      • 为了解决这个问题,查看 WordCloud 这个类(对象),找到generate_from_frequencies(wrd_dict)这个函数,送入的是自定义的字典{[对象]:[频率]})
    # 制作词典       
    wrd_dict={}
    for i in range(0,rank_K):
        wrd_dict[str(tags[i][0])]=round(math.log(tags[i][1]*len_txt,1.5))
    #可视化
    BKImg=np.array(Image.open("heart.jpg"))
    my_wordcloud = WordCloud(
             background_color='white',    # 设置背景颜色
             mask = BKImg,        # 设置背景图片
             max_words = rank_K,            # 设置最大现实的字数
             #stopwords = "小嫣嫣小星星",        # 设置停用词
             font_path = 'FZLTHJW.TTF',# 设置字体格式,如不设置显示不了中文
             max_font_size = 80,            # 设置字体最大值
             min_font_size = 10,
             # relative_scaling=0.5,
             random_state = 30,            # 设置有多少种随机生成状态,即有多少种配色方案
                 scale=1
                 ).generate_from_frequencies(wrd_dict)
    clr=ImageColorGenerator(BKImg)
    plt.imshow(my_wordcloud.recolor(color_func=clr))
    plt.imshow(my_wordcloud)
    plt.axis("off")
    plt.show()
    my_wordcloud.to_file("result2.png")
    
    • 这里 math.log() 是调整聊天记录中出现频率过度频繁的人的名字的权重,使得样 本权重比较平衡。
  • 成果:

qq 聊天记录词云
大家赶紧动手制作自己的词云吧~ 趁着情人节前给自己的女朋友一个惊喜(*^▽^*)

相关文章

网友评论

      本文标题:< 制作词云 E02 >—Python

      本文链接:https://www.haomeiwen.com/subject/bokpzxtx.html