1. 程式人生 > >Python小程式——利用wordcloud庫生成詞雲(一)

Python小程式——利用wordcloud庫生成詞雲(一)

最近自學Python的中文處理,其中用到了wordcloud庫生成一篇文章的詞雲,能更直觀的表現出文章的主題,是一個不錯的工具。雖然現在網上有很多詞雲線上生成的應用,不過為了更個性化一點,還是寫一個自己的詞雲生成工具吧。

import jieba
import wordcloud
from imageio import imread
from collections import Counter
fire = open('新時代中國特色社會主義.txt', 'r', encoding='UTF-8-sig')
text = fire.read()
fire.close()

讀取文字儲存在text變數中,第一步進行詞頻統計。

def get_words(text):  # 詞頻統計
    seg_list = jieba.cut(text)
    c = Counter()
    # Counter 作為字典(dict)的一個子類用來進行hashtable計數,
    # 將元素進行數量統計、計數後返回一個字典,鍵值為元素:值為元素個數
    for i in seg_list:
        if len(i) > 1 and i != '\r\n':
            c[i] += 1
    ls = []
    # 選出詞頻前100的詞
    for (i, j) in c.most_common(120):
        ls.append(i)
    return ls

統計出來的詞可能有些並不是我們想要的,要經過多次篩選排除:

word_ls = get_words(text)

# 篩選排除
stop_words = ['我們', '一個', '一切', '中國']
for i in word_ls:
    if i in stop_words:
        word_ls.remove(i)

篩選後的詞可以列印輸出檢視:

由於wordcloud是給英文製作詞雲的庫,所以預設是按照空格來分詞,我們之前已經用jieba庫給中文分好了詞並且經過詞頻統計和篩選,記得用空格連線分好的詞:

text_list = ' '.join(word_ls)

新建一個wordcloud物件,呼叫generate()方法就能生成詞雲了:

w_cloud = wordcloud.WordCloud(
    font_path=font,
    background_color=None, mode="RGBA",  # 背景透明
    width=1000,
    height=600,
    mask=mask)

w_cloud.generate(text_list)
w_cloud.to_file('wordcloud.png')

最終效果:

wordcloud物件可以配置很多屬性,生成個性詞雲,這個另一篇文章再詳細說明。