1. 程式人生 > >【實戰】詞頻統計及詞雲圖製作

【實戰】詞頻統計及詞雲圖製作

寫在開頭

最近對詞雲有些興趣,就自己瞎琢磨研究一些這方面的知識,期間也遇到一些小問題,寫下此篇文章留作備註吧。

研究物件

金庸老先生的《天龍八部》

正式開始(微笑臉)

  • 統計字頻
    (1)先統計下小說的字頻數:
    天龍八部總共用字量4134個,top20的字不出意外都是一些常用詞,不過“一”竟然排名第二很讓我意外。
# -*- coding:utf-8 -*-
import re

wordcount = {}
stopwords=[]
# stopwords = [u'好',u'一',u'的',u'了']

with open('F:\\tlbb.txt','r') as
files: text = files.read().decode('gb18030') text = text.strip('\n').strip('\t').strip(' ') string = re.sub("[\s+\.\!\/_,$%^*(+\"\']+|[:“”+——!,。?、[email protected]#¥%……&*()]+".decode("utf8"), "".decode("utf8"),text) #去除標點符號 for word in string: if word in stopwords: continue
wordcount[word] = wordcount.get(word,0)+1 wordcount = sorted(wordcount.items(),key=lambda d:d[1],reverse=True) print len(wordcount) for x in xrange(20): print wordcount[x][0]+':'+str(wordcount[x][1]) files.close()

*執行結果*

字數: 4134
以下是排名前20的各個子的數量統計
不:20125
一:18732
的:18565
是:16524
道:15564
了:15413
人:12627
我:11000
你:10108
這:9893
他:9794
大:9083
來:8870
之:8064
說:7123
中:7056
得:6651
在:6624
下:6465
上:6443

  • 詞頻統計及詞雲圖製作
    從詞雲圖中可以看出三大主角的名字還是很凸顯。當然我也看到詞雲圖中的“一個”了,想不到這個詞的佔比挺高的。

這裡寫圖片描述

本來是想借助上面統計字頻,做一個停用詞集的。但是沒有弄好,新增到stopwords引數中,完全沒有效果,只能回頭再研究研究。當然如果讀到此處你的知道怎麼回事,煩請告知,感激不盡呀!

以下是詞雲程式碼:

# -*- coding:utf-8 -*-

#天龍八部分詞統計
import jieba
from wordcloud import WordCloud,STOPWORDS
import matplotlib.pyplot as plt

s={}
with open('F:\\tlbb.txt','r') as  files:
    fid = files.read()
    fc = jieba.cut(fid)   #用jieba分詞

    for words in fc:
        if len(words)>1:
            s[words] = s.get(words,0)+1

    word = sorted(s.items(),key=lambda (word,count):count,reverse=True)
    word = dict(word[1:100])
    # for x in word:
    #   print x ,
    wordcloud = WordCloud(font_path = 'C:/Windows/Fonts/msyh.ttf',      # 設定字型格式,如不設定顯示不了中文
                          background_color="black",      # 設定背景顏色
                          stopwords=STOPWORDS,  # 設定停用詞
                          max_font_size=40,     # 設定字型最大值
                          random_state=30,  # 設定有多少種隨機生成狀態,即有多少種配色方案
                          relative_scaling=.5
                          ).fit_words(word) #word為字典格式
    plt.figure()
    plt.imshow(wordcloud)
    plt.axis("off")
    plt.show()
files.close()

問題總結

  • WordCloud().fit_words(word) 中的這個word是傳入的是字典,之前一直傳入錯誤,看了原始碼才恍然大悟
  • 詞雲圖中停用詞的新增失敗

參考

最後希望對看到此處的你有所幫助【微笑】