用Python畫出

炫酷文字雲

Date: Jun. 2nd, 2019

Lecturer: Chia

OUTLINE

  • 簡介文字雲 (WordCloud)
  • 實作
    1. Jieba 中文斷詞
    2. 生成 WordCloud

簡介文字雲 (WordCloud)

  • 又稱「詞雲」、「標籤雲」
  • 以視覺化方式呈現文本中「高出現頻率的關鍵詞」
  • 安裝 Jieba
$ pip install jieba

實作 - Jieba 中文斷詞

import jieba

content = 'Jieba中文斷詞所使用的演算法是基於Trie Tree\
	結構去生成句子中中文字所有可能成詞的情況,\
	再使用動態規劃演算法來找出最大機率的路徑,\
	這個路徑就是基於詞頻的最大斷詞結果。\
	對於辨識新詞(字典詞庫中不存在的詞)則使用HMM模型及Viterbi演算法來辨識。'

# 讀取文本內容
# content = open('corpus.txt', 'r', encoding = 'utf-8').read()

wordlist_after_jieba = jieba.cut(content, cut_all = False)
    
wl_space_split = "\\".join(wordlist_after_jieba)
print(wl_space_split)

實作 - Jieba 中文斷詞

import jieba

s = jieba.cut("Jieba中文斷詞所使用的演算法為何?", cut_all = ___)
print("【___模式】", "/ ".join(s))

#【全模式】 Jieba/ 中文/ 斷/ 詞/ 所/ 使用/ 的/ 演算/ 演算法/ 算法/ 為/ 何/ ?
#【精確模式】 Jieba/ 中文/ 斷詞/ 所/ 使用/ 的/ 演算法/ 為何/ ?

實作 - Jieba 中文斷詞

  • 精確模式(False)
    • ​Default
    • 精確地切開句子,適合文本分析

  • 全模式(True)

    • 把句子中所有可以成詞的都掃描出來。

cut_all (分詞模式)

安裝 Wordcloud & imread

$ python
Python 3.7.0 (Jun 27 2018) [MSC v.1914 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>>

$ pip install C:\Users\pcsh1\Downloads\wordcloud-1.5.0-cp37-cp37m-win32.whl
$ pip install C:\Users\pcsh1\Downloads\imread-0.7.1-cp37-cp37m-win32.whl

實作 - 生成WordCloud

from wordcloud import WordCloud, STOPWORDS

chi_font = 'NotoSerifCJKtc-SemiBold.otf' #中文字型

wordcloud = WordCloud(font_path=chi_font, background_color="black", \
                      width=1000, height=860, max_words=100, \
                      stopwords=STOPWORDS.add("使用")).generate(wl_space_split)

# font_path: 若為中文,則需引入中文字型(.TTF)
# max_words: 最大分詞數量
# stopwords: 停用詞

實作 - 生成WordCloud

生成文字雲

import matplotlib.pyplot as plt

plt.imshow(wordcloud)    #繪製圖片
plt.axis("off")          #不顯示尺規座標
plt.show()               #顯示圖片
wordcloud.to_file('testpic.png') 

實作 - 生成WordCloud

顯示文字雲圖片

自動存成圖片檔

import jieba
from wordcloud import WordCloud, STOPWORDS
from imread import imread

# 讀取文本內容
content = open('corpus.txt', 'r', encoding = 'utf-8').read()

wordlist_after_jieba = jieba.cut(content, cut_all = False)
wl_space_split = "\\".join(wordlist_after_jieba)

chi_font = 'NotoSerifCJKtc-SemiBold.otf' #中文字型
wordcloud = WordCloud(font_path=chi_font, background_color = "white", \
                      width=300, height=250, max_words=500, \
                      mask=imread('cat.png')).generate(wl_space_split)

wordcloud.to_file('testpic.png')

實作 - 生成WordCloud

更換背景圖片遮罩

from ckiptagger import WS
from wordcloud import WordCloud, STOPWORDS
from imread import imread

data_utils.download_data_gdown("./")
ws = WS("./data")

content = [open('corpus.txt', 'r', encoding = 'utf-8').read()]

word_sentence_list = ws(content)
print(word_sentence_list)

wl_space_split = "\\".join(word_sentence_list[0])

chi_font = 'NotoSerifCJKtc-SemiBold.otf' #中文字型
wordcloud = WordCloud(font_path=chi_font, background_color = "yellow", \
                      width=300, height=250, max_words=500, \
                      mask=imread('cat.png')).generate(wl_space_split)

wordcloud.to_file('testpic.png')

實作 - 生成WordCloud

補充:使用 ckiptagger 斷詞

Reference

Thanks for listening.

用Python畫出炫酷文字雲

By BessyHuang

用Python畫出炫酷文字雲

Python - WordCloud

  • 741