1. 程式人生 > 其它 >R語言做文字挖掘 Part5情感分析

R語言做文字挖掘 Part5情感分析

Part5情感分析

【發現有人轉載,決定把格式什麼重新整理一遍,有時間做個進階版文字挖掘,恩!原文地址:CSDN-R語言做文字挖掘 Part5情感分析】

這是這個系列裡面最後一篇文章了,其實這裡文字挖掘每一個部分單拎出來都是值得深究和仔細研究的,我還處於初級研究階段,用R裡面現成的演算法,來實現自己的需求,當然還參考了眾多網友的智慧結晶,所以也想把我的收穫總結出來分享給大家,希望也能像我一樣在看大家的分享時得到自己的啟發。

網上翻了下中文文字情感分析的一些文章,再回想了一下我自己做情感分析的方法,覺得我的想法真的是簡單粗暴直接。這是一篇介紹中文文字情感分析傾向的論文。http://wenku.baidu.com/link?url=TVf5LgNS6esnunpgubvM14z24m0f4lTyD483gw_hEnp2RyeL6XzanSlz8oCcZCFlwKLqD0PdBhVUcV4-0loTdGp3hL-kqeTTwJ3l91HfTa3,中間講到做情感分析目前主要有三種方法。第一種由已有的電子詞典或詞語知識庫擴充套件生成情感傾向詞典;第二種,無監督機器學習的方法。第三種基於人工標註語料庫的學習方法。

上面三種方法不仔細一一說明了,它們都有一個共同的特點,需要一個情感傾向的語料庫。我在R中的實現方案與第一種方法類似,整理一個褒義詞詞庫一個貶義詞詞庫(這個萬能的網際網路上有自己稍加整理就OK)。給文字做分詞,並提取出中間的情感詞。給每條文字定情感傾向評分初始值為1,跟褒義貶義詞詞庫做匹配,褒義詞+1,貶義詞-1,計算出每條文字的最終情感傾向評分,為正值則是正面評價,為負值則是負面評價。方法可以基本實現情感傾向判斷,但還可以改進。像前面參考論文中講到的,還可以根據詞語的詞性強弱來評定感情的強,不只是+1和-1之分;還有考慮一些詞語在不同語境下情感傾向可能會不同,比如論文中講到的“驕傲”,這個我在想可能需要整理出有這樣特殊情況的詞語;還有負負得正的情況,比如“不喜歡是不可能的事情!”,照我的評分標準它的結果就是負面評價了;反問的情況,“哪裡便宜了?”,評出來結果變成了正。“便宜”這個詞我把它放在褒義詞表下,其實仔細考慮如果是說“便宜實惠”肯定是褒義,如果說“便宜沒好貨”,也會是褒義,這就不對了,還是第二個問題不同語境下情感傾向會不同。

R中的實現過程:

1. 資料輸入處理

資料還是某品牌官微,取它微博中的1376條評論,情感褒義詞庫和貶義詞庫,將資料讀入到R中。附詞庫下載地址:http://www.datatang.com/data/44317/,可能不是很全,需要自己整理豐富,我在看服裝相關的文字時,發現有些詞像“褪色”,“開線”,“顯瘦”,“顯胖”都沒有在裡面,這些就需要自己另外加進去。

hlzj.comment <- readLines("hlzj_commentTest.txt")
negative <-readLines("D:\\R\\RWorkspace\\hlzjWorkfiles\\negative.txt")
positive <-readLines("D:\\R\\RWorkspace\\hlzjWorkfiles\\positive.txt")
length(hlzj.comment)
[1] 1376
length(negative)
[1] 4477
length(positive)
[1] 5588

2. 對評論做分詞處理並評級

過程類似Part2中講到的分詞處理。然後我自己寫了個方法getEmotionalType(),將分詞結果與negative表和positive表作對照計算得分。

commentTemp <- gsub("[0-90123456789 < > ~]","",hlzj.comment)
commentTemp <-segmentCN(commentTemp)
commentTemp[1:2]
[[1]]
[1] "恭喜""大家""又" "沒有" "找到" "俺"

[[2]]

[1] "沒有" "私信" "給" "我" "小編" "把" "我" "給" "漏" "了"

EmotionRank <-getEmotionalType(commentTemp,positive,negative)
[1] 0.073
[1] 0.145

[1] 0.218

[1] 0.291

[1] 0.363

[1] 0.436

[1] 0.509

[1] 0.581

[1] 0.654

[1] 0.727

[1] 0.799

[1] 0.872

[1] 0.945

EmotionRank[1:10]
[1] 1 0 2 1 1 2 3 1 0 0
commentEmotionalRank <-list(rank=EmotionRank,comment=hlzj.comment)
commentEmotionalRank <-as.data.frame(commentEmotionalRank)
fix(commentEmotionalRank)
getEmotionalType <- function(x,pwords,nwords){
emotionType <-numeric(0)
xLen <-length(x)
emotionType[1:xLen]<- 0
index <- 1
while(index <=xLen){
yLen <-length(x[[index]])
index2 <- 1
while(index2<= yLen){
if(length(pwords[pwords==x[[index]][index2]]) >= 1){
emotionType[index] <- emotionType[index] + 1
}else if(length(nwords[nwords==x[[index]][index2]]) >= 1){
emotionType[index] <- emotionType[index] - 1
}
index2<- index2 + 1
}
#獲取進度
if(index%%100==0){
print(round(index/xLen,3))
}
index <-index +1
}
emotionType
}
檢視到結果如下,第一個圖裡看著還挺正常的,第二個圖好像是hlzj贊助的RM裡出現了衣服被撕壞的時候的評論。沒有黑他們家的意思,只是想找個例子來說明下差評的效果,好像不是很理想。那些反問的話無法識別判斷,還有一些比較口語化的“醉了”,“太次”這樣的詞沒有放到情感詞庫裡,對這些評論的情感傾向識別效果不是很好。

像前面說的,方法有待改進,我的方法只是一個最基礎的情感分析的實現方式,有任何問題歡迎指正。

轉載請註明來源,謝謝!
————————————————
版權宣告:本文為CSDN博主「EchoCaiCai」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處連結及本宣告。
原文連結:https://blog.csdn.net/cl1143015961/article/details/44460873