python詞云圖怎么做,用python實現中文詞云完整流程(wordcloud、jieba)

 2023-10-21 阅读 32 评论 0

摘要:我們將用python3的第三方庫wordcloud來做中文詞云。通過對2月3日-2月5日國家衛健委的三天記者會實錄做詞云分析,一定程度上,我們可以得到三天內輿情動向及官方側重點的變化。 # 第三方庫 from wordcloud import WordCloud, ImageColorGenerator import jieba im

我們將用python3的第三方庫wordcloud來做中文詞云。通過對2月3日-2月5日國家衛健委的三天記者會實錄做詞云分析,一定程度上,我們可以得到三天內輿情動向及官方側重點的變化。


# 第三方庫
from wordcloud import WordCloud, ImageColorGenerator
import jieba
import numpy as np
import matplotlib.pyplot as plt
# 第三方庫PIL是圖片處理庫,默認安裝,如果沒有,就需要自己安裝
from PIL import Image 

步驟一:輸入數據

進入國家衛健委官網,分別將2月3日、2月4日和2月5日記者會內容復制粘貼保存為 2月3日記者會.txt2月4日記者會.txt2月5日記者會.txt

  • 需要注意的是,這里txt文件最好用utf-8編碼保存,不然會報出編碼錯誤。
  • 解決方法如下:用記事本打開txt文件,點擊‘另存為’,在最下面有‘編碼’選項,默認為’ANSI’,如果默認,運行程序會報錯,所以需要在‘編碼’選項中選擇‘utf-8’編碼方式,然后保存。用read()函數讀取文件時,需要指明解碼方式 encoding=‘UTF-8’。
# 數據地址(此處filename為.txt文件所在地址)
filename1 = r'F:\開課吧\RS基礎課\2月3日記者會.txt';
filename2 = r'F:\開課吧\RS基礎課\2月4日記者會.txt';
filename3 = r'F:\開課吧\RS基礎課\2月5日記者會.txt';
# 數據加載
with open(filename1, encoding='UTF-8') as f1:data1 = f1.read();
with open(filename2, encoding='UTF-8') as f2:data2 = f2.read();
with open(filename3, encoding='UTF-8') as f3:data3 = f3.read();

步驟二:jieba中文分詞

對于中文詞云,在wordcloud之前,需要用jieba將中文分詞。這是由于wordcloud是針對英語的,如果文本是中文,則可能將一整段句子展示出來,而通常我們僅僅想要知道一個關鍵詞而已。

那么,什么是分詞?很簡單,比如這樣的一句話,‘我現在居住在成都’,通過jieba分詞,結果是‘我’ ‘現在’ ‘居住’ ‘在’ ‘成都’。

分別對data1, data2和data3進行分詞。

# 用jieba分別進行分詞分析
wordList_jieba1 = jieba.cut(data1, cut_all=False);
wordList_jieba2 = jieba.cut(data2, cut_all=False);
wordList_jieba3 = jieba.cut(data3, cut_all=False);
# 鏈接成新文檔
data1 = ','.join(wordList_jieba1);
data2 = ','.join(wordList_jieba2);
data3 = ','.join(wordList_jieba3);

步驟三:wordcloud詞云展示

python詞云圖怎么做、這里,我們需要注意兩個問題:

  • 問題1:wordcloud本來是用來展示英語詞云的,直接用中文,生成圖片或者是大小方框,或者是亂碼;
  • 問題2:解決問題1,即便能生成正常中文詞云,也會發現詞云中展示的都是‘是’ ‘第一’ ‘第二’ ‘好的’之類無關緊要的詞匯。

為了解決第一個問題,我們需要給wordcloud函數傳入合適的中文字體信息。一般計算機字體信息在’C:\Windows\Fonts’文件夾,如圖:
在這里插入圖片描述
選擇任何一個你喜歡的中文字體,右鍵,在屬性里面找到字體名及后綴.ttf。這里,我選擇 隸書,文件名為 SIMLI.ttf。

# 隸書字體
font = r'C:\Windows\Fonts\SIMLI.ttf';

為解決第二個問題,我們引入 停止詞 的概念。停止詞(stopwords)是wordcloud函數的一個選項,通過指定停止詞,wordcloud可以忽略這些停止詞,對其他詞語進行展示。中文停止詞有許多不同的集合,各位可以自行在網上下載使用。

# 設置停止詞
# chineseStopWords.txt是在網上下載的,各位可以按需下載
stopwords_filepath =  r'F:\開課吧\RS基礎課\chineseStopWords.txt';
all_words = []
with open(stopwords_filepath, 'r') as f:all_words = f.readlines()
stopwords = [word.strip() for word in all_words];
# 往往根據具體展示需要,我們還需要自己添加一些停止詞
stopwords.extend(['很多', '情況', '提問', '累計', '發布會', '找到', '回答', '一個', '經歷', '特別', '事情', '楊甫徳', '楊甫徳 ','焦雅輝', '盡量', '來看', '一點', '減少', '包括', '昨天', '謝謝', '請問', '發生', '主持人', '當中', '這部分', '有沒有', '進一步', '更好', '相關', '發布', '發現', '雪峰', '一是', '對待', '五個', '一種', '感到', '很多', '二是', '提到', '剛才', '很快', '來講', '確實', '針對']);

接下來,我們可以直接用wordcloud函數生成詞云。具體代碼為

# 詞云分析
wc1 = WordCloud(font_path=font, stopwords=stopwords).generate(data1);
wc2 = WordCloud(font_path=font, stopwords=stopwords).generate(data2);
wc3 = WordCloud(font_path=font, stopwords=stopwords).generate(data3);
# 詞云展示
plt.imshow(wc1, interpolation='bilinear');
plt.axis('off');
plt.show();
plt.imshow(wc2, interpolation='bilinear');
plt.axis('off');
plt.show();
plt.imshow(wc3, interpolation='bilinear');
plt.axis('off');
plt.show();

比如這樣的
在這里插入圖片描述
到這里,其實詞云已經生成了。但是為了更進一步作出更漂亮的詞云,我們可以將詞云填充到一個圖像里面進行展示。
1、我們在百度圖片里面,挑選一個簡單的圖片,保存,如下
在這里插入圖片描述
2、以data1為例,運行如下代碼

# 我把上圖保存在‘F:\開課吧\RS基礎課’文件夾中
py_mask = np.array(Image.open('F:\開課吧\RS基礎課\mask_for_csdn.jpg'));
# 讀取顏色
img_colors = ImageColorGenerator(py_mask);
# 輸入wordcloud
wc1 = WordCloud(mask = py_mask, font_path=font, stopwords=stopwords, backgroud_color='white');
# 生成詞云
wc1.generate(data1);
# 上色
wc.recolor(color_func=img_colors);
# 展示
plt.imshow(wc1, interpolation='bilinear');
plt.axis('off');
plt.show();

這樣,生成的圖片如下:
2月3日國家衛健委記者會實錄詞云展示
類似的,我們可以生成2月4日和2月5日國家衛健委記者會實錄詞云圖片,如下:
在這里插入圖片描述

在這里插入圖片描述

步驟四:分析和結論

python處理word。實際上,通過對上述三天內容的詞云展示,我們可以顯然看出來,2月3日的重心在于公布疫情現狀和穩定輿論情緒,2月4日的重心在于對現有病人的救治,2月5日的重心在于物資問題。


以上僅僅是非常粗淺的應用,分析和結論也僅僅是淺嘗輒止,希望后面有更好的應用。

關于wordcloud函數各個參數的解釋,可以去看https://blog.csdn.net/diao49908/article/details/101651729,里面內容非常詳細~

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://hbdhgg.com/3/156896.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 匯編語言學習筆記 Inc. 保留所有权利。

底部版权信息