基于情感詞典的文本情感分析代碼 基于情感詞典


基于情感詞典的文本情感分析代碼 基于情感詞典



一、引言目前中文文本情感分析主要分為三個類型,第一個是由情感詞典和句法結構來做的、第二個是根據機器學習來做的(Bayes、SVM等)、第三個是用深度學習的方法來做的(例如LSTM、CNN、LSTM CNN、BERT CNN等) 。
這三種方法中,第二種和第三種方法都需要人工標注大量的數據,然后做有監督的訓練 。只有第一種不需要人工標注,也不需要訓練 。
接下來,我們會介紹下第一種方法的算法邏輯,以及如何實踐 。
二、情感字典除了分詞詞典和停用詞詞典外 , 一共還包含9個詞典:
1、否定詞:not.txt
2、正面情感詞:positive.txt
3、負面情感詞:negative.txt
4、程度副詞:
  • most.txt
  • very.txt
  • more.txt
  • ish.txt
  • insufficiently.txt
  • over.txt
  • inverse.txt
詞典鏈接:https://github.com/hellonlp/sentiment_analysis_dict/tree/master/dict
三、算法流程設計
  1. 算法邏輯
2. 代碼演示
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積極反轉后的分值;poscount3積極詞的最后分值(包括嘆號的分值)"""poscount,negcount,poscount2,negcount2,poscount3,negcount3=0,0,0,0,0,0ifword in hp.posdict :ifword in [好,真,實在] 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:掃描情感詞前的否定詞數poscount*= -1.0poscount2 = poscountposcount=0poscount3=poscountposcount2poscount3poscount2=0else:poscount3=poscountposcount2poscount3poscount=0a=i 1elifword in hp.negdict:消極情感的分析,與上面一致ifword in [好,真,實在] 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 [!,!]: 掃描感嘆號前的情感詞,發現后權值*2count1=[[j*2 for j in c] for c in count1]forw_im in [但是,但]:ifw_im in words :掃描但是后面的情感詞,發現后權值*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 [?,?]: 掃描是否有問好,發現后為負面count1=[[0,2]]count2.append(count1)count1=[]returncount2四、舉例分析例子:我特別喜歡武漢這個城市!因為武漢有非常多好看的景點 。但是,我不喜歡武漢的天氣 , 因為武漢的天氣有點差,熱的時候讓人感覺不爽 。
1、 情感詞分為 2 種,一種是正面的,另外一種是負面的 。
要分析一句話是正面的還是負面的 , 首先需要找出句子里面的情感詞,然后再找出程度副詞和否定詞等 。
正面的情感詞比如:好 , 孝順,高性能,一心一意等 。負面情感詞比如:差,郁悶,小心眼,一毛不拔等 。出現一個積極詞就 1 , 出現一個消極詞就-1 。在這句話里面,有好看和喜歡兩個正面情感詞 , 差和不爽兩個負面情感詞 。
cc是什么車?cc是什么牌子cc是一汽大眾品牌旗下旗艦轎車車型 。大眾CC被譽為是最美大眾車 , 將轎車的穩定性與跑車的靈敏度結合 。目前在國內同時提供轎車和獵裝車 。
2、 情感詞 喜歡、好看和‘差前面都有一個程度副詞 。極好就比較好和好的情感更強烈,太差也比有點差的情感強一些 。所以需要在找到情感詞后往前找一下有沒有程度副詞,**在這里不同的程度副詞有不同的權重** 。程度詞我們分為 6 種,分別為:most,very,more,ish,insufficient 和 over 通過測試計算,給上面 6 種情感詞的打分分別為 4,3 , 2,0.5,-0.3 和-0.5 。
3、我特別喜歡武漢這個城市后面有感嘆號,感嘆號意味著情感強烈 。因此發現感嘆號可以為情 感值 2.
4、 否定詞 在找到情感詞的時候,需要往前找否定詞 。比如不 , 不能這些詞 。而且還要數這些否 定詞出現的次數,如果是單數,情感分值就*-1,但如果是偶數,那情感就沒有反轉,還 是1 。在這句話里面,可以看出喜歡前面只有一個不,所以喜歡的情感值應該反 轉,-1 。
5、 正面和負面需要分別獨立計算 , 很明顯就可以看出,這句話里面有褒有貶,不能用一個分值來表示它的情感傾向 。而且這個權值的設置也會影響最終的情感分值,敏感度太高了 。因此對這句話的最終的正確的處理,是得出這句話的一個正面分值,一個負面分值(這樣消極分值也是正數, 無需使用負數了) 。
6、 以分句的情感為基?。?加權求和,從而得到一條評論的情感分值 。
【基于情感詞典的文本情感分析代碼 基于情感詞典】這條例子評論有五個分句,因此其結構如下([正面分值, 負面分值]): 下面是對每個分句的打分: [正面分值, 負面分值]
① 我 特別 喜歡 武漢這個城市 ! [正面分值, 負面分值] : [3*1 2,0]
② 因為武漢有 非常 多 好看 的景點 。[正面分值, 負面分值] : [4*1,0]
③ 但是 , [正面分值, 負面分值] : [0,0]
④ 我 不 喜歡 武漢的天氣 , [正面分值, 負面分值] : [-1*1,0]
⑤ 因為武漢的天氣 有點 差,[正面分值, 負面分值] : [0,0.5*1]
⑥ 熱的時候讓人感覺 不爽 。[正面分值, 負面分值] : [0,1]
最后,這句話的得分為: [3*1 2,0][4*1,0][0,0][-1*1,0][0,0.5*1][0,1] = [8,1.5],即為: [正面分值, 負面分值] = [8,1.5] 。
因為 8>1.5,所以整句話的情感判斷為正面 。
撲救時要先救人后救物,先重點后一般,先斷電后救火 , 并注意順風救災,特別是野外火場 。滅火時一般就地取材,如用水、砂、土等滅火器材,特別要設法控制火勢蔓延 。
五、總結如果我們僅僅使用情感詞典的方法,準確率就可以達到 73%左右 。這種方法比較通用,不需要訓練,對于不同類型的數據都可以進行情感分析 。唯一的缺點就是準確率不是非常高 。
六、Github代碼鏈接:https://github.com/hellonlp/sentiment_analysis_dict
一只投胎豬的心路歷程:一只豬死后到陰間判官處報到,判官說道:去吧,下世還做豬 。說完就要在生死簿上落下判官筆 , 沒想到這只豬卻大聲嚷道:不公平?。〔還槳 。∨泄俸蓯薔? ,說道:怎么不公平呢?你說說看 。豬道:判官大人,世界太不公平了,我們豬得不到人們 的喜歡,最可恨的...

    猜你喜歡