情感分析基于词典的分析方法Word文件下载.docx
- 文档编号:22431292
- 上传时间:2023-02-04
- 格式:DOCX
- 页数:15
- 大小:143.67KB
情感分析基于词典的分析方法Word文件下载.docx
《情感分析基于词典的分析方法Word文件下载.docx》由会员分享,可在线阅读,更多相关《情感分析基于词典的分析方法Word文件下载.docx(15页珍藏版)》请在冰豆网上搜索。
4.是否需要使用规则及其与程序速度的平衡关系
5.是否关注情感归属问题,即主体词和情感的归属关系,是整体层次还是单个文本的个体层次
6.准确率和速度以上算是情感分析的几个基本问题,本章尽量从这些方面探索实现。
2.文本分析的基本武器:
工欲善其事工欲善其事,必先利其器,R和python都是数据挖掘的利器,虽然我们选择了使用R做情感分析,但我个人认为python更具后发优势,如果你搜索自然语言处理的话,会发现很多内容和python有关,至于其他方面的比较,个人认为没有必要,只看这一点就ok了。
2.1.Rjava包配置既然选择了R语言,就需要将R语言打造一番,首先RJava包需要安装,它是R语言和Java的通信接口,允许在R中直接调用Java的对象和方法,恰恰能满足很多包的需要,比如Rwordseg。
Linux环境下只要R与Java的版本对应即可使用常规方法安装RJava,而windows环境下就比较麻烦,首先要安装java,去oracle官网下载JDK版安装包,注意,这里是jdk不是jre,是64位还是32位要和R版本相同。
然后需要安装Rtools,下载地址
完成以上工作以后需要配置环境,win7右键我的电脑——高级系统设置——环境变量,在环境变量中分别新建或添加相应的环境路径。
第一个classpath,新建classpath添加下面代码classpath.;
%JAVA_HOME%\lib\dt.jar;
%JAVA_HOME%\lib\tools.jar;
C:
\ProgramFiles\R\R-3.2.1\library\rJava\jri这里最后一个值有时需要指定到jri的版本是x64还是i386,如果是64,那么需要C:
\ProgramFiles\R\R-3.2.1\library\rJava\jri\x64,有时又不需要这么指定,真是一件神奇的事情。
第二个JAVA_HOME,新建,然后把下面的内容添加进去JAVA_HOMEC:
\ProgramFiles\Java\jdk1.8.0_51第三个Path,新建path,注意一下所有的软件都要区分i386或x64PathC:
\Rtools\bin;
\Rtools\gcc-4.6.3\bin;
%JAVA_HOME%\bin;
%JAVA_HOME%\jre\bin;
\ProgramFiles\R\R-3.2.1\bin\i386;
\ProgramFiles\R\R-3.2.1\bin\x64;
\ProgramFiles\Java\jdk1.8.0_51\jre\bin\server第四个R_HOME,添加R_HOMEC:
\ProgramFiles\R\R-3.2.1以上所有路径均是你的软件安装路径,其他不需要修改。
安装rJava包if(!
suppressWarnings(require("
rJava"
))){
install.packages("
)
require("
}
.jinit()
s<
-.jnew("
java/lang/String"
"
HelloWorld!
"
s
#[1]"
Java-Object{HelloWorld!
}"
如果s正常返回"
则RJava已经成功了。
只有RJava配置成功了,Rwordseg安装才可能成功,前者是后者的依赖包。
2.2.Rwordseg包安装如果返回不正常说明你的RJava还没安装好,需要重新安装,Rwordseg是我接触最早的中文分词包,所以情有独钟,并不是因为它多么优秀,而是觉得分词是文本分析的基础工作,就其准确性而言,各种方法之间实在没有实质性的差别,因此也就没有养成换来换去的坏毛病。
其实,有一点很奇怪,大家口口声声玩大数据,但往往在某些细节问题上止步不前,比如为了分词准确性提高一个千分点,花费大量的时间、财力和精力,我请问,这些改变对数亿级的文本分析结果能有多大的影响呢。
另外,数据量巨大的分析保证我们在群体上的精确性,这也是统计的本质,而有些人在评价结果时可能纠结于极个别的个体,这本就是一种本末倒置的思维。
如果我们的自变量是由个体组成的,必然需要从群体上评价准确性,而不是纠结于黑天鹅事件。
至于防止黑天鹅事件,自然可以设计一套风险管理措施,比如可以分化赌注,多玩几次。
扯远了,继续安装Rwordseg。
安装Rwordseginstall.packages("
Rwordseg"
repos="
http:
//R-Forge.R-project.org"
)#这一步要完成需要安装Rtools
library(rJava)
library(Rwordseg)
segmentCN("
在此对原作者孙健表示强烈的敬意!
)如果在线安装不成功,可以下载本地安装。
下载https:
//r-forge.r-project.org/R/?
group_id=1054本地安装很简单,如果你使用Rstudio编辑器,点击tools,选install.packages就可以安装。
如果segmentCN函数分词成功就ok了,报错就自求多福吧!
2.3.jieba分词包安装虽然我比较执着于Rwordseg,并不代表各位看管执着于我的执着,推荐结巴分词包,小巧玲珑,没有那么多幺蛾子,而且R版本和python版本都有,除了词性标注等分词包必备功能以外,jiebaR还加入了一些基础的文本分析算法,比如提取关键字(TFIDF)、分析文本相似性等等,真是老少咸宜。
安装jiebaRlibrary(devtools)
if(!
Rcpp"
install_github("
qinwf/jiebaR"
library(jiebaR)
seg<
-worker()
="
江州市长江大桥,参加了长江大桥的通车仪式。
H:
/zimeiti/窥视数据背后的逻辑:
基于R与python/bookwriting/第十二章舆情分析/rawdata/dataset_602123/ChnSentiCorp_htl_ba_2000/neg/neg.0.txt"
fenci如果使用install_github函数安装github上的包,需要调取devtools包,而该包需要Rtools,这也是提前安装Rtools的原因;
另外jiebaR使用Rcpp开发,因此需要安装调取Rcpp包。
jiebaR其实是一个刀架,里面的每一把刀是一个分词引擎(是的,好几种),通过worker函数初始化引擎,建议不要更改默认设置(个人认为很多函数的默认设置必有其合理性),指定分词引擎后,只需要将文本通过符号赋值给分词引擎即可,有两种方式:
其一直接赋值一句话;
其二指定文本路径,分词结果存放在相应的路径内;
当然也可以像使用Rwordseg包的segmentCN函数一样使用segment函数分词,只不过后者需要指定分词引擎。
之所以多说了两句,是为了努力说服大家尽量使用jiebaR,但是下面的内容我们主要使用Rwordseg包分词,是不是很变态?
其实就分词这段不一样而已。
3.基于词典的情感分析的效率高过瞎猜么?
上面已经简单介绍了基于词典的情感分析的过程,一般经过以下几个过程:
数据整理、词典整理、情感词匹配、计算情感得分和方法评估等过程。
这种分析方法因其思路简单而遭人诟病,更有甚者说分析效果赶不上猴子瞎猜,咱不看广告,看疗效。
3.1.数据整理及词典构建这一节我们完成文本语料库和词典的整理,使用谭松波和清华大学李军等人标注的语料库进行分析,词典方面使用已经公开的词典资源,包括台湾大学、中国知网等网站公布的情感词典。
3.1.1.数据整理语料库共包含两个数据集:
清华大学李军标注的近24000个酒店评论文本和谭松波整理的12000个来自京东、携程、当当网的跨行业评论文本。
李军的语料库(review_sentiment)包括两个数据集(训练集和测试集)和两个标注表(训练标注表和测试标注表),标注表注明了文本的情感倾向,正向为1,负向为-1。
由于文本为分散的单个文本,所以需要批量读入文本文件。
获取文本路径reviewpath<
-"
基于R与python/bookwriting/第十二章舆情分析/rawdata/review_sentiment/train2"
#reviewpath<
基于R与python/bookwriting/第十二章舆情分析/rawdata/review_sentiment/test2"
completepath上面第一句设定了文件存放的路径,list.files函数获取该路径下所有文件的文件名,如果full.names参数为真,则返回完整的路径,反之返回文件名称,pattern设置符合正则表达式的规则,仅提取符合要求的文件,防止读入系统文件,这里仅匹配以.txt结尾的文件。
批量读入文本read.txt<
-function(x){
des<
-readLines(x)
return(paste(des,collapse="
))
review<
-lapply(completepath,read.txt)
#Therewere50ormorewarnings(usewarnings()toseethefirst50)上面刚开始构造了一个函数read.txt,目的是将一个完整路径的txt文件加载进来,并将每个段落粘贴在一起,函数是一个非常中规中矩的R函数模式:
第一句,打开文件并分行读取,然后将每一行粘贴在一起,最后返回完整的文本内容。
在R的自编函数末尾return声明返回的内容,如果不声明仅返回函数中形成的最后一个对象。
paste函数有两个指定间隔符号的参数:
sep和collapse,前者将两个对象或两个对象的元素对应粘在一起时使用,后者是融合的意思,将向量或者list的元素粘在一起时使用。
第二句使用了lapply函数,避免了每一个文本循环读取,保持了代码的整洁,提高了运行速度。
到这里,review这个list就记录了文件下的所有文本内容,它的每一个元素是一个文本的内容。
如果你忍不住想用循环处理,说明你还处于低级阶段,不到万不得已绝对不能轻易使用R语言循环。
另外,如果程序警告,这里可能是部分文件最后一行没有换行导致,不用担心。
list转数据框docname<
-list.files(reviewpath,pattern="
*.txt$"
reviewdf<
-as.data.frame(cbind(docname,unlist(review)),
stringsAsFactors=F)
colnames(reviewdf)<
-c("
id"
msg"
)
reviewdf$msg<
-gsub(pattern="
"
replacement="
reviewdf$msg)
-gsub("
\t"
reviewdf$msg)#有时需要使用\\\t
"
,"
~|'
\\\"
#Warningmessage:
#Inscan(file,what,nmax,sep,dec,quote,skip,nlines,na.strings,:
#EOFwithinquotedstring1行读取文件名称;
2行名称和文本内容按列(cbind)捆绑在一起成为一个新的数据框;
3行修改列名;
4行移除文本中的所有空格,第一个参数指定正则表达式模式,第二个参数指定替换为的内容;
5、6行替换所有的\t和英文逗号,因为csv各式的文档以英文逗号为分隔符,文中有英文逗号会报错,除了英文逗号可能引起read.csv函数读取csv文件报错以外,还有英文单引号(’)、英文双引号(”)、波浪号(~),都会引起读取时发生警告,带来csv文件或txt文件读取不完整的后果,如果一旦发生“EOFwithinquotedstring”就要想办法找出这类符号将其替换掉;
因此,7行依次替换了波浪号(~)和英文单引号(’),它们之间用“|”符号隔开,表示或的关系;
8行替换所有的英文双引号(”),因为双引号在R中有特殊含义,所以要使用三个斜杠(\\)转义。
数据算是基本处理了一下,下一步要给文本匹配上情感标注。
关联标注reviewclass<
-read.table("
基于R与python/bookwriting/第十二章舆情分析/rawdata/review_sentiment/train2.rlabelclass"
stringsAsFactor=F)
#reviewclass<
基于R与python/bookwriting/第十二章舆情分析/rawdata/review_sentiment/test2.rlabelclass"
stringsAsFactor=F)
colnames(reviewclass)<
label"
library(plyr)
-join(reviewdf,reviewclass)
-reviewdf[!
is.na(reviewdf$label),]
train<
-reviewdf
#testread.table读取训练集文本标注数据,该函数是R中读取数据的根函数,很多函数都是继承的read.table,所以看到格式陌生的文件,可以尝试使用这个函数读取,2行更改标注文档的列名称,id列和reviewdf中的id列相同,plyr包里的join函数会根据名称相同的列进行匹配关联,join默认设置下执行左连接;
然后将整理好预料赋值给train备用。
这样李军标注的训练数据集就整理完成了,整理测试数据集使用相同的代码,将注释掉的代码恢复,同时将上一句注释掉即可。
dataset_602124数据集分为当当、京东、携程三个子文件夹,下面又分别有pos和neg文件夹,顾名思义,pos文件夹下全是情感正向的文本;
neg下则为负向的文件,为了操作简便,分别把文本统一整理到pos和neg文件夹内,然后在进行数据处理。
基于R与python/bookwriting/第十二章舆情分析/rawdata/dataset_602124/pos"
基于R与python/bookwriting/第十二章舆情分析/rawdata/dataset_602124/neg"
completepath读取dataset_602124数据集,设定文嘉路径。
批量读入文本review<
-lapply(completepath,read.txt)#自编函数read.txt
docname<
label<
-rep(1,length(docname))
#label<
-rep(-1,length(docname))
-as.data.frame(cbind(docname,unlist(review),label),
pos6<
#neg6<
temp<
-rbind(pos6,neg6)
-rbind(train,temp)
write.csv(train,'
基于R与python/bookwriting/第十二章舆情分析/data/train.csv'
row.names=FALSE)
#write.csv(test,'
基于R与python/bookwriting/第十二章舆情分析/rawdata/review_sentiment/test.csv'
row.names=FALSE)1、2行不多说;
3行为读入的数据添加情感倾向标签,正向数据全部标注为1,负向数据全部标注为-1(暂时注释掉了),rep函数复制产生一个和向量docname等长的向量;
4、5行捆绑3列生成数据框,并重新命名3列,列顺序、名称和train数据框保持一致;
6、7、8、9、10行不多说了;
11、12、13行将已有的数据按行粘(rbind)在一起,生成用于训练的语料库train,测试的语料库仅仅使用李军的测试集test即可(注释代码);
只需将train和test输出到专用的数据存储文件夹data,write.csv输出语料文档,输出格式为csv,参数row.names设置为非,表示不输出行编号。
这样测试集和训练集语料库都已经准备好了,并存储在data文件夹里备用。
3.1.2.词典构建尽管我们搜集了很多部情感词典(参看电子文档),经过挑选,暂时整合中国知网、台大、清华和一部未标注来源的词典等四部词典,再次感谢这些词典的作者。
首先我们需要将这些词典整合为正向情感词集pos和负向情感词集neg。
我已经将各个词典的正负文本整理到两个文件夹内:
词典整理dictpath<
基于R与python/bookwriting/第十二章舆情分析/rawdict/posdic"
#dictpath<
基于R与python/bookwriting/第十二章舆情分析/rawdict/negdic"
completepath<
-list.files(dictpath,pattern="
full.names=TRUE)
dict<
-lapply(completepath,readLines)
-unique(unlist(dict))
pos<
-dict
#neg<
write.csv(pos,'
基于R与python/bookwriting/第十二章舆情分析/dict/pos.csv'
#write.csv(neg,'
基于R与python/bookwriting/第十二章舆情分析/dict/neg.csv'
row.names=FALSE)1、2行不多说,3行lapply函数直接使用了readLines函数,将每个文件按行读取;
4行将list解散(unlist)成为
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 情感 分析 基于 词典 方法
![提示](https://static.bdocx.com/images/bang_tan.gif)