文本挖掘之詞雲及個性化詞雲
一:詞雲-WordCloud
詞雲:對文本中出現的關鍵詞按照出現頻率通過改變字體字號顏色樣式等方式集中顯示
個人看法,wordcloud是一款將詞語(支持英文、中文等各種語言詞匯)作為基本元素,對圖像文件進行十分高效填充的文字展示工具。同時,還可使用masks(掩膜)功能,也可結合分詞工具等等,更加直觀、唯美、創造性和個性化地展示文本文字
頻率較高的“關鍵詞”予以視覺上的突出,從而給關鍵字設定直觀的級別,過濾掉大量的低效文本信息,使瀏覽者只要一眼掃過詞雲就可以領略文本的主旨
安裝 WordCloud庫
- 命令安裝:pip install wordcloud
- 下載安裝 官網下載wordcloud安裝程序,注意需與你使用的Python版本一致。https://www.lfd.uci.edu/~gohlke/pythonlibs/#wordcloud
二:jieba
jieba,結巴中文分詞,一款優秀的Python第三方中文分詞庫,是自然語言分析(NLP)工具之一。它依據「詞典」確定漢字間的關聯概率,概率大的組成詞,形成分詞結果。
jieba出品地址:https://github.com/fxsjy/jieba
jieba短小精悍,分詞能力卻不可小覷。它有三種分詞模式,支持自定義詞典,支持繁體分詞。
三種分詞模式為:
- (一)精確模式
- 試圖將句子最精確地切開,適合文本分析。
- (二)全模式
- 將句子中所有可成詞的詞語都掃描出來,速度非常快,但不能解決歧義。
- (三)搜索引擎模式
- 在精確模式基礎上,對長詞再次切分,提高召回率,適用搜索引擎分詞。
jieba的安裝
Python 2/3均兼容。通過 import jieba 來引用。
- (一)全自動安裝
- easy_install jieba 或 pip install jieba 或 pip3 install jieba
- (二)半自動安裝
- http://pypi.python.org/pypi/jieba/
- 下載解壓后運行 python setup.py install
- (三)手動安裝
- 將 jieba 目錄放置於當前目錄或者 site-packages 目錄。
- (四)PyCharm 中安裝
- 【File】-【Settings】-【Project Interpreter】-【+】-搜索jieba-【Install Package】
案例:為《大話西游》台詞節選繪制詞雲
import numpy as np import matplotlib.pyplot as plt import jieba from wordcloud import WordCloud from PIL import Image # 載入文本數據 with open('F:/data/大話西游.txt', 'r', encoding='gbk') as f: # print(f.read()) txt = f.read() txt2 = ' '.join(jieba.cut(txt)) # 繪制詞雲 # 停用詞 # 方式2:讀入停用詞文件為列表 with open('F:/data/stopword.txt', 'r', encoding='gbk') as f: # print(f.read()) s = f.read() stopword = s.split('\n') stopword # 詞雲繪制時去停用詞 # 基本版詞雲 wordcloud = WordCloud( font_path="F:/data/FZSTK.TTF", ).generate(txt2) wordcloud plt.imshow(wordcloud)
wordcloud = WordCloud( font_path="F:/data/arial unicode ms.ttf", # 字體,不設置則漢字亂碼 background_color='white',# 設置背景顏色 max_words=80, # 設置最大現顯示詞數 max_font_size=80, # font_size可選 stopwords = stopword, # 去停用詞 ).generate(txt2) wordcloud plt.figure(figsize=(18, 10), dpi=72) plt.imshow(wordcloud, interpolation='bilinear') # 繪制數據內的圖片,雙線性插值繪圖 plt.axis("off") # 去掉坐標軸 plt.savefig('F:/data/test.png', dpi=300, bbox_inches='tight') # 保存為:帶有最小白邊且分辨率為300DPI的PNG圖片
個性化詞雲圖
#讀取背景圖 alice_mask = np.array(Image.open("F:/data/heart.jpg")) wordcloud = WordCloud( background_color='white',# 設置背景顏色 max_words=100, # 設置最大現顯示詞數 font_path="F:/data/arial unicode ms.ttf", # 字體,不設置則漢字亂碼 stopwords = stopword, # 去停用詞 mask=alice_mask, # 設置背景圖片 ).generate(txt2) wordcloud plt.figure(figsize=(18, 10), dpi=72) plt.imshow(wordcloud, interpolation='bilinear') # 繪制數據內的圖片,雙線性插值繪圖 plt.axis("off") # 去掉坐標軸 plt.savefig('F:/data/test2.png', dpi=300, bbox_inches='tight')
高階:詞雲模板圖像上色
完成上一步的操作可稱為大神了。下面我們一起提高一下用戶體驗,優化圖片上色。
ImageColorGenerator(image, default_color=None)是基於彩色圖像的顏色生成器。根據RGB圖像生成顏色。單詞將使用彩色圖像中包圍的矩形的平均顏色進行着色。構造后,該對象充當可調用對象,可以作為color_func傳遞給詞雲構造函數或recolor方法。 此外,還需定義WordCloud類中的color_func參數對詞雲進行重新着色。
import wordcloud import jieba # 使用ImageColorGenerator類根據獲取的模板圖像生成顏色,並賦值變量 color_new = wordcloud.ImageColorGenerator(alice_mask) wordcloud = WordCloud( background_color='white',# 設置背景顏色 max_words=100, # 設置最大現顯示詞數 font_path="F:/data/arial unicode ms.ttf", # 字體,不設置則漢字亂碼 contour_width=25, # 詞雲形狀邊寬寬度 contour_color='red', # 詞雲形狀邊寬顏色 color_func=color_new, # 將上面模板圖像生成的顏色傳入詞雲 stopwords = stopword, # 去停用詞 mask=alice_mask, # 設置背景圖片 ).generate(txt2) wordcloud plt.figure(figsize=(18, 10), dpi=72) plt.imshow(wordcloud, interpolation='bilinear') # 繪制數據內的圖片,雙線性插值繪圖 plt.axis("off") # 去掉坐標軸 plt.savefig('F:/data/test3.png', dpi=300, bbox_inches='tight')
七:數據建模
import jieba import numpy as np import matplotlib.pyplot as plt from PIL import Image from wordcloud import WordCloud as WC import wordcloud as wd # 載入文本數據 with open('F:/data/大話西游.txt', 'r', encoding='gbk') as f: txt = f.read() # 分詞 txt2 = ' '.join(jieba.cut(txt)) # 方式2:讀入停用詞文件為列表 with open('F:/data/stopword.txt', 'r', encoding='gbk') as f: s = f.read() stopword = s.split('\n') wordcloud = WordCloud(font_path="F:/data/FZSTK.TTF").generate(txt2) #讀取背景圖 alice_mask = np.array(Image.open("F:/data/heart.jpg")) # 使用ImageColorGenerator類根據獲取的模板圖像生成顏色,並賦值變量 color_new = wd.ImageColorGenerator(alice_mask) wordcloud = WC( background_color='white',# 設置背景顏色 max_words=100, # 設置最大現顯示詞數 font_path="F:/data/arial unicode ms.ttf", # 字體,不設置則漢字亂碼 contour_width=25, # 詞雲形狀邊寬寬度 contour_color='red', # 詞雲形狀邊寬顏色 color_func=color_new, # 將上面模板圖像生成的顏色傳入詞雲 stopwords = stopword, # 去停用詞 mask=alice_mask, # 設置背景圖片 ).generate(txt2) wordcloud plt.figure(figsize=(18, 10), dpi=72) plt.imshow(wordcloud, interpolation='bilinear') # 繪制數據內的圖片,雙線性插值繪圖 plt.axis("off") # 去掉坐標軸 plt.savefig('F:/data/test22.png', dpi=300, bbox_inches='tight')
歡迎關注:一只阿木木