爬蟲筆記:使用python生成詞雲(八)


什么是詞雲呢?

詞雲就是一些關鍵詞組成的一個圖片。大家在網上經常看到,下面看一些例子:

那用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')#保存到圖片

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM