用wordcloud和jieba生成中文詞云

2021-09-13 22:16:24 字數 2819 閱讀 7662

wordcloud是python中乙個非常優秀的第三方詞云展示庫,但是處理中文就不怎麼能勝任,因為中文通常包含著一整句話,儘管在wordcloud裡雖然也有process_text()方法用於把很長的文字做分隔,但這個方法本身是根據英文文字分詞設計的,所以對於中文字的展示必須要配合更適合做中文分詞處理的jieba分詞庫來操作效果更佳,今天就拿這兩個庫配合一起展示下**《三國演義》中,四個字成語中那些出現的頻率最高。

先來看下最終的詞云效果圖,下面就是我們以武將張飛為模板形狀產生的中文詞雲圖,可以很明顯的看到諸如,如之奈何大喝一聲木牛流馬決一死戰都是比較大突出和大的字型,說明頻率最高,也不得不說三國劇情的跌宕起伏和打鬥場面精彩。

下面就是整段處理的**,因為我們的目標是建立基於**《三國演義》裡所有四個字成語的中文詞雲圖,因此我們從邏輯上來說只需要設計兩個函式體。分別是split_four_text()函式用來處理中文分詞功能,和draw_wordcloud函式用於將處理後的中文詞顯示成詞雲,對於整段**提一下幾處重要的**區域。

第13行**處,在配置例項物件wordcloud引數時,我們設定了font_path引數,因為在部分系統環境內顯示中文會出現亂碼,所以強制以定義的中文字型顯示就可以解決這個問題。

第64行**處,由於wordcloud詞云讀取的文字必須以字串或者二進位制形式輸入,否則會報錯typeerror: expected string or bytes-like object的關係,所以我們強制將jieba分詞返回的list型別內容轉換為str型別。

import jieba

import numpy as np

from pathlib import path

from pil import image

from wordcloud import wordcloud, imagecolorgenerator

from matplotlib import pyplot as plt

defsplit_four_text

(text)

:# split_four_text函式用於jieba分詞並分隔為4個字為一組的內容。

words =jieba.cut(text)

# 用counter方法計算單詞頻率數

count = counter(words)

most_count = count.most_common(

) words_list =

for i in most_count:

iflen

(i[0])

==4:0

])return words_list

defdraw_wordcloud

(text, image_mask,):

# draw_wordcloud函式以使用者定義的模板輪廓圖來顯示中文詞云。

sanguo_mask = np.array(image.

open

(image_mask)

) wordcloud = wordcloud(background_color =

'white'

, mask = sanguo_mask,

max_words =

1000

,# 如果不設定中文字型,可能會出現亂碼

font_path =

'/system/library/fonts/stheiti light.ttc'

) wordcloud.generate(text)

image_colors = imagecolorgenerator(sanguo_mask)

plt.figure(figsize =(14

,8))

# 建立左側中文詞雲圖

plt.subplot(

121)

plt.imshow(wordcloud.recolor(color_func = image_colors)

, interpolation =

'bilinear'

) plt.axis(

'off'

)# 建立右側原圖

plt.subplot(

122)

plt.imshow(sanguo_mask, interpolation =

'bilinear'

) plt.axis(

'off'

) plt.show(

)# 讀取檔案內容

text_path = path(

'三國演義.txt'

)with text_path.

open

(encoding =

'gb18030'

)as f:

text_content = f.read(

)# 把檔案內容交給自定義的split_four_text中文分詞函式處理。

sanguo = split_four_text(text = text_content)

# 由於split_four_text函式返回的是乙個list型別,詞云只接收字串或者二進位制形式輸入,

# 所以用str()函式轉換為字串。

draw_wordcloud(text =

str(sanguo)

, image_mask =

'guanyu_template.jpeg'

)

wordcloud和jieba 的學習

wordcloud和jieba的安裝都很簡單 都是pip install 直接安裝就行,但是在學校機房,那個詞云就是安裝完就是報錯,很奇怪,自己的電腦很順利。然後 其實也不是自己寫的 就直接從網上找的例子,自己看了看 感覺能看懂 嘻嘻 好懶 說說重點步驟吧 1 def gettext text 該函...

檔案的使用和wordcloud庫

1.開啟檔案 變數名 open filename 開啟模式 開啟模式 描述 r 唯讀模式,預設值,若檔案不存在,則返回filenotfounderror w 覆蓋寫模式,檔案不存在則建立,存在則完全覆蓋 x 建立寫模式,檔案不存在則建立,存在則返回fileexistserror錯誤 a 追加寫模式,...

wordcloud庫基本介紹和使用方法

1.1 wordcloud庫概述 wordcloud是優秀的詞云展示第三方庫 1.2wordcloud庫的安裝 pip install wordcloud cmd命令列 2.1 wordcloud庫基本是使用 wordcloud庫把詞云當作乙個wordcloud物件 2.2 wordcloud庫常規...