我們將用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日記者會.txt、2月4日記者會.txt和2月5日記者會.txt。
# 數據地址(此處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();
對于中文詞云,在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);
python詞云圖怎么做、這里,我們需要注意兩個問題:
為了解決第一個問題,我們需要給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月4日和2月5日國家衛健委記者會實錄詞云圖片,如下:
和
python處理word。實際上,通過對上述三天內容的詞云展示,我們可以顯然看出來,2月3日的重心在于公布疫情現狀和穩定輿論情緒,2月4日的重心在于對現有病人的救治,2月5日的重心在于物資問題。
以上僅僅是非常粗淺的應用,分析和結論也僅僅是淺嘗輒止,希望后面有更好的應用。
關于wordcloud函數各個參數的解釋,可以去看https://blog.csdn.net/diao49908/article/details/101651729,里面內容非常詳細~
版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。
工作时间:8:00-18:00
客服电话
电子邮件
admin@qq.com
扫码二维码
获取最新动态