用Python畫出
炫酷文字雲
Date: Jun. 2nd, 2019
Lecturer: Chia
OUTLINE
- 簡介文字雲 (WordCloud)
- 實作
- Jieba 中文斷詞
- 生成 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 (分詞模式)
$ 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
- 中文字體下載:Noto Serif CJK TC
生成文字雲
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
- 755