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