今天來介紹一下如何使用 Python 製作詞雲。
詞雲又叫文字雲,它可以統計文字中頻率較高的詞,並將這些詞視覺化,讓我們可以直觀的瞭解文字中的重點詞彙。
詞的頻率越高,詞顯示的大小也就越大。
1,wordcloud 模組wordcloud 是一個詞雲生成器,它不僅是一個 Python 庫,還是一個命令列工具。我們可以透過 wordcloud 官方文件,和示例庫來學習如何使用它。
在使用 wordcloud 之前,需要先安裝它:
pip install wordcloud
2,WordCloud 類
WordCloud 類用於建立詞雲物件,先來看下它的原型:
WordCloud(font_path=None, width=400, height=200, margin=2, ranks_only=None, prefer_horizontal=0.9, mask=None, scale=1, color_func=None, max_words=200, min_font_size=4, stopwords=None, random_state=None, background_color='black', max_font_size=None, font_step=1, mode='RGB', relative_scaling='auto', regexp=None, collocations=True, colormap=None, normalize_plurals=True, contour_width=0, contour_color='black', repeat=False, include_numbers=False, min_word_length=0, collocation_threshold=30)
可以看到,WordCloud 類有很多引數可以設定,這裡介紹一些常用的引數:
font_path:設定字型檔案路徑,字型檔案以 .ttf 為字尾。如果分析的文字是中文,則需要設定中文字型,否則會亂碼。background_color:設定圖片背景顏色,預設為 black,也可以設定為 white 等。mask:設定背景圖片。max_words:設定最大的詞數,預設為200。stopwords:設定停用詞。max_font_size:設定字型最大值。width:設定畫布的寬度,預設為400。height:設定畫布的高度,預設為200。random_state:設定多少種隨機狀態,即多少種顏色。在建立好詞雲物件後,可以使用 generate 方法生成詞雲,並使用 to_file 方法將詞雲圖像儲存在檔案中。
generate 方法的原型如下:
generate(text)
引數text 是一個用空格隔開的文字字串。如果分析的是中文,需要先用 jieba 進行分詞,可以參考這裡。
除了將詞雲圖像儲存在檔案中,還可以使用 Matplotlib 模組顯示詞雲圖像,示例程式碼如下:
import matplotlib.pyplot as pltplt.imshow(wordcloud) # wordcloud 是詞雲物件plt.axis("off") # 用於關閉座標軸plt.show()
3,一個簡單的示例
下面演示一個最簡單的示例,來看如何使用 wordcloud。
首先建立詞雲物件:
from wordcloud import WordCloudwc = WordCloud()
生成詞雲:
text = "Python is a programming language, it is easy to use."wc.generate(text)
詞雲物件的 words_ 屬性中儲存了每個單詞的(歸一化後的)權重,權重的範圍是 (0, 1]。
words_ 屬性是一個字典型別,它儲存的鍵的最大個數為 max_words,即 WordCloud 類的引數。
如下:
>>> wc.words_{'Python': 1.0, 'programming': 1.0, 'language': 1.0, 'easy': 1.0, 'use': 1.0}# 示例中的這些單詞出現的頻率都相等(均為 1),# 所以它們的權重都是 1。
用 Matplotlib 展示詞雲圖像:
import matplotlib.pyplot as pltplt.imshow(wc) plt.axis("off")plt.show()
詞雲圖像如下:
4,對古詩做詞雲分析我在這裡準備了一個案例,是對1000 首古詩做詞雲分析。
程式碼目錄如下:
wordcloud/├── SimHei.ttf├── gushi.txt└── gushi_wordcloud.py
其中:
SimHei.ttf:是一個字型檔案,避免詞雲分析時出現中文亂碼。gushi.txt:該檔案中包含了1000 首古詩。gushi_wordcloud.py:是詞雲分析程式碼。我將程式碼也放在這裡,方便檢視:
#!/usr/bin/env python# coding=utf-8import osimport sysimport jiebafrom wordcloud import WordCloudif sys.version.startswith('2.'): reload(sys) sys.setdefaultencoding('utf-8')# 去掉一些作者的名字STOPWORDS = [ u'李白', u'杜甫', u'辛棄疾', u'李清照', u'蘇軾', u'李商隱', u'王維', u'白居易', u'李煜', u'杜牧', ]def load_file(file_path): if sys.version.startswith('2.'): with open(file_path) as f: lines = f.readlines() else: with open(file_path, encoding='utf-8') as f: lines = f.readlines() content = '' for line in lines: line = line.encode('unicode-escape').decode('unicode-escape') line = line.strip().rstrip('\n') content += line words = jieba.cut(content) l = [] for w in words: # 如果詞的長度小於 2,則捨去 if len(w) < 2: continue l.append(w) return ' '.join(l)if __name__ == '__main__': file_path = './gushi.txt' content = load_file(file_path) wc = WordCloud( font_path="./SimHei.ttf", stopwords=STOPWORDS, width=2000, height=1200) wc.generate(content) wc.to_file("wordcloud.jpg")
其中:
STOPWORDS 停用詞列表,是一些作者的名字。load_file 方法用於載入文字,其中用到了 jieba 分詞。最後將詞雲圖像儲存在了 wordcloud.jpg 檔案中,如下:
我們也可以從詞雲物件的words_ 屬性中檢視每個詞的權重,這裡我列出前十個:
('明月', 1.0)('今日', 0.9130434782608695)('不知', 0.8405797101449275) ('何處', 0.8260869565217391) ('不見', 0.8115942028985508) ('春風', 0.7536231884057971) ('無人', 0.7536231884057971) ('不可', 0.7536231884057971) ('萬里', 0.7536231884057971)
最新評論