1. 程式人生 > >利用Python將已有TXT文件生成中文詞雲

利用Python將已有TXT文件生成中文詞雲

Python學習心得之一

近期剛上手學習Python,在學習完一些基礎教程後,開始動手做一些小專案。之後也會不定期更新一些學習心得……

準備階段

本人的開發環境採用Python2.7+cmd命令視窗的形式,安裝方法可以參考網上一些教程。

操作階段

生成詞雲需要用到一些Python擴充套件包,最好採用命令視窗pip的方式下載,而在此之前,需要在網上下載pip安裝好(此處網上也有參考教程)
然後在命令列視窗敲擊如下程式碼:

pip install matplotlib

下載完成後再依次下載wordcloud包和jieba包
附jieba包下載成功圖:

下載成功圖

現在我們可以開始敲程式碼了

前面執行的都還順利,包括建立TXT文字,讀取內容,進行中文分詞
但是執行到如下程式碼的時候出現了問題

from wordcloud import WordCloud 
wordcloud = WordCloud().generate(mytext) 
%pylab inline 
import matplotlib.pyplot as plt 
plt.imshow(wordcloud, interpolation='bilinear' 
plt.axis("off")

此段程式碼裡%pylab inline 執行出錯了,錯誤如下:

執行錯誤

經過查詢資料後發現,這段程式碼可能是隻對IPython開發環境有效。於是便放棄了用這種方式顯示詞雲。

進而參考了第三份資料的詞雲設定程式碼:
python中文詞雲生成

但是在詞雲設定程式碼中:

wc = WordCloud( background_color = 'white',  # 設定背景顏色
                mask = backgroud_Image,      # 設定背景圖片
                max_words = 2000,            # 設定最大現實的字數
                stopwords = STOPWORDS,       # 設定停用詞
                font_path = 'C:/Users/Windows/fonts/simsun.ttf'
, # 設定字型格式,如不設定顯示不了中文 max_font_size = 60, # 設定字型最大值 color_func=None, #設定關鍵字的字型顏色 random_state = 42, # 設定有多少種隨機生成狀態,即有多少種配色方案 ).generate(mytext)

關於font_path的設定,需要保證該路徑中含有中文字型,如果沒有,需要在網上下載相關字型,放入此路徑中。此處我們採用的是simsun.ttf宋體中文字型。

在詞雲顯示程式碼中含有兩種不同的顯示方法:

plt.imshow(wc)  #第一種 直接按設定好的字型顏色 背景形狀來顯示
image_colors = ImageColorGenerator(backgroud_Image)
wc.recolor(color_func = image_colors)
plt.imshow(wc)  #第二種 根據前兩句程式碼 將字型顏色變成了背景圖的顏色
plt.axis('off')
plt.show()

實際上第二種顯示方法使用較多,因為第一種顏色太過花花綠綠
兩種顯示方法圖片有如下區別:

第一種:
直接顯示

第二種:
採用背景圖顏色顯示

原背景圖:
原背景圖

出現的錯誤

1、就是如上所述操作階段的程式碼錯誤

2、在程式碼無誤後,第一種方法顯示出來的圖形沒有按照設定背景圖的形狀來顯示,而是變成了矩形的形狀。

在請教了同學@sunhuan之後,發現原來是我找的背景圖的背景和圖片顏色過於相近,導致機器識別不出來邊緣形狀,在更換相差度高的圖片之後,順利的顯示出了相應形狀的詞雲。

至此,本次生成中文詞雲完成,附完整程式碼如下:

完整程式碼

import matplotlib.pyplot as plt
#import pickle
from wordcloud import WordCloud,STOPWORDS,ImageColorGenerator
import jieba
filename = "jade.txt"
with open(filename) as f:
    mytext = f.read()
mytext = " ".join(jieba.cut(mytext))         #進行中文分詞
backgroud_Image = plt.imread('D:\pycharm\projects\world.jpeg')
wc = WordCloud( background_color = 'white',  # 設定背景顏色
                mask = backgroud_Image,      # 設定背景圖片
                max_words = 2000,            # 設定最大現實的字數
                stopwords = STOPWORDS,       # 設定停用詞
                font_path = 'C:/Users/Windows/fonts/simsun.ttf', # 設定字型格式,如不設定顯示不了中文
                max_font_size = 60,          # 設定字型最大值
                color_func=None,             #設定關鍵字的字型顏色
                random_state = 42,           # 設定有多少種隨機生成狀態,即有多少種配色方案
                ).generate(mytext)
plt.imshow(wc)
image_colors = ImageColorGenerator(backgroud_Image)
wc.recolor(color_func = image_colors)
plt.imshow(wc)
plt.axis('off')
plt.show()