美文网首页
< 制作词云 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