文字雲

      在〈文字雲〉中尚無留言

網路上的垃圾文章那麼多,如果每一篇都一個字一個字的讀,何時才能找到自已想要的文章呢。這時 “文字雲” 就發生作用了,直接顯示每篇文章的重點,就可以大約知道是不是自已所想要的文章。

上面的圖一看,就知道又是廣達在散佈 AI 心電圖的假消息了。

安裝套件

文字雲需安裝的套件如下

pip install jieba wordcloud matplotlib opencv-python

WorldCloud

文字雲是把一篇文章利用結巴演算法斷詞後,統計每個 “單字” 出現的次數,把較常出現的 “單字” 用比較大的字体畫出,較少出現的 “單字” 用比較小的字体畫出,如此就可以讓閱讀者知道該注意那些關鍵字。

請於專案下新增一個文字檔,命名為 wc.txt,並填入長篇文章,或於本站下載 wc.txt

from collections import Counter

import jieba
import pylab as plt
from wordcloud import WordCloud
import numpy as np
import cv2
#載入停用詞 with open('stops.txt','r', encoding='utf-8') as f: stops = set(f.read().split('\n'))
#載入文章
with open("wc.txt",'r', encoding='utf-8') as f: txt=" ".join(f.read().split("\n"))#變成一整串的文字 txt=txt.replace(" ","").replace("/","").replace("\"","")
#載入結巴中文字典 jieba.set_dictionary('dict.txt') terms=[t for t in jieba.cut(txt, cut_all=True) if t not in stops] #print(Counter(terms)) mask =cv2.imdecode(np.fromfile('heart.png',dtype=np.uint8),
cv2.IMREAD_UNCHANGED)
wordcloud=WordCloud(font_path='simsun.ttc', background_color="white", mask=mask) img=wordcloud.generate_from_frequencies(frequencies=Counter(terms)) plt.figure(figsize=(4,4)) #bilinear 雙線性插值法,讓文字不會有鋸齒狀 plt.imshow(img, interpolation="bilinear") plt.axis("off") plt.show()

遮色片

上面的 heart.png 遮色片 (mask),請使用小畫家畫一個心形形狀,填入任何顏色,背景一定要使用白色。遮色片的規則是白色不顯示文字,其它顏色區域挖空,才顯示文字。最後一定要儲存成 .png 檔。

然後在產生 WordCloud 時加入 background_color及 mask參數。

遮色片的圖片如下

結果如下

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *