歡迎光臨
每天分享高質量文章

Python畫詞雲圖,其實很簡單!跟小孩子畫畫一樣

來自:戀習Python(微訊號:sldata2017)

 

詞雲圖,也叫文字雲,是對文字中出現頻率較高的“關鍵詞”予以視覺化的展現,詞雲圖過濾掉大量的低頻低質的文字資訊,使得瀏覽者只要一眼掃過文字就可領略文字的主旨。

在談畫詞雲圖時,先說說小學生學畫畫,這樣的場景,你一定不陌生:

小孩開始畫畫的時候,許多家長覺得他們畫的東西什麼都“不像”、“亂七八糟”、“一塌糊塗”。於是他們上書店為孩子買回填色書,這類印有動物,風景的輪廓線,孩子們線上內填上顏色的填色書,在市場上很常見,買回後讓小孩規規矩矩地塗色,看到有點像樣了,爸爸媽媽們才感覺到欣慰。

總結起來,就是三大步:準備原材料(五顏六色的畫筆)、選定一個填色書(需要有形狀輪廓等)、最後開始填色。

用Python畫詞雲圖其實也是這三大步驟:

1、準備原材料

準備好一份自己需要分析的文字材料,今天戀習Python選取的是,1月25日,習近平在中共中央政治局第十二次集體學習時,關於推動媒體融合向縱深發展的講話。

在這裡,我們主要會用到Python庫jieba,jieba就是這樣一個非常好用的中文工具,是以分詞起家的,但是功能比分詞要強大很多。

jieba.cut傳回的結構都是一個可迭代的 generator,可以使用 for 迴圈來獲得分詞後得到的每一個詞語(unicode)。

jieba.cut 方法接受三個輸入引數:

  • 需要分詞的字串

  • cut_all 引數用來控制是否採用全樣式,一般情況下,cut_all為False

  • HMM 引數用來控制是否使用 HMM 模型

import jieba

list0 = jieba.cut('我原來是一名Java工程師,後來喜歡上了Python語言', cut_all=True)
print("全樣式:",list(list0))

list1 = jieba.cut('我原來是一名Java工程師,後來喜歡上了Python語言', cut_all=False)
print("精準樣式:",list(list1))

###輸出結果:
全樣式: ['我''原來''是''一名''Java''工程''工程師''''''後來''喜歡''上''了''Python''語言']
精準樣式: ['我''原來''是''一名''Java''工程師'',''後來''喜歡''上''了''Python''語言']

同時,獲得到文字時,我們需要對文字進行文字預處理(刪除掉我們不想要的詞語以及符號,如同剔除掉不需要的畫筆)、文字分詞以及詞頻統計(只獲取我們希望展示的詞語,如同保留下我們的畫筆)

詳細程式碼如下:


data_txt = open(r"E:\project\wordcloud\xinmeiti.txt",'r',encoding='utf-8').read()

#文字預處理
pattern = re.compile(u'\t|\n|\.|-|:|;|\)|\(|\?|"')
data_txt = re.sub(pattern, '', data_txt)

#文字分詞
cut_txt = jieba.cut(data_txt)
object_list=[]
remove_words = [u"的","習近平",u'對',u'等',u'能',u'都',u'。',u' ',u'、',u'中',u'在',u'了',u',',u'“',u'”',u'一個',u'是',u'人民日報']

#詞頻統計
for word in cut_txt:
    if word not in remove_words:
        object_list.append(word)

word_counts = collections.Counter(object_list)

2、選定填色書

關於詞雲圖最後的形狀輪廓,我們將選取寵物豬作為展示,如下圖:

這裡主要說說Python中wordcloud的基本使用,wordcloud把詞雲當作一個物件,它可以將文字中詞語出現的頻率作為一個引數繪製詞雲,而詞雲的大小、顏色、形狀等都是可以設定的。

WordCloud方法的引數如下:

width:指定詞雲物件生成的圖片的寬度(預設為200px)

height:指定詞雲物件生成的圖片的高度(預設為400px)

min_font_size:指定詞雲中字型最小字號,預設為4

max_font_size:指定詞雲中字型最大字號

font_step:指定詞雲中字型之間的間隔,預設為1

font_path:指定字型檔案路徑

max_words:指定詞雲中能顯示的最多單詞數,預設為200

stop_words:指定在詞雲中不顯示的單詞串列

background_color:指定詞雲圖片的背景顏色,預設為黑色

mask:定義詞頻背景

說明一下:如果設定了mask引數,那麼width、height引數將無效

word_cloud 生成詞雲有兩個方法。from text 和 from frequencies 。即文字生成和頻率生成,每一個都有對應的函式可以使用,如下:

  • wd.generate(txt)   向WordCloud 物件w中載入文字txt

  • wd.generate_from_frequencies(word_counts)  向WordCloud 物件wd中載入詞語頻率

詳細程式碼如下:

#定義詞頻背景
background_image = np.array(Image.open(path_image))
font_path="E:\project\wordcloud\simfang.ttf"
wd = WordCloud(
    font_path=font_path,  #設定字型格式,不然會亂碼
    background_color="white",  #設定背景顏色
    mask=background_image   #設定背景圖
).generate_from_frequencies(word_counts)

#儲存詞雲圖
wd.to_file('zhu.png')
#顯示詞雲圖
plt.imshow(wd,interpolation="bilinear")
plt.axis("off")
plt.show()

結果圖如下:

由上圖可看出,作為一個主流新媒體平臺,我們要為人民發聲,融合新技術,傳播正確的政治輿論。

    贊(0)

    分享創造快樂