
一、引言目前中文文本情感分析主要分為三個類型,第一個是由情感詞典和句法結(jié)構(gòu)來做的、第二個是根據(jù)機(jī)器學(xué)習(xí)來做的(Bayes、SVM等)、第三個是用深度學(xué)習(xí)的方法來做的(例如LSTM、CNN、LSTM CNN、BERT CNN等) 。
這三種方法中,第二種和第三種方法都需要人工標(biāo)注大量的數(shù)據(jù),然后做有監(jiān)督的訓(xùn)練 。只有第一種不需要人工標(biāo)注,也不需要訓(xùn)練 。
接下來,我們會介紹下第一種方法的算法邏輯,以及如何實(shí)踐 。
二、情感字典除了分詞詞典和停用詞詞典外 , 一共還包含9個詞典:
1、否定詞:not.txt
2、正面情感詞:positive.txt
3、負(fù)面情感詞:negative.txt
4、程度副詞:
- most.txt
- very.txt
- more.txt
- ish.txt
- insufficiently.txt
- over.txt
- inverse.txt
三、算法流程設(shè)計(jì)
- 算法邏輯
classSentimentAnalysis():"""SentimentAnalysis with some dictionarys"""defsentiment_score_list(self,dataset):seg_sentence=tool.sentence_split_regex(dataset)count1,count2=[],[]forsentence in seg_sentence:words=jieba.lcut(sentence, cut_all=False)i=0a=0forword in words:"""poscount積極詞的第一次分值;poscount2積極反轉(zhuǎn)后的分值;poscount3積極詞的最后分值(包括嘆號的分值)"""poscount,negcount,poscount2,negcount2,poscount3,negcount3=0,0,0,0,0,0ifword in hp.posdict :ifword in [好,真,實(shí)在] and words[min(i 1,len(words)-1)] in hp.pos_neg_dictand words[min(i 1,len(words)-1)] != word:continueelse:poscount =1c=0forw in words[a:i]:掃描情感詞前的程度詞ifw in hp.mostdict:poscount*= 4elifw in hp.verydict:poscount*= 3elifw in hp.moredict:poscount*= 2elifw in hp.ishdict:poscount*= 0.5elifw in hp.insufficientlydict:poscount*= -0.3elifw in hp.overdict:poscount*= -0.5elifw in hp.inversedict:c =1else:poscount*= 1iftool.is_odd(c) == odd:掃描情感詞前的否定詞數(shù)poscount*= -1.0poscount2 = poscountposcount=0poscount3=poscountposcount2poscount3poscount2=0else:poscount3=poscountposcount2poscount3poscount=0a=i 1elifword in hp.negdict:消極情感的分析,與上面一致ifword in [好,真,實(shí)在] and words[min(i 1,len(words)-1)] in hp.pos_neg_dict and words[min(i 1,len(words)-1)] != word:continueelse:negcount = 1d=0forw in words[a:i]:ifw in hp.mostdict:negcount*= 4elifw in hp.verydict:negcount*= 3elifw in hp.moredict:negcount*= 2elifw in hp.ishdict:negcount*= 0.5elifw in hp.insufficientlydict:negcount*= -0.3elifw in hp.overdict:negcount*= -0.5elifw in hp.inversedict:d = 1else:negcount*= 1iftool.is_odd(d) == odd:negcount*= -1.0negcount2 = negcountnegcount=0negcount3=negcountnegcount2negcount3negcount2=0else:negcount3=negcountnegcount2negcount3negcount=0a=i1i = 1pos_count=poscount3neg_count=negcount3count1.append([pos_count,neg_count])ifwords[-1] in [!,!]: 掃描感嘆號前的情感詞,發(fā)現(xiàn)后權(quán)值*2count1=[[j*2 for j in c] for c in count1]forw_im in [但是,但]:ifw_im in words :掃描但是后面的情感詞,發(fā)現(xiàn)后權(quán)值*5ind=words.index(w_im)count1_head=count1[:ind]count1_tail=count1[ind:]count1_tail_new=[[j*5 for j in c] for c in count1_tail]count1=[]count1.extend(count1_head)count1.extend(count1_tail_new)breakifwords[-1] in [?,?]: 掃描是否有問好,發(fā)現(xiàn)后為負(fù)面count1=[[0,2]]count2.append(count1)count1=[]returncount2四、舉例分析例子:我特別喜歡武漢這個城市!因?yàn)槲錆h有非常多好看的景點(diǎn) 。但是,我不喜歡武漢的天氣 , 因?yàn)槲錆h的天氣有點(diǎn)差,熱的時候讓人感覺不爽 。1、 情感詞分為 2 種,一種是正面的,另外一種是負(fù)面的 。
要分析一句話是正面的還是負(fù)面的 , 首先需要找出句子里面的情感詞,然后再找出程度副詞和否定詞等 。
正面的情感詞比如:好 , 孝順,高性能,一心一意等 。負(fù)面情感詞比如:差,郁悶,小心眼,一毛不拔等 。出現(xiàn)一個積極詞就 1 , 出現(xiàn)一個消極詞就-1 。在這句話里面,有好看和喜歡兩個正面情感詞 , 差和不爽兩個負(fù)面情感詞 。
cc是什么車?cc是什么牌子cc是一汽大眾品牌旗下旗艦轎車車型 。大眾CC被譽(yù)為是最美大眾車 , 將轎車的穩(wěn)定性與跑車的靈敏度結(jié)合 。目前在國內(nèi)同時提供轎車和獵裝車 。
2、 情感詞 喜歡、好看和‘差前面都有一個程度副詞 。極好就比較好和好的情感更強(qiáng)烈,太差也比有點(diǎn)差的情感強(qiáng)一些 。所以需要在找到情感詞后往前找一下有沒有程度副詞,**在這里不同的程度副詞有不同的權(quán)重** 。程度詞我們分為 6 種,分別為:most,very,more,ish,insufficient 和 over 通過測試計(jì)算,給上面 6 種情感詞的打分分別為 4,3 , 2,0.5,-0.3 和-0.5 。
3、我特別喜歡武漢這個城市后面有感嘆號,感嘆號意味著情感強(qiáng)烈 。因此發(fā)現(xiàn)感嘆號可以為情 感值 2.
4、 否定詞 在找到情感詞的時候,需要往前找否定詞 。比如不 , 不能這些詞 。而且還要數(shù)這些否 定詞出現(xiàn)的次數(shù),如果是單數(shù),情感分值就*-1,但如果是偶數(shù),那情感就沒有反轉(zhuǎn),還 是1 。在這句話里面,可以看出喜歡前面只有一個不,所以喜歡的情感值應(yīng)該反 轉(zhuǎn),-1 。
5、 正面和負(fù)面需要分別獨(dú)立計(jì)算 , 很明顯就可以看出,這句話里面有褒有貶,不能用一個分值來表示它的情感傾向 。而且這個權(quán)值的設(shè)置也會影響最終的情感分值,敏感度太高了 。因此對這句話的最終的正確的處理,是得出這句話的一個正面分值,一個負(fù)面分值(這樣消極分值也是正數(shù), 無需使用負(fù)數(shù)了) 。
6、 以分句的情感為基?。?加權(quán)求和,從而得到一條評論的情感分值 。
【基于情感詞典的文本情感分析代碼 基于情感詞典】這條例子評論有五個分句,因此其結(jié)構(gòu)如下([正面分值, 負(fù)面分值]): 下面是對每個分句的打分: [正面分值, 負(fù)面分值]
① 我 特別 喜歡 武漢這個城市 ! [正面分值, 負(fù)面分值] : [3*1 2,0]
② 因?yàn)槲錆h有 非常 多 好看 的景點(diǎn) 。[正面分值, 負(fù)面分值] : [4*1,0]
③ 但是 , [正面分值, 負(fù)面分值] : [0,0]
④ 我 不 喜歡 武漢的天氣 , [正面分值, 負(fù)面分值] : [-1*1,0]
⑤ 因?yàn)槲錆h的天氣 有點(diǎn) 差,[正面分值, 負(fù)面分值] : [0,0.5*1]
⑥ 熱的時候讓人感覺 不爽 。[正面分值, 負(fù)面分值] : [0,1]
最后,這句話的得分為: [3*1 2,0][4*1,0][0,0][-1*1,0][0,0.5*1][0,1] = [8,1.5],即為: [正面分值, 負(fù)面分值] = [8,1.5] 。
因?yàn)?8>1.5,所以整句話的情感判斷為正面 。
撲救時要先救人后救物,先重點(diǎn)后一般,先斷電后救火 , 并注意順風(fēng)救災(zāi),特別是野外火場 。滅火時一般就地取材,如用水、砂、土等滅火器材,特別要設(shè)法控制火勢蔓延 。
五、總結(jié)如果我們僅僅使用情感詞典的方法,準(zhǔn)確率就可以達(dá)到 73%左右 。這種方法比較通用,不需要訓(xùn)練,對于不同類型的數(shù)據(jù)都可以進(jìn)行情感分析 。唯一的缺點(diǎn)就是準(zhǔn)確率不是非常高 。
六、Github代碼鏈接:https://github.com/hellonlp/sentiment_analysis_dict
一只投胎豬的心路歷程:一只豬死后到陰間判官處報(bào)到,判官說道:去吧,下世還做豬 。說完就要在生死簿上落下判官筆 , 沒想到這只豬卻大聲嚷道:不公平?。〔還槳 。∨泄俸蓯薔? ,說道:怎么不公平呢?你說說看 。豬道:判官大人,世界太不公平了,我們豬得不到人們 的喜歡,最可恨的...
猜你喜歡
- 中文情感分析詞典 基于詞典情感分析
- 綜藝情感節(jié)目有哪些 情感綜藝有哪些
- 女性情感話題有哪些 女性情感話題
- 夫妻情感綜藝有哪些 情感綜藝有哪些
- 宮怨詩表達(dá)的情感有哪些 表達(dá)的情感有哪些
- 古詩所表達(dá)的情感有哪些 表達(dá)的情感有哪些
- 基于情感詞典的情感分析結(jié)果評估 基于情感詞典
- 女性情感話題文案 女性情感話題
- 大學(xué)生情緒情感有哪些 情緒情感有哪些
- 邊塞詩表達(dá)的情感有哪些 表達(dá)的情感有哪些
