利用Python與WordCloud繪製詞雲(內附讓字體清晰的祕笈)

環境及模塊:

Win7 64位

Python 3.6.4

WordCloud 1.5.0

Pillow 5.0.0

Jieba 0.39

目標:

繪製安徽省2018年某些科技項目的詞雲,直觀展示熱點。

思路:

先提取項目的名稱,再用Jieba分詞後提取詞彙;過濾掉“研發”、“系列”等無意義的詞;最後用WordCloud 繪製詞雲。

擴展:

詞雲默認是矩形的,本代碼採用圖片作為蒙版,產生異形詞雲圖。這裡用的圖片是安徽省地圖。

秘笈:

用網上的常規方法繪製的詞雲,字體有點模糊,秘笈在最後點明。

正式開始,Show you the code

利用Python與WordCloud繪製詞雲(內附讓字體清晰的秘笈)

 1 import numpy as np
2 from PIL import Image
3 import re
4 import jieba
5 from wordcloud import WordCloud,ImageColorGenerator,STOPWORDS
6 import matplotlib.pyplot as plt
7 # http://www.cnblogs.com/hatemath/
8 # 打開存放項目名稱的txt文件
9 with open('content.txt','r',encoding='utf-8') as f:
10 word= (f.read())
11 f.close()
12
13 # 圖片模板和字體
14 image=np.array(Image.open('ditu.jpg'))
15 font=r'C:\\Windows\\fonts\\msyh.ttf'
16
17 # 去掉英文,保留中文
18 resultword=re.sub("[A-Za-z0-9\[\`\~\!\@\#\$\^\&\*\(\)\=\|\{\}\'\:\;\'\,\[\]\.\\/\?\~\。\@\#\\\&\*\%]", "",word)
19 wordlist_after_jieba = jieba.cut(resultword)
20 wl_space_split = " ".join(wordlist_after_jieba)
21
22 # 設置停用詞
23 sw = set(STOPWORDS)
24 sw.add("研發")
25 sw.add("系列")
26 sw.add("這裡不多寫了,根據自己情況添加")
27
28 # 關鍵一步
29 my_wordcloud = WordCloud(scale=4,font_path=font,mask=image,stopwords=sw,background_color='white',
30 max_words = 100,max_font_size = 60,random_state=20).generate(wl_space_split)
31
32 #顯示生成的詞雲
33 plt.imshow(my_wordcloud)
34 plt.axis("off")
35 plt.show()
36
37 #保存生成的圖片
38 my_wordcloud.to_file('result.jpg')
利用Python與WordCloud繪製詞雲(內附讓字體清晰的秘笈)

其中 ditu.jpg 為安徽省輪廓圖片:

利用Python與WordCloud繪製詞雲(內附讓字體清晰的秘笈)

運行結果:

利用Python與WordCloud繪製詞雲(內附讓字體清晰的秘笈)

可以看到,智能設備、施工工法、系統平臺、電纜、機器人等都是出現較多的詞彙。

最後是秘笈揭曉時間:

為什麼我這張圖如此清晰?打開原圖可以看到,這圖的分辨率是1800*2500。你用網上的大多數代碼,最後生成的圖,尺寸很小,上面字跡邊緣模糊。

關鍵在於調用WordCloud時的一個參數,回放一下代碼:

1 # 關鍵一步
2 my_wordcloud = WordCloud(scale=4,font_path=font,mask=image,stopwords=sw,background_color='white',
3 max_words = 100,max_font_size = 60,random_state=20).generate(wl_space_split)

第一個參數我寫的是 scale=4,這個數值越大,產生的圖片分辨率越高,字跡越清晰。你可以調到64試試,我希望你的電腦足夠快 /笑哭


分享到:


相關文章: