美文网首页
python生成词云

python生成词云

作者: 鹰背上的鸟 | 来源:发表于2019-06-24 10:06 被阅读0次

    “词云”这个概念由美国西北大学新闻学副教授、新媒体专业主任里奇·戈登(Rich Gordon)提出。

    “词云”就是对网络文本中出现频率较高的“关键词”予以视觉上的突出,形成“关键词云层”或“关键词渲染”,从而过滤掉大量的文本信息,使浏览网页者只要一眼扫过文本就可以领略文本的主旨。

    1.代码

    import jieba.posseg as psg
    import numpy as np
    from PIL import Image
    from wordcloud import WordCloud, STOPWORDS
    
    #根据词频降序排序
    def wordsort(word_list):
        word_frequency = {}
        for word in word_list:
            if word in word_frequency:
                word_frequency[word] += 1
            else:
                word_frequency[word] = 1
                    
        word_sort = sorted(word_frequency.items(), key = lambda x:x[1], reverse = True) 
        return word_sort
    
        
    # 生成词云
    def word_cloud(word_list):
        words_space_split = " ".join(word_list)
    
        # 设置停用词 
        sw = set(STOPWORDS) 
        sw.add("的")  # 停用词可以在后面设置为None
    
        # 图片模板和字体
        image=np.array(Image.open('轮廓.jpg')) 
        font=r'./simhei.ttf'  # 字体路径设置
    
        # 设置词云样式
        my_wordcloud = WordCloud(scale=4, font_path=font, mask=image, stopwords=sw, background_color = 'white',
                                 max_words = 120, max_font_size = 60, random_state=20).generate(words_space_split)
    
        #保存生成的图片
        my_wordcloud.to_file('词云.jpg')
    
    
    if __name__ == "__main__":
        
        # 1. 打开项目文件
        with open('流浪地球.txt', 'r',encoding = 'utf-8') as f:
            content = (f.read())
            f.close()
    
        # 2. 分离名词,放在 list_words 里
        list_words = []
        for x in psg.cut(content):
            # 保留名词长度至少两个字
            if x.flag in ['n', 'nr', 'ns'] and len(x.word) > 1:
                list_words.append(x.word)
    
        # 3. 按照词频由大到小排序,放在 list_words_sorted 里
        list_words_sorted = wordsort(list_words)
    
        # 4. 词云生成
        word_cloud([x[0] for x in list_words_sorted])
        
        # 5. 打印TOP10
        print('\n序号\t名词\t词频\t柱图\n')
        rate = 10  # 倍率,每出现rate个绘制1个单元
        for i in range(10):
            print( '{}\t{}\t{}\t{}\n'.format(i+1, list_words_sorted[i][0], list_words_sorted[i][1], '▂' * (list_words_sorted[i][1] // rate)) )
    

    2.结果

    这里轮廓图是网上找的,生成的词云只利用了图的轮廓。


    轮廓.jpg 词云.jpg

    3.在线生成词云

    此外,还有很多可以在线生成词云的工具,如Wordle微词云minitagcloud
    WordItOutTagxedoWordArtToCloud

    相关文章

      网友评论

          本文标题:python生成词云

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