1. 程式人生 > 其它 >python-wordcloud詞雲庫

python-wordcloud詞雲庫

一、詞雲介紹

  • 詞雲又叫文字雲,是對文字資料中出現頻率較高的”關鍵詞“在視覺上的突出呈現,形成關鍵詞的渲染形成類似雲一樣的彩色圖片,從而一眼就可以領略文字資料的主要表達意思。
  • wordcloud 是優秀的詞雲展示第三方庫,以詞語為基本單位,通過圖形視覺化的方式,更加直觀和藝術的展現文字

二、庫安裝

  1. 開啟cmd
  2. 輸入 pip install wordcloud
  3. 輸入 pip install imageio
  4. 輸入 pip install jieba

若是提示報錯,有可能是pip工具版本過低,需要更新pip包管理工具
只需要輸入 pip -m pip install --upgrade pip 即可


三、wordcloud 方法引數

wordcloud.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=0.5, regexp=None, collocations=True,colormap=None, normalize_plurals=True)

引數說明

  • font_path:string

字型路徑,需要展現什麼字型就把該字型的路徑+字尾名寫上,如:font_path = "黑體.ttf"

  • width:int(default = 400)

輸出畫布的寬度,預設為400畫素

  • height:int(default = 200)

輸出畫布的高度,預設為200畫素

  • prefer_horizontal:float(default = 0.90)

詞語水平方向排版出現的頻率,預設0.9,所以詞語垂直方向排版出現的頻率為0.1

  • mask:nd-array or None (default = None)

如果引數為空,則使用二維遮罩繪製詞雲。如果mask非空,設定的寬高值將被忽略,遮罩形狀被mask取代。除全白(#FFFFFF)的部分將不會繪製,其餘部分會用於繪製詞雲。如:bg_pic = imread('讀取一張圖片.png'),背景圖片的畫布一定要設定為白色(#FFFFFF),然後顯示的形狀為不是白色的其他顏色。可以用ps工具將自己要顯示的形狀複製到一個純白色的畫布上再儲存

  • scale:float(default = 1)

按照比例進行放大畫布,如設定為1.5,則長和高都是原來畫布的1.5倍

  • min_font_size:int(default = 4)

顯示的最小的字型大小

  • font_step:int(default = 1)

字型步長,如果步長大於1,會加快運算但是可能會導致結果出現較大的誤差

  • max_words:number(default = 200)

要顯示的詞的最大個數

  • stopwords:set of strings or None

設定需要遮蔽的詞,如果為空,則使用內建的 STOPWORDS

  • background_color:color value(default = "black")

背景顏色,如:background_color = 'white'

  • max_font_size:int or None(default = None)

顯示的最大的字型大小

  • mode:string(default = "RGB")

當引數為'RGB' 並且background_color不為空時,背景為透明

  • relative_scaling:float(default = 0.5)

詞頻和字型大小的關聯性

  • color_func:callable(default = None)

生成新顏色的函式,如果為空,則使用 self.color_func

  • regexp:string or None (optional)

使用正則表示式分隔輸入的文字

  • collocations:bool(default = True)

是否包括兩個詞的搭配

  • colormap:string or matplotlib colormap(default = "ciridis")

給每個單詞隨機分配顏色,若指定color_func,則忽略該方法


函式

  • fit_words(frequencies)

根據詞頻生成詞雲

  • generate(text)

根據文字生成詞雲

  • generate_from_text(text)

根據文字生成詞雲

  • process_text(text)

將長文字分詞並去除遮蔽詞(此處指的是英文,中文分詞需要用其他庫來實現)

  • recolor([random_state,color_func,colormap])

對現有輸出重新著色。重新著色會比重新生成整個詞雲快很多

  • to_array()

轉化為 numpy array

  • to_file(filename)

輸出到檔案


四、示例

案例一

import wordcloud

w = wordcloud.WordCloud()
w.generate("python c++ javascript java c  c#")
w.to_file("a.png")

案例二

import wordcloud

txt = '''A good book may be among the best of friends. It is the same today that it always was, and it will never change. It is the most patient and cheerful of companions. It does not turn its back upon us in times of adversity or distress. It always receives us with the same kindness; amusing and instructing us in youth, and comforting and consoling us in age.'''
# 將預設黑色背景換成白色並且遮蔽單詞'sn'
w = wordcloud.WordCloud(background_color = "white",stopwords={"sn"})
w.generate(txt)
w.to_file("詞雲.png")

案例三
下面示例一箇中文,使用的分詞庫是jieba庫

import jieba
import wordcloud

text = '''計算機網路學習的核心內容就是網路協議的學習。網路協議是為計算機網路中進行
資料交換而建立的規則、標準或者說是約定的集合。因為不同使用者的資料終端可能採取的字
符集是不同的,兩者需要進行通訊,必須要在一定的標準上進行。一個很形象地比喻就是我
們的語言,我們大天朝地廣人多,地方性語言也非常豐富,而且方言之間差距巨大。A地區的
方言可能B地區的人根本無法接受,所以我們要為全國人名進行溝通建立一個語言標準,這就
是我們的普通話的作用。同樣,放眼全球,我們與外國友人溝通的標準語言是英語,所以我
們才要苦逼的學習英語'''

# 使用jieba來對文章進行分詞
txt = " ".join(jieba.cut(text))
# font_path 字型路徑
w = wordcloud.WordCloud(background_color="white", font_path = "msyh.ttc")
w.generate(txt)
w.to_file("中文詞雲.png")

案例四
接下來的案例可能需要一些txt文字和圖片,可以點選這裡下載
使用周杰倫 Mojito 歌詞,生成詞雲

import jieba
import wordcloud

# 開啟txt檔案
f = open("Mojito.txt", "r", encoding="utf-8")
t = f.read()
f.close()

txt = " ".join(jieba.lcut(t))

w = wordcloud.WordCloud( \
    background_color = "white",
    font_path = "msyh.ttc"    
    )
w.generate(txt)
w.to_file("Mojito.png")

案例五
周杰倫歷年歌詞比較,生成詞雲

import jieba
import wordcloud
f1 = open("Jay11月的蕭邦.txt", "r", encoding="utf-8")
f2 = open("Jay2016-2020單曲歌詞.txt", "r", encoding="utf-8")

t1 = f1.read()
t2 = f2.read()
f1.close()
f2.close()

txt1 = " ".join(jieba.lcut(t1))
w1 = wordcloud.WordCloud( \
    background_color = "white",
    font_path = "msyh.ttc"    
    )
w1.generate(txt1)
w1.to_file("Jay1.png")

txt2 = " ".join(jieba.lcut(t2))
w2 = wordcloud.WordCloud( \
    background_color = "white",
    font_path = "msyh.ttc"    
    )
w2.generate(txt2)
w2.to_file("Jay2.png")

案例六
Jay2016-2020單曲歌詞 不規則圖形詞雲

import jieba
import wordcloud
from imageio import imread

mask = imread("smile.jpg")
f = open("Jay2016-2020單曲歌詞.txt", "r", encoding="utf-8")
t = f.read()
f.close()

txt = " ".join(jieba.lcut(t))
w = wordcloud.WordCloud(\
    background_color = "white",\
    font_path = "msyh.ttc", mask = mask,\
    )
w.generate(txt)
w.to_file("jaysmile.png")