用于文本挖掘的r语言第5部分情感分析
第五部分情感分析
【发现有人转载,决定重新整理格式和什么,有时间就做一个高级版的文本挖掘,嗯!原文地址:CSDN-R语言用于文本挖掘第5部分情感分析]
这是本系列的最后一篇文章。事实上,这里的文本挖掘的每一部分都值得深入研究和仔细研究。我还在初级研究阶段,用R里现成的算法来满足自己的需求。当然,我也参考了很多网友的智慧结晶,所以我也想总结一下我的收获,分享给大家。希望在看大家和我一样分享的时候能得到自己的启发。
我在网上翻了一些关于中文文本情感分析的文章,然后思考了自己的情感分析方法。我觉得我的想法真的很简单,很粗鲁,很直接。这是一篇介绍中文文本情感分析趋势的论文。3358wenku.baidu.com/linkurl=tvf 5 LNG 6 esnungubvm 14 z 24m 0 f 4 lty d 483 GW _ henp 2 ryel 6 xzanslz 8 oczclwklqd 0 pdbhvucv4-0 lotdg p3hl-kqettwj 3l 91 hfta 3。目前做情绪分析的方法主要有三种。第一种是扩展现有的电子词典或词知识库,生成情感倾向词典;第二,无监督机器学习的方法。基于人工标注语料库的第三种学习方法。
以上三种方法不详细说明。他们都有一个共同的特点,需要一个情感倾向的语料库。我在R中的实现方案和第一种方法差不多,整理一个褒义词词库和一个贬义词词库(在万能的互联网上自己整理一点就可以了)。把课文分成词,中间提取情感词。对于每个文本,情感倾向得分的初始值为1,与褒贬词、褒贬词-1、贬损词-1的词汇进行匹配,计算出每个文本的最终情感倾向得分。正值是正面评价,负值是负面评价。该方法基本可以实现情绪倾向的判断,但可以改进。如前参考文献所述,情感强度也可以根据词的词性强度来评价,而不仅仅是1和-1;还要考虑到有些词在不同的语境下可能会有不同的情感倾向,比如文中提到的“骄傲”,我认为可能需要对有这样特殊情况的词进行梳理;也有消极和积极的情况,比如“不喜欢是不可能的!”按照我的评分标准,它的结果是负面评价;问“哪里便宜?”评估结果为正。我把“便宜”这个词放在了褒义词的下面。其实仔细想想,如果说“便宜又实惠”绝对是恭维,如果说“便宜又不好”,那也是恭维,这是错的,还是第二个问题,不同语境下的情感倾向会有所不同。
R中的实施流程:
1.数据输入处理
数据仍是某品牌官微。从其微博、情感褒义词库、贬义词库取1376条评论,数据读入r .下载地址附词库:http://www.datatang.com/data/44317/,可能不全,需要自己充实。在看服装相关的文字时,发现里面没有包含“掉色”、“开线”、“苗条”、“胖”等词,需要自己添加。
hlzj.comment-ReadLines(' hlzj _ comment test . txt ')
负-readline(' d : \ \ R \ \ RWorkspace \ \ hlzjWorkfiles \ \ negative . txt ')
正读线(' d : \ \ R \ \ RWorkspace \ \ hlzjWorkfiles \ \ positive . txt ')
长度(hlzj.comment)
[1] 1376
长度(负)
[1] 4477
长度(正)
[1] 5588
2.将评论分成单词并排列。
这个过程类似于第二部分提到的分词。然后我自己编写了一个方法getEmotionalType(),将分割结果与否定表和肯定表进行比较,计算得分。
comment temp-gsub('[0-90123456789 ~]','',hlzj.comment)
评论-细分市场
评论[1:2]
[[1]]
[1]“恭喜”“大家”“我没找到”
[[2]]
[1]“不”“私信”“给”“我”“边肖”“给”“我”“给”“泄露”
情绪等级-获取情绪类型(评论,正面,负面)
[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
情感银行[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
内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/151775.html