文本挖掘之詞雲及個性化詞雲

文本挖掘之詞雲及個性化詞雲

一:詞雲-WordCloud

詞雲:對文本中出現的關鍵詞按照出現頻率通過改變字體字號顏色樣式等方式集中顯示

個人看法,wordcloud是一款將詞語(支持英文、中文等各種語言詞彙)作爲基本元素,對圖像文件進行十分高效填充的文字展示工具。同時,還可使用masks(掩膜)功能,也可結合分詞工具等等,更加直觀、唯美、創造性和個性化地展示文本文字

頻率較高的“關鍵詞”予以視覺上的突出,從而給關鍵字設定直觀的級別,過濾掉大量的低效文本信息,使瀏覽者只要一眼掃過詞雲就可以領略文本的主旨

安裝 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)

w1

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圖片

w2

個性化詞雲圖

#讀取背景圖
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')

w3

高階:詞雲模板圖像上色

完成上一步的操作可稱爲大神了。下面我們一起提高一下用戶體驗,優化圖片上色。

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')

w4

七:數據建模

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')

 

歡迎關注:一隻阿木木

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章