【Python】聊天記錄詞云圖

1.安裝Anaconda和pycharm,并完成相關(guān)配置。

參考教程:https://blog.csdn.net/tang_chuanlin/article/details/79793654

配置之后需要在settings界面安裝jieba等相關(guān)包。點(diǎn)擊下圖綠色+圖標(biāo),搜索出包后點(diǎn)擊左下側(cè)安裝即可。但是在安裝wordcloud包時(shí)可能會(huì)出現(xiàn)錯(cuò)誤,解決辦法為手動(dòng)下載whl文件進(jìn)行安裝。

下載界面:https://www.lfd.uci.edu/~gohlke/pythonlibs/#twisted

打開cmd->在Anaconda相關(guān)安裝目錄下找到pip.exe文件將其拖入->空一格輸入“install whl文件的完整安裝路徑”,按下空格鍵安裝完成。

2.詞云圖的實(shí)現(xiàn)

參考教程:https://blog.csdn.net/Tang_Chuanlin/article/details/79862505

3.注意

(1)f_stop = open(path.join(d, stop_name), encoding="utf8")

無法打開文件,將分詞的文件另存為utf8編碼文件格式即可。

(2)停用詞表去掉聊天日期、網(wǎng)名、數(shù)字、鏈接、自動(dòng)回復(fù)語(yǔ)言、系統(tǒng)提示語(yǔ)、文字顯示的表情包。優(yōu)化:如何自動(dòng)去掉文本中的鏈接?

(3)修改詞云的形狀需要在參數(shù)mask內(nèi)設(shè)置

完整代碼如下:


import jieba

from os import path? ? ? ? ? ? ? ? ? ? ? ? ? ? # 獲取文檔的路徑

from PIL import Image

import numpy as np

import matplotlib.pyplot as plt

from wordcloud import WordCloud, ImageColorGenerator

import matplotlib.font_manager as fm


bg = np.array(Image.open("princess.png"))?????? # 背景圖

d = path.dirname(__file__) ? ? ? # 獲取當(dāng)前的項(xiàng)目文件夾的路徑

stop_name = 'stopwords.txt' ? ? # 讀取停用詞表,jieba.add_word("葉文潔")可添加自定義分詞

data_name = "20170520-20180113.txt" ?? # 文本路徑

data = open(path.join(d, data_name), encoding="utf8").read()? # 讀取要分析的文本,讀取格式


def separate(text_data): ? ? ? # 定義函數(shù)用于分詞

? ? word_list = [] ? ? ? ? ? ? ? ? ? ? # 定義一個(gè)空的列表,保存分詞

? ? seg_list = jieba.cut(text_data, cut_all=False)? # false精準(zhǔn)分詞模式,試試True??

? ? list_str = ','.join(seg_list)? ? ? ? ? ? ? # 將分詞用,連接起來

? ? # 打開停用詞表

? ? f_stop = open(path.join(d, stop_name), encoding="utf8")

? ? try:

? ? ? ? f_stop_text = f_stop.read()

? ? finally:

? ? ? ? f_stop.close()? ? ? ? ? ? ? ? ? ? ? ? ? # 關(guān)閉資源

? ? f_stop_seg_list = f_stop_text.split("\n")?????? # 將停用詞格式化,用\n分開,返回一個(gè)列表

? ? # 對(duì)默認(rèn)模式(精準(zhǔn))分詞結(jié)果進(jìn)行遍歷,去除停用詞

? ? for my_word in list_str.split(','):

? ? ? ? if not(my_word in f_stop_seg_list) and not my_word.isdigit() and len(my_word.strip()) > 1:

? ? ? ? ? ? word_list.append(my_word)

? ? return ' '.join(word_list)


result = separate(data)

# 生成詞云圖

wc = WordCloud(

? ? ? ? background_color="white", ? ? # 設(shè)置背景為白色,默認(rèn)為黑色

? ? ? ? mask=bg, ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?? # 設(shè)置詞云形狀

? ? ? ? width=990,? ? ? ? ? ? ? ? ? ? ? ? ? ? ? # 設(shè)置圖片的寬度

? ? ? ? height=440,? ? ? ? ? ? ? ? ? ? ? ? ? ? # 設(shè)置圖片的高度

? ? ? ? margin=10, ? ? ? ? ? ? ? ? ? ? ? ? ? ? # 設(shè)置圖片的邊緣

? ? ? ? max_font_size=50, ? ? ? ? ? ? ? ? # 設(shè)置最大字體

? ? ? ? random_state=30,

? ? ? ? font_path='C:/Windows/Fonts/simfang.ttf'? # 中文處理,用系統(tǒng)自帶的字體

? ? ).generate(result)

my_font = fm.FontProperties(fname='C:/Windows/Fonts/simfang.ttf')? # 為圖片設(shè)置字體

image_colors = ImageColorGenerator(bg) ?? # 產(chǎn)生背景圖片,基于彩色圖像的顏色生成器

plt.imshow(wc, interpolation="bilinear") ? ? # 開始畫圖

plt.axis("off") ?? # 為云圖去掉坐標(biāo)軸

wc.to_file("公主圖案.png") ?? # 保存云圖

4.效果圖

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容