什么是詞雲呢?
詞雲就是一些關鍵詞組成的一個圖片。大家在網上經常看到,下面看一些例子:
那用python生成一個詞雲的話怎么辦呢,首先要有一些詞,隨便找個吧,用see you again的歌詞好了,放到again.txt里面,放着待會用。
然后呢,咱們用 wrodcloud這個模塊,他可以實現分詞,生成咱們想要的詞雲圖片,直接使用pip install wordcloud安裝即可。
過程呢,就是先讀取到歌詞,然后給WordCloud,讓他幫咱們分詞,分詞的意思就是把里面的一些關鍵詞提取出來,以及指定圖片的大小,背景顏色,字體等等,廢話不多說,直接上代碼。
from wordcloud import WordCloud #導入詞雲模塊 words = open('again.txt',encoding='utf-8').read()#打開歌詞文件,獲取到歌詞 wordcloud = WordCloud(width=1000, #圖片的寬度 height=860, #高度 margin=2, #邊距 background_color='black',#指定背景顏色 font_path='C:\Windows\Fonts\Sitka Banner\msyh.ttc'#指定字體文件,要有這個字體文件,自己隨便想用什么字體,就下載一個,然后指定路徑就ok了 ) wordcloud.generate(words) #分詞 wordcloud.to_file('again.jpg')#保存到圖片
注意,這個地方可能會報“OSError: cannot open resource”的一個錯誤,這是由於找不到字體的原因。我上面的字體位置就是系統中字體位置,所以如果報錯了,檢查一下是否有該字體,更換一下就好。
簡單的幾行代碼就ok拉,下面是生成的效果圖
但是wordcloud這個模塊對中文分詞支持不怎么好,因為英文每個單詞都是空格分開的,但是中文每個詞語並部署,另外有個模塊,對中文分詞的比較好,這個模塊是jieba,直接pip install jieba即可。
下面咱們再找個歌詞,來個中文的,找到一路向北的歌詞,保存到ylxb.txt里面,然后先使用wordcloud分詞,保存到,ylxb1.jpg里面,再用jiba來分詞,保存到ylxb2.jpg里面,看看差別
第一張,wordcloud自帶的分詞之后的詞雲
第二張,使用jieba分詞之后的詞雲
明顯就能看出來第一個基本就沒有分詞,使用jieba之后,把歌詞里面的一些詞語提取了出來,下面是代碼。
import jieba from wordcloud import WordCloud #導入詞雲模塊 words = open('ylxb',encoding='utf-8').read()#打開歌詞文件,獲取到歌詞 new_words = ' '.join(jieba.cut(words))#使用jieba.cut分詞,然后把分好的詞變成一個字符串,每個詞用空格隔開 wordcloud = WordCloud(width=1000, #圖片的寬度 height=860, #高度 margin=2, #邊距 background_color='black',#指定背景顏色 font_path='C:\Windows\Fonts\Sitka Banner\msyh.ttc'#指定字體文件,要有這個字體文件,自己隨便想用什么字體,就下載一個,然后指定路徑就ok了;剛才的字體適用於英文字體,用在中文字體上會報錯,所以換了一個中文字體 ) wordcloud.generate(new_words) #分詞 wordcloud.to_file('ylxb2.jpg')#保存到圖片
ok,詞雲已經生成了,很完美。但是我看到別人的詞雲,都是各種形狀的,為啥咱們都是一個矩形呢。當然是可以解決的了,咱們想讓它成什么形狀就是什么形狀,需要先找到一個有形狀的圖片,我這里找了一棵樹的圖片作為例子,然后需要用到PIL模塊,處理圖片,用numpy把這個圖片的各種屬性轉成數字,這2個模塊需要安裝,都是用pip安裝即可,pip install PIL,pip install numpy。先看下圖片
原來的高跟鞋參照物
下面是產生高跟鞋形狀的詞雲
下面直接上代碼
import jieba,numpy from PIL import Image#導入PIL模塊處理圖片 from wordcloud import WordCloud #導入詞雲模塊 words = open('ylxb.txt',encoding='utf-8').read()#打開歌詞文件,獲取到歌詞 new_words = ' '.join(jieba.cut(words))#使用jieba.cut分詞,然后把分好的詞變成一個字符串,每個詞用空格隔開 alice_mask = numpy.array(Image.open('gaogenxie.jpg')) #使用pil模塊打開這個圖片,然后用numpy獲取到這個圖片各種亂八七糟的屬性 wordcloud = WordCloud(width=1000, #圖片的寬度 height=860, #高度 margin=2, #邊距 mask=alice_mask, background_color='#d4ff80',#指定背景顏色,這里用的是顏色代碼 font_path='C:\Windows\Fonts\Sitka Banner\msyh.ttc'#指定字體文件,要有這個字體文件,自己隨便想用什么字體,就下載一個,然后指定路徑就ok了 ) wordcloud.generate(new_words) #分詞 wordcloud.to_file('ylxb3.jpg')#保存到圖片