基于微博評(píng)論的文本情感分析與關(guān)鍵詞提取的實(shí)戰(zhàn)案例~
回復(fù)“書籍”即可獲贈(zèng)Python從入門到進(jìn)階共10本電子書
大家好,我是志斌~
上一篇文章基于Scrapy框架的微博評(píng)論爬蟲實(shí)戰(zhàn),志斌給大家介紹了,如何用Scrapy框架,爬取微博評(píng)論的內(nèi)容,接下來就要對(duì)爬取下來的評(píng)論文本進(jìn)行情感分析。
在評(píng)論文本情感分析之前,我們需要將語(yǔ)句通過分詞使其成為詞語(yǔ),然后優(yōu)化分詞結(jié)果,去掉無關(guān)的詞語(yǔ)和字符。,以提高文本情感分析的準(zhǔn)確度。
01
分詞
對(duì)中文句子按照其語(yǔ)義進(jìn)行切割的這類操作,被稱為“分詞”。目前的分詞技術(shù)有兩種,一種是從統(tǒng)計(jì)學(xué)的角度進(jìn)行分詞,另一種是從詞庫(kù)的角度基于TF-IDF算法,來對(duì)語(yǔ)句進(jìn)行分詞。
Python中的Jieba庫(kù)就是利用詞庫(kù)來對(duì)語(yǔ)句進(jìn)行自動(dòng)分詞的,所以志斌就給大家介紹一下如何用Jieba庫(kù)來實(shí)現(xiàn)文本分割。
01
分詞原理
Jieba庫(kù)在安裝時(shí),會(huì)附帶一個(gè)詞庫(kù),這個(gè)詞庫(kù)中包含了日常漢語(yǔ)的詞語(yǔ)和詞性。在分詞時(shí),Jieba庫(kù)會(huì)先基于詞庫(kù)對(duì)文本進(jìn)行匹配,生成文本中的漢字最有可能形成的詞。
然后將這些詞組成一個(gè)DAG,用動(dòng)態(tài)規(guī)劃算法來查找最大的概率路徑,盡可能不將一個(gè)詞拆成單獨(dú)的漢字。
最后,再?gòu)脑~庫(kù)中找出基于詞頻的最大切分組合,把這些組合在文本中找出來,進(jìn)而形成一個(gè)一個(gè)的詞語(yǔ)。
同時(shí)Jieba庫(kù)還使用了HMM模型,用以提高分詞的準(zhǔn)確率,該模型可以對(duì)詞庫(kù)中沒有的詞進(jìn)行分詞。
02
分詞方法
Jieba庫(kù)里有一個(gè)cut函數(shù),它為我們提供了自動(dòng)分詞功能,代碼如下:
import jieba # 分詞
with open('text.txt','r',encoding='utf-8') as f:
read = f.read()
word = jieba.cut(read)
打印一下分詞后的結(jié)果

我們發(fā)現(xiàn),上面的分詞結(jié)果中,有大量的標(biāo)點(diǎn)符號(hào),和一些與情感表達(dá)無關(guān)的詞語(yǔ),為了避免無關(guān)詞語(yǔ)對(duì)情感分析的影響和加快計(jì)算詞語(yǔ)的情感速度,我們就需要對(duì)分詞的結(jié)果進(jìn)行優(yōu)化。
02
優(yōu)化分詞
我們主要從以下兩個(gè)方面來對(duì)分詞結(jié)果進(jìn)行優(yōu)化:1.移除標(biāo)點(diǎn)符號(hào)和換行符;2.刪除與情感表達(dá)無關(guān)的詞。
接下來,我將給大家介紹兩種方法來實(shí)現(xiàn)對(duì)分詞進(jìn)行優(yōu)化。
01
使用停用詞集
停用詞設(shè)置是分詞中常用的一種手段,可以提高分割的準(zhǔn)確度,同時(shí)減少硬件成本、時(shí)間成本。網(wǎng)上有許多的停用詞集,我們可以挑一個(gè)進(jìn)行下載。在文末,志斌會(huì)放自己使用的停用詞集鏈接。代碼如下:
import jieba # 分詞
with open('text.txt','r',encoding='utf-8') as f:
read = f.read()
with open('停用詞表.txt','r',encoding='utf-8') as f:
stop_word = f.read()
word = jieba.cut(read)
words = []
for i in list(word):
if i not in stop_word:
words.append(i)打印一下分詞后的結(jié)果

我們發(fā)現(xiàn)標(biāo)點(diǎn)符號(hào)和與情感表達(dá)無關(guān)的詞都被過濾掉了。
02
根據(jù)詞性提取關(guān)鍵詞
大家知道,每個(gè)詞語(yǔ)都是有著自己的詞性,我們可以通過Jieba庫(kù)提取出來每個(gè)詞的詞性,然后進(jìn)行篩選,保留你需要的詞語(yǔ),代碼如下:
import jieba.posseg as psg
cixing = ()
words = []
for i in psg.cut(read):
cixing = (i.word,i.flag) #詞語(yǔ)和詞性
words.append(cixing)
save = ['a'] #挑選詞性
for i in words:
if i[1] in save:
print(i)
給大家分享一個(gè)漢語(yǔ)詞性表(部分),有更多了解興趣的讀者可以上網(wǎng)搜一下看看。

我們上面是只保留了形容詞,如果大家想保留更多詞性的詞語(yǔ),就在save列表中進(jìn)行添加即可。
03
結(jié)果展示
分詞結(jié)果優(yōu)化過之后,我們就得到了自己想要的結(jié)果。接下來就是對(duì)這些詞來進(jìn)行詞頻展示和情感分析了。
01
高頻詞語(yǔ)展示

由柱狀圖可知,“頭發(fā)”占據(jù)詞頻最高,有231條,其次是詞語(yǔ)“考研”和“圖書館”,兩個(gè)詞語(yǔ)分別有74條和58條。
所以我們這條微博的主要關(guān)鍵詞是“頭發(fā)”、“考研”和“圖書館”。

代碼如下:
from pyecharts.charts import Bar
from pyecharts import options as opts
columns = []
data = []
for k,v in dict(Counter(words).most_common(10)).items():
columns.append(k)
data.append(v)
bar = (
Bar()
.add_xaxis(columns)
.add_yaxis("詞頻", data)
.set_global_opts(title_opts=opts.TitleOpts(title="詞頻top10"))
)
bar.render("詞頻.html")
02
情感分析
在之前跟大家介紹過兩種文本情感分析方法,有興趣的讀者可以看看這篇文章推薦一個(gè)強(qiáng)大的自然語(yǔ)言處理庫(kù)—snownlp。
在本文,我使用的是Snownlp庫(kù)來對(duì)文本進(jìn)行情感分析。
從圖中,我們可以看到,大家的評(píng)論積極態(tài)度的有32%,中等態(tài)度的占60%,消極態(tài)度只占8%,看來大家的心態(tài)還是很平和的。

代碼如下:
from snownlp import SnowNLP
positibe = negtive = middle = 0
for i in words:
pingfen = SnowNLP(i)
if pingfen.sentiments>0.7:
positibe+=1
elif pingfen.sentiments<0.3:
negtive+=1
else:
middle+=1
04
總結(jié)
1. 本文詳細(xì)介紹了如何使用Jieba庫(kù)對(duì)文本進(jìn)行分詞,并使用Snownlp庫(kù)配合對(duì)分詞結(jié)果進(jìn)行語(yǔ)義情感分析。
2. 通過對(duì)用戶評(píng)論的分析,我們可以知道用戶的喜好程度,從而有策略的改進(jìn)。
3. 本文僅供學(xué)習(xí)參考,不做它用。

小伙伴們,快快用實(shí)踐一下吧!如果在學(xué)習(xí)過程中,有遇到任何問題,歡迎加我好友,我拉你進(jìn)Python學(xué)習(xí)交流群共同探討學(xué)習(xí)。
------------------- End -------------------
往期精彩文章推薦:
Py自動(dòng)化辦公—Word文檔替換、Excel表格讀取、Pdf文件生成和Email自動(dòng)郵件發(fā)送實(shí)戰(zhàn)案例
手把手教你用Python腳本調(diào)用 DeepL API Pro 進(jìn)電子書的行進(jìn)行中英文自動(dòng)翻譯
手把手教你用Python批量創(chuàng)建1-12月份的sheet表,每個(gè)表的第一行都有固定3個(gè)列標(biāo)題:A,B,C

歡迎大家點(diǎn)贊,留言,轉(zhuǎn)發(fā),轉(zhuǎn)載,感謝大家的相伴與支持
想加入Python學(xué)習(xí)群請(qǐng)?jiān)诤笈_(tái)回復(fù)【入群】
萬水千山總是情,點(diǎn)個(gè)【在看】行不行
/今日留言主題/
隨便說一兩句吧~~
