天天看點

金庸《鹿鼎記》詞雲圖的繪制

目錄

  ​​1、jieba.cut()和jieba.cut_for_search()的使用說明​​​   ​​2、jieba.lcut()的使用說明​​   ​​3、jieba.add_word()的用法:動态修改詞典​​   ​​4、jieba.load_userdict():動态修改詞典集)​​   ​​5、wordcoloud庫的使用說明​​   ​​6、繪制鹿鼎記的詞雲圖(未去掉停用詞)​​   ​​7、繪制鹿鼎記的詞雲圖(去掉停用詞)​​   ​​8、如何針對excel中的某一列繪制詞雲圖呢?​​

1、jieba.cut()和jieba.cut_for_search()的使用說明

說明:如果需要本文的資料集,可以留言說明。覺得本文對您有幫助,可以關注一下這個部落格,精彩搶先看。

1)導入相關庫
import numpy as np
import pandas as pd
import jieba
from wordcloud import WordCloud
import matplotlib.pyplot as plt
from imageio import imread

import warnings
warnings.filterwarnings("ignore")      
2)示範如下
sentence = "今天我來到北京清華大學"

# 預設是精确模式,相當于使用了cut_all=False這個參數
list(jieba.cut(sentence))
list(jieba.cut(sentence,cut_all=False))

# 全模式:使用了參數cut_all=True
list(jieba.cut(sentence,cut_all=True))

# 搜尋引擎模式:使用的是cut_for_search()方法
list(jieba.cut_for_search(sentence))      

結果如下:

金庸《鹿鼎記》詞雲圖的繪制

2、jieba.lcut()的使用說明

1)jieba.lcut()與jieba.cut()方法的差別
sentence = "今天我來到北京清華大學"

x = jieba.cut(sentence)
display(type(x))
list(jieba.lcut(sentence))

y = jieba.lcut(sentence)
display(type(y))      

結果如下:

金庸《鹿鼎記》詞雲圖的繪制

  根據結果展示cut()方法生成的是一個generator(生成器),但是lcut()方法生成的結果是一個list清單。

  當文本過大的時候,傳回結果如果是一個生成器,當我們疊代生成器中的元素的時候,整個文本不會一次性加載到記憶體中的。我們知道,python是基于記憶體計算的,如果一下子加載到記憶體中的東西過大,會造成記憶體溢出的錯誤。

  而lcut()方法就是這樣,當我們使用這個方法切分文本的時候,會一次性傳回一個清單,這個清單會一次性加載到記憶體中,當文本很大的時候,電腦會變得很卡。

  

2)jieba.lcut()的示範說明
sentence = "今天我來到北京清華大學"

jieba.lcut(sentence)
jieba.lcut(sentence,cut_all=True)      

結果如下:

金庸《鹿鼎記》詞雲圖的繪制

3、jieba.add_word()的用法:動态修改詞典

sentence = "湖北廣水第三條街,有一條狗"

list(jieba.cut(sentence))      

結果如下:

金庸《鹿鼎記》詞雲圖的繪制

  針對上述切分結果,如果我們想把“湖北廣水”和“第三條街”都當成一個完整詞,而不切分開,怎麼辦呢?

  此時,就需要借助add_word()方法,動态修改詞典。

sentence = "湖北廣水第三條街,有一條狗"

jieba.add_word("湖北廣水")
jieba.add_word("有一條狗")

list(jieba.cut(sentence))      

結果如下:

金庸《鹿鼎記》詞雲圖的繪制

4、jieba.load_userdict():動态修改詞典集

  jieba.add_word()方法,隻能一個個動态添加某個詞語。假如我們需要動态添加多個詞語的時候,就需要使用jieba.load_userdict()方法。也就是說:将所有的自定義詞語,放到一個文本中,然後使用該方法,一次性動态修改詞典集。

  文本詞典格式必須一個詞占一行;每一行分三部分:詞語、詞頻(可省略)、詞性(可省略),用空格隔開,順序不可颠倒。檔案必須為 UTF-8 編碼。

  詳細使用方法,可以百度。

  

5、wordcoloud庫的使用說明

金庸《鹿鼎記》詞雲圖的繪制

6、繪制鹿鼎記的詞雲圖(未去掉停用詞)

1)什麼是詞雲圖?

  “詞雲”就是對網絡文本中出現頻率較高的“關鍵詞”予以視覺上的突出,形成“關鍵詞雲層”或“關鍵詞渲染”,進而過濾掉大量的文本資訊,使浏覽網頁者隻要一眼掃過文本就可以領略文本的主旨。某個詞的頻率越高,那麼字型就越大。

2)詞雲圖的繪制步驟(沒有去掉停用詞)

① 讀取檔案,并使用lcut()方法進行分詞

with open(r"G:\6Tipdm\wordcloud\data\鹿鼎記.txt",encoding="utf-8") as f:
    txt = f.read()
    
txt = txt.split()
display(txt[:5])

data_cut = [jieba.lcut(x) for x in txt]
display(data_cut[:5])      

結果如下:

金庸《鹿鼎記》詞雲圖的繪制

② 詞頻統計

all_words = []
for i in data_cut:
    all_words.extend(i)

word_count = pd.Series(all_words).value_counts()
display(word_count[:10])      

結果如下:

金庸《鹿鼎記》詞雲圖的繪制

③ 繪制詞雲圖

# 1、讀取背景圖檔
back_picture = imread(r"G:\6Tipdm\wordcloud\alice_color.png")

# 2、設定詞雲參數
wc = WordCloud(font_path="G:\\6Tipdm\\wordcloud\\simhei.ttf",
               background_color="white",
               max_words=2000,
               mask=back_picture,
               max_font_size=200,
               random_state=42
              )
wc2 = wc.fit_words(word_count)

# 3、繪制詞雲圖
plt.figure(figsize=(16,8))
plt.imshow(wc2)
plt.axis("off")
plt.show()
wc.to_file("ciyun.png")      

結果展示:

金庸《鹿鼎記》詞雲圖的繪制

7、去掉停用詞後,繪制詞雲圖

1)什麼是停用詞?

  “停用詞”指的是文本中出現頻率很高,但實際意義又不大的詞,像語氣助詞、副詞、介詞、連詞等,通常自身并無明确意義,隻有将其放入一個完整的句子中才有一定作用的詞語。如常見的“的”、“在”、“和”、“接着”之類。還有一些符号,像 “,”,“!”等,也都沒有實在意義。是以,在進行詞頻統計的時候,可以将這些詞語事先剔除掉,在進行詞雲圖的繪制。

2)詳細步驟如下

① 導入相關庫

import numpy as np
import pandas as pd
import jieba
from wordcloud import WordCloud
import matplotlib.pyplot as plt
from imageio import imread

import warnings
warnings.filterwarnings("ignore")      

② 讀取文本檔案,并使用lcut()方法進行分詞

with open(r"G:\6Tipdm\wordcloud\data\鹿鼎記.txt",encoding="utf-8") as f:
    txt = f.read()
    
txt = txt.split()
display(txt[:5])

data_cut = [jieba.lcut(x) for x in txt]
display(data_cut[:5])      

結果如下:

金庸《鹿鼎記》詞雲圖的繪制

③ 讀取停用詞

with open(r"G:\6Tipdm\wordcloud\data\stoplist.txt",encoding="utf-8") as f:
    stop = f.read()
    
stop = stop.split()
stop = [" ","道","說道","說"] + stop
display(stop[:5])      

結果如下:

金庸《鹿鼎記》詞雲圖的繪制

④ 去掉停用詞之後的最終詞

s_data_cut = pd.Series(data_cut)
all_words_after = s_data_cut.apply(lambda x:[i for i in x if i not in stop])
display(all_words_after[:5])      

結果如下:

金庸《鹿鼎記》詞雲圖的繪制

⑤ 詞頻統計

all_words = []
for i in all_words_after:
    all_words.extend(i)
    
word_count = pd.Series(all_words).value_counts()
display(word_count[:10])      

結果如下:

金庸《鹿鼎記》詞雲圖的繪制

⑥ 繪制詞雲圖

# 1、讀取背景圖檔
back_picture = imread(r"G:\6Tipdm\wordcloud\alice_color.png")

# 2、設定詞雲參數
wc = WordCloud(font_path="G:\\6Tipdm\\wordcloud\\simhei.ttf",
               background_color="white",
               max_words=2000,
               mask=back_picture,
               max_font_size=200,
               random_state=42
              )
wc2 = wc.fit_words(word_count)

# 3、繪制詞雲圖
plt.figure(figsize=(16,8))
plt.imshow(wc2)
plt.axis("off")
plt.show()
wc.to_file("ciyun.png")      

結果展示:

金庸《鹿鼎記》詞雲圖的繪制
3)更換繪圖背景,繪制中國地圖詞雲圖
# 1、讀取背景圖檔
back_picture = imread(r"G:\6Tipdm\wordcloud\china.png")

# 2、設定詞雲參數
wc = WordCloud(font_path="G:\\6Tipdm\\wordcloud\\simhei.ttf",
               background_color="white",
               max_words=2000,
               mask=back_picture,
               max_font_size=200,
               random_state=42
              )
wc2 = wc.fit_words(word_count)

plt.figure(figsize=(16,8))
plt.imshow(wc2)
plt.axis("off")
plt.show()
wc.to_file("ciyun.png")      
金庸《鹿鼎記》詞雲圖的繪制

8、如何針對excel中的某一列繪制詞雲圖呢?

1)相關說明

  其實整個繪制詞雲圖的步驟,還是和上述繪制詞雲圖的步驟一摸一樣。唯一不同的是,上面用于繪制詞雲圖的檔案,是一個txt文本檔案。但是這裡用于繪制詞雲圖的檔案,是一個excel檔案,并且還是針對excel中的某一列内容,進行詞雲圖的繪制。

  我們隻需要将excel檔案中的評論列,儲存成txt文本檔案後,其餘步驟按照上述進行,即可。

2)将excel檔案的評論列,儲存成txt文本檔案
df = pd.read_excel(r"G:\6Tipdm\file_read_write\df.xlsx")
display(df)

f = open(r"G:\6Tipdm\file_read_write\comment.txt","a+",encoding="utf-8")
for i in range(df.shape[0]):
    f.write(df["評論"][i])
    f.write("\n")
f.close()      

結果如下:

金庸《鹿鼎記》詞雲圖的繪制