公號:碼農充電站pro
主頁:https://codeshellme.github.iohtml
今天來介紹一下如何使用 Python 製做詞雲。python
詞雲又叫文字雲,它能夠統計文本中頻率較高的詞,並將這些詞可視化,讓咱們能夠直觀的瞭解文本中的重點詞彙。git
詞的頻率越高,詞顯示的大小也就越大。github
wordcloud 是一個詞雲生成器,它不只是一個 Python 庫,仍是一個命令行工具。咱們能夠經過 wordcloud 官方文檔,和示例庫來學習如何使用它。算法
在使用 wordcloud 以前,須要先安裝它:shell
pip install wordcloud
WordCloud 類用於建立詞雲對象
,先來看下它的原型:app
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 類有不少參數能夠設置,這裏介紹一些經常使用的參數:dom
.ttf
爲後綴。
在建立好詞雲對象
後,可使用 generate
方法生成詞雲,並使用 to_file
方法將詞雲圖像保存在文件中。工具
generate
方法的原型以下:學習
generate(text)
參數text
是一個用空格
隔開的文本字符串。若是分析的是中文,須要先用 jieba 進行分詞,能夠參考這裏。
除了將詞雲圖像保存在文件中,還可使用 Matplotlib 模塊顯示詞雲圖像,示例代碼以下:
import matplotlib.pyplot as plt plt.imshow(wordcloud) # wordcloud 是詞雲對象 plt.axis("off") # 用於關閉座標軸 plt.show()
下面演示一個最簡單的示例,來看如何使用 wordcloud。
首先建立詞雲對象
:
from wordcloud import WordCloud wc = 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 plt plt.imshow(wc) plt.axis("off") plt.show()
詞雲圖像以下:
我在這裏準備了一個案例,是對1000 首古詩作詞雲分析。
代碼目錄以下:
wordcloud/ ├── SimHei.ttf ├── gushi.txt └── gushi_wordcloud.py
其中:
我將代碼也放在這裏,方便查看:
#!/usr/bin/env python # coding=utf-8 import os import sys import jieba from wordcloud import WordCloud if 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) ('現代', 0.6666666666666666)
(本節完。)
推薦閱讀:
歡迎關注做者公衆號,獲取更多技術乾貨。