高大上的詞雲,其實很簡單
大家好,我是【Python辦公自動化】:閒暇之餘分享點文字、程式設計、設計等乾貨,希望和你一起成長。
一起學習Python辦公自動化,教你快速學習Python的方法,可以站內私信我。
一起加油!!!
**
Python高效學習QQ群:374981146
**
在海量資料中提取有效的資訊,詞雲不愧是一種有效解決此類問題的方法,它可以突出顯示關鍵詞,快速提取有價值的資訊。Python製作詞雲很簡單,一般幾行程式碼就可以搞定,主要使用的庫有jieba(結巴,一種分割漢語的分詞庫)和wordcloud庫。
1.jieba庫
jieba 是目前最好的Python中文分片語件,它支援3種分詞模式:精確模式、全模式、搜尋引擎模式。
- jieba.cut()方法接受兩個輸入引數,第一個引數為需要分詞的字串,第二個引數cut_all用來控制是否採用全模式。返回一個列表。
- jieba.lcut()方法接受兩個輸入引數,第一個引數為需要分詞的字串,第二個引數cut_all用來控制是否採用全模式。返回一個生成器。該方法與jieba.cut()方法返回切割的詞是一致的。
- jieba.cut_for_search()方法接受一個引數,引數為需要分詞的字串,該方法適合用於搜尋引擎構建倒排索引的分詞,粒度比較細。
從結果上看全模式是將所有詞語分割出來,但會分割出我們不需要的詞語。如果我們做詞雲,常使用精確模式。搜尋引擎常使用搜尋引擎模式,將句子切割成關鍵詞。
通過下段程式碼演示這3種模式的區別,原始碼如下。
import jieba
#全模式,cut()方法返回列表
seg_list = jieba.cut("南京市長江大橋歡迎你。", cut_all=True)
print(type(seg_list),seg_list)
#精確模式,lcut()方法返回生成器模式
seg_list1 = jieba.lcut("南京市長江大橋歡迎你。", cut_all=False)
print(type(seg_list1),seg_list1)
#搜尋引擎模式
seg_list2 = jieba.cut_for_search("南京市長江大橋歡迎你。")
print(type(seg_list2),seg_list2)
print("全模式:" + "/ ".join(seg_list))
print("精確模式:" + "/ ".join(seg_list1))
print("搜尋引擎模式:" + "/ ".join(seg_list2))
程式碼執行結果如下所示。
<class 'list'> ['南京市', '長江大橋', '歡迎', '你', '。']
<class 'generator'> <generator object Tokenizer.cut_for_search at 0x000002E04D1C43C0>
全模式:南京/ 南京市/ 京市/ 市長/ 長江/ 長江大橋/ 大橋/ 歡迎/ 你/ 。
精確模式:南京市/ 長江大橋/ 歡迎/ 你/ 。
搜尋引擎模式:南京/ 京市/ 南京市/ 長江/ 大橋/ 長江大橋/ 歡迎/ 你/ 。
2.wordcloud庫
wordcloud庫是優秀的詞雲展示第三方庫,主要功能是用文字詞彙和詞頻以圖片展示。直觀形象反映詞彙在所有文章中的比重,如:人物標籤的特性、評論區情緒等等。通過圖形視覺化的方式,更加直觀和藝術的展示文字。
詞雲生成主要使用了wordcloud 庫中的WordCloud類,可以根據文字中詞語出現的頻率等引數繪製詞雲,繪製詞雲的形狀、尺寸和顏色均可設定。
以WordCloud類為基礎,配置引數、載入文字、輸出檔案,其語法格式如下。
class wordcloud.WordCloud(font_path=None, width=400, height=200, margin=2, 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')
其中常用引數font_path指字型路徑或者字型名稱。
- width指輸出的畫布寬度,預設400畫素。height指輸出的畫布高度,預設200畫素。
- mask引數如果為空,以預設寬和高繪製。如果mask非空,設定的寬高值將被忽略,遮罩形狀被具體的mask取代。除全白(#FFFFFF)的部分將不會繪製,其餘部分會用於繪製詞雲。比如用Pillow讀取某張圖片,轉換成Numpy的array格式,並將其設定為mask(遮罩)。除圖片全白的部分將不會被繪製,其餘部分會用於繪製詞雲。
- scale指按照比例進行放大畫布,預設為1。如設定為1.5,則長和寬都是原來畫布的1.5倍。
- min_font_size指顯示的最小的字型大小,預設為4。max_font_size指顯示的最大的字型大小。
- max_words指要顯示的詞的最大個數,預設為200。
- stopwords指需要停用的詞,如果為空,則使用內建的STOPWORDS停用庫。
- background_color指背景顏色,預設為黑色(black)。如background_color=‘white’,背景顏色為白色。
- mode引數預設為RGB,當引數為RGBA並且background_color不為空時,背景為透明。
- color_func指生成新顏色的函式,如果為空,則使用 self.color_func
wordcloud庫如何將文字轉化為詞雲呢?
(1)分隔,以空格分隔單詞,如果是中文,使用jieba分詞庫切割。
(2)統計,單詞出現次數並過濾
(3)字型,根據統計配置字號
(4)佈局,顏色環境尺寸
接下來我們一起進行程式碼編寫,通過3步來演示詞雲效果。
(1)準備分詞檔案和背景圖片。
我們在網上找一些關於愛情美好的語句,黏貼到文字檔案,命名為7xi.txt。然後找一個好的背景,比如心型圖案,要求背景白色或者透明,格式為png。
(2)詞雲效果。
通過下段程式碼實現一個詞雲效果,原始碼如下。
from wordcloud import WordCloud, STOPWORDS,ImageColorGenerator
import jieba
import numpy as np
from PIL import Image
import matplotlib.pyplot as plt
import os
curpath = os.path.dirname(__file__)
filename = os.path.join(curpath, '7xi.txt')
backimg = os.path.join(curpath, 'back3.png')
savefilename = os.path.join(curpath, 'wordcloud.png')
#設定模板
backgroud_Image=np.array(Image.open(backimg))
#建立物件
wcd = WordCloud(background_color='white',width=400,height=200,font_path='simhei.ttf',mask=backgroud_Image,max_font_size=100, min_font_size=10,scale=1.5)
text=open(filename,'r',encoding='utf-8').read()
#對讀取的檔案進行分詞
text=" ".join(jieba.lcut(text))
#生成詞雲
wcd.generate(text)
#儲存圖片
wcd.to_file(savefilename)
程式碼執行後生成wordcloud.png,檔案內容如圖所示。
(3)美化效果。
預設詞雲的顏色以藍綠冷色調偏多,看起來不是很舒服。我們換個顏色來顯示,如下列程式碼。原始碼如下。
image_colors = ImageColorGenerator(backgroud_Image)
wcd.recolor(color_func=image_colors)
#儲存圖片
wcd.to_file(savefilename)
程式碼執行後,檔案內容如圖16-89所示。
除此之外,還可以顯示在Matplotlib的視窗中,只需要增加如下程式碼即可。
plt.imshow(wcd)
plt.axis('off') #關閉座標軸
plt.show()
請讀者自行測試驗證。原始碼和素材入群獲取。
相關文章
- Promise 其實很簡單Promise
- 快排其實很簡單
- 其實泛型很簡單泛型
- 紅黑樹其實很簡單
- 撥開雲霧見月明—計算其實很簡單
- Redux其實很簡單(原理篇)Redux
- 這是DDD建模最難的部分(其實很簡單)
- 電腦上永久刪除的檔案怎麼恢復?其實很簡單
- 執行緒池其實看懂了也很簡單執行緒
- 這樣看java記憶體模型其實很簡單Java記憶體模型
- android 整合微信支付和支付寶支付其實很簡單Android
- 有了它,在家遠端辦公其實可以很簡單
- 新手也能看懂,訊息佇列其實很簡單佇列
- 如何做到數字化轉型?其實方法很簡單
- 行雲海個人部落格[簡潔|高大上]
- 簡單的單例模式其實也不簡單單例模式
- 月薪3000和30000的人差在哪?知道答案後其實很簡單
- Python 基礎起步 (九) 條件語句 if elif else 其實很簡單Python
- 老股民總結的8個選股技巧,選股其實很簡單
- 回收站裡的檔案刪除了怎麼恢復,其實很簡單
- EventLoop其實如此簡單OOP
- 短影片一鍵同步系統,同步30+平臺其實很簡單
- 優思學院|精益六西格瑪很深奧?其實很簡單
- 簡陋到極致便成了經典,看似很Low的開羅遊戲其實並不簡單遊戲
- H3C UniStor CB備份一體機:備份其實很簡單
- 面試小能手速成,介面測試指令碼如何編寫?其實很簡單面試指令碼
- 淘寶放大鏡的簡單實現,原來道理很簡單
- 常用的自媒體工具有哪些?把文章發到30+平臺其實很簡單
- 什麼是新媒體矩陣運營?運營矩陣其實很簡單矩陣
- 思邁特軟體VP徐晶:其實,金融科技也沒那麼“高大上”
- 掌握電商資料的4個要點!電商平臺資料分析其實很簡單
- 重灌win10系統方法分享,自己重灌win10系統其實很簡單Win10
- python實現簡單猜單詞遊戲Python遊戲
- TCP/IP中最高大上的鏈路層簡介TCP
- vuex其實超簡單,只需3步Vue
- 雲原生很簡單,你只需要知道:
- HTML很簡單?不!HTML
- 很簡單的Flutter填小坑Flutter