Python實現(xiàn)創(chuàng)建詞云的示例詳解
什么是詞云?在網(wǎng)絡(luò)上我們經(jīng)常可以看到一張圖片,上面有一大堆大小不一的文字,這便是詞云。詞云一般是根據(jù)輸入的大量詞語生成的,如果某個詞語出現(xiàn)的次數(shù)越多,那么相應(yīng)的大小就會越大。
Python 中有一個專門用來生成詞云的模塊:wordcloud,直接 pip 安裝即可,然后我們來看看它的用法。
# 導(dǎo)入模塊
from wordcloud import WordCloud
# 準備文本數(shù)據(jù),是一個字符串,單詞之間用空格分隔
sentence = "hello satori hello mashiro hello satori"
# 創(chuàng)建詞云對象
wc = WordCloud()
# 根據(jù)文本生成詞云
wc.generate(sentence)
# 保存為圖片
wc.to_file("word.png")我們打開圖片看看效果:

我們看到單詞就顯示在了圖片上,如果單詞一多就像天空的云彩一樣漂浮著,并且單詞出現(xiàn)的頻率越高,那么該單詞在圖片上大小就越大。
雖然詞云生成了,但是風(fēng)格是固定的,我們可不可以調(diào)整呢,顯然是可以的。WordCloud 里面支持很多參數(shù)用來調(diào)整風(fēng)格,我們看一下這些參數(shù)。
- width:詞云的寬,默認是400像素;
- height:詞云的高,默認是200像素;
- background_color:詞云的背景顏色,默認是黑色;
- font_path:生成的詞云所使用的字體,傳入一個字體名稱;
- mask:詞云背景圖片,接收一個 Numpy 數(shù)組??梢允褂?PIL 或者 cv2 讀取圖片,然后生成數(shù)組;
- stopwords:要屏蔽的詞語,接收一個集合,生成詞云的時候會忽略掉屏蔽的詞語;
- max_font_size:字體的最大大小,默認為 None;
- min_font_size:字體的最小大小,默認為 None;
- max_words:最多顯示多少個單詞,默認為200。比如文本數(shù)據(jù)有 10000 個不重復(fù)單詞,肯定不可能全部顯示,而是按照出現(xiàn)的頻率高低排序,選擇出現(xiàn)頻率最高的 N 個單詞,默認是 200 個;
- contour_width:輪廓粗細;
- contour_color:輪廓顏色;
- scale:用來控制生成的圖片大小,默認為 1。如果我們改成了 10,那么生成的圖片大小會擴大 10 倍。這個參數(shù)不用管,沒太大用,默認為 1 即可;
我們舉例說明:
from wordcloud import WordCloud
sentence = "i do not need sex, because life fucks me every every single day"
wc = WordCloud(
width=500, # 設(shè)置寬度為500px
height=300, # 設(shè)置高度為300px
background_color='pink', # 設(shè)置背景為粉色
stopwords={"sex", "fucks"}, # 設(shè)置禁用詞
max_font_size=100, # 設(shè)置最大的字體大小,所有詞都不會超過 100px
min_font_size=10, # 設(shè)置最小的字體大小,所有詞都會超過 10px
max_words=10 # 最多生成 10 個詞,當然這里單詞比較少,看不出來什么
)
wc.generate(sentence)
wc.to_file("word.png")我們看看生成的圖片:

我們看到圖片變寬了、變高了,背景變成粉色了,并且也沒有出現(xiàn)禁用詞。
但這個圖片是正方形的,而我們平常見到的詞云是有形狀的,比如一個圓形、或者一個人的形狀等等。顯然這是根據(jù)圖片生成的,而 wordcloud 也支持我們這么做,下面來演示一下。
from wordcloud import WordCloud
from PIL import Image
import numpy as np
# 一篇英文文章
with open("article.txt") as f:
sentence = f.read()
# 加載一張圖片,轉(zhuǎn)化成numpy中的數(shù)組
mask = np.array(Image.open("哆啦A夢.png"))
# 傳入mask
wc = WordCloud(mask=mask)
wc.generate(sentence)
wc.to_file("word.png")我們看一下生成的結(jié)果:

下面是原始的圖片,"多啦A夢.png"

會自動將周圍的白色區(qū)域給忽略掉,因此選擇的圖片建議最好是白底的。
然后目前生成詞云所使用的單詞都是英文的,那中文可不可以呢?我們來看一下。
from wordcloud import WordCloud
wc = WordCloud()
wc.generate("古明地覺的編程教室")
wc.to_file("word.png")生成的結(jié)果如下:

顯然默認是不支持中文的,此時我們需要指定一個中文字體。
from wordcloud import WordCloud
# 傳入本機支持中文的字體名稱
wc = WordCloud(font_path="Arial Unicode.ttf")
wc.generate("古明地覺的編程教室")
wc.to_file("word.png")看看效果:

中文正常顯示了,但顯示的是一整句話。因為 wordcloud 默認是以空格分隔單詞的,所以對于英文我們不需要做什么處理,因為英文單詞之間就是以空格分隔的。但中文則是所有的漢字都連在一起,因此整體被當成了一個詞。
這個時候推薦使用 jieba 分詞,將單詞進行分隔。
from wordcloud import WordCloud
import jieba
with open("出師表.txt") as f:
sentence = f.read()
# 分詞得到列表,手動使用空格拼接
sentence = " ".join(jieba.cut(sentence))
wc = WordCloud(font_path="Arial Unicode.ttf")
wc.generate(sentence)
wc.to_file("word.png")我們基于出師表的內(nèi)容生成詞云:

結(jié)果沒有問題,當然這里圖片有點小了,你也可以調(diào)整它的寬高。
另外我們一直都是將詞云保存成圖片,除了圖片,還可以保存成其它格式。
from io import BytesIO
from wordcloud import WordCloud
import jieba
with open("出師表.txt") as f:
sentence = f.read()
sentence = " ".join(jieba.cut(sentence))
wc = WordCloud(font_path="Arial Unicode.ttf")
wc.generate(sentence)
# 將詞云保存為 PIL 的 Image 對象
im = wc.to_image()
buf = BytesIO()
# 將詞云的字節(jié)流保存在 buf 中,這樣可以直接交給客戶端進行渲染
im.save(buf, "png")
print(buf.getvalue())
# 當然也可以保存為文件,im.save(filename)
# wc.to_file() 底層也是先轉(zhuǎn)成 Image 對象、然后調(diào)用 im.save() 實現(xiàn)的
# 或者還可以保存為 SVG 格式
svg = wc.to_svg()
# 將 svg 的內(nèi)容保存成文件,就得到 SVG 圖片了
print(svg)以上就是Python實現(xiàn)創(chuàng)建詞云的示例詳解的詳細內(nèi)容,更多關(guān)于python詞云的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
python圖片由RGB空間轉(zhuǎn)成LAB空間的實現(xiàn)方式
這篇文章主要介紹了python圖片由RGB空間轉(zhuǎn)成LAB空間的實現(xiàn)方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2023-10-10
Python中如何優(yōu)雅的合并兩個字典(dict)方法示例
字典是Python語言中唯一的映射類型,在我們?nèi)粘9ぷ髦薪?jīng)常會遇到,下面這篇文章主要給大家介紹了關(guān)于Python中如何優(yōu)雅的合并兩個字典(dict)的相關(guān)資料,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考借鑒,下面來一起看看吧。2017-08-08
使用python和opencv的mask實現(xiàn)摳圖疊加
這篇文章主要介紹了使用python和opencv的mask實現(xiàn)摳圖疊加操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2021-04-04
一篇文章帶你學(xué)習(xí)python的函數(shù)與類
這篇文章主要為大家介紹了python的函數(shù)與類,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助2022-01-01
利用rest framework搭建Django API過程解析
這篇文章主要介紹了利用rest framework搭建Django API過程解析,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2019-08-08
Python 中urls.py:URL dispatcher(路由配置文件)詳解
這篇文章主要介紹了Python 中urls.py:URL dispatcher(路由配置文件)詳解的相關(guān)資料,需要的朋友可以參考下2017-03-03

