基于R语言的Kaggle案例分析学习笔记(七)

来源:互联网 发布:cnc编程要学多久 编辑:程序博客网 时间:2024/06/06 09:31
NLP
本案例大纲:
1、分词函数简介
2、绘制词云-----以红楼梦为例
3、情感分析-----美国选举辩论文本为例
4、代码展示

1、分词函数简介
      segmentCN(x,nosymbol,nature)为分词函数,其中x为需要分词的文本,nosymbol表示输出标点符号,nature表示输出拼音。    segment.options("isNameRecognition"),设置识别人名。实例可见于第4部分的代码。
2、绘制词云-----以红楼梦为例
      对文本进行分词以后,统计词频,绘制词云图,主要用到wordcloud2包。

3、情感分析-----美国选举辩论文本为例
     主要是Rsentiment包,专门针对英文文本进行情感分析,不需要先进行分词,其中calculate_sentiment函数将情感分为六类,统计所需分析的文本的情感类别的文本数,calculate_score函数给出每个句子的情感分数,正数代表积极情感,负数代表消极情感,0为中性,calculate_total_presence_sentiment函数计算各种情绪类型的句子个数。
4、代码示例
library(stringr)library(readr)library(wordcloud)library(tm)library(SnowballC)library(RSentiment)#英文文本情感分析,不需要进行分词library(data.table)library(DT)library(ggplot2)library(Rwordseg)#(1)分词函数的简单示例test<-"我爱天安门,天安门上太阳升"segmentCN(test)#分词segmentCN(test,nosymbol=F)#设置输出标点符号segmentCN(test,nature=T)#设置标注拼音test2<-"梅超风是梅花岛岛主"segment.options("isNameRecognition")#设置识别人名segmentCN(test2)#(2)对红楼梦文本构建词云htm.txt<-readLines('D:\\R语言kaggle案例实战\\Kaggle第七课\\本节课数据集及部分代码\\红楼梦.txt')hlm.seg<-segmentCN(htm.txt)#分词hlm.freq<-data.frame(table(unlist(hlm.seg)))#统计词频#installDict函数可以设置自己的语料库library(wordcloud2)#词云包wordcloud2(hlm.freq,size=1,shape='star',widgetsize =100)#画词云,shape设置形状,size设置字的大小。#(3)对美国总统大选辩论文本的情感分析debate<-read.csv('D:\\R语言kaggle案例实战\\Kaggle第七课\\本节课数据集及部分代码\\debate.csv')debate$Text<-as.character(debate$Text)#转为字符型debate$Text<-gsub("....","",debate$Text)#去除“...."这类字符debate$Speaker<-as.factor(debate$Speaker)#将演讲者名字转为因子型debate<-as.data.frame(debate)Pence<-debate$Text[debate$Speaker=="Pence"]#提取Pence的演讲内容Kaine<-debate$Text[debate$Speaker=="Kaine"]#提取Kaine的演讲内容Quijano<-debate$Text[debate$Speaker=="Quijano"]#提取Quijano的演讲内容sentiments_pense<-cbind("Speaker"="Pence",calculate_sentiment(Pence))#calculate_sentiment计算pence的情感,并将Speaker列与最终的情感值列通过cbind合并sentiments_Kaine<-cbind("Speaker"="Kaine",calculate_sentiment(Kaine))#同上sentiments_Quijano<-cbind("Speaker"="Quijano",calculate_sentiment(Quijano))#同上sentiments<-rbind(sentiments_pense[,-2],sentiments_Kaine[,-2],sentiments_Quijano[,-2])#合并三个人的情绪sentiments<-as.data.frame(sentiments)sentiments<-as.data.table(sentiments)sentiments1 <- sentiments[,.N,by=.(sentiment,Speaker)]#分组计数,即不同speaker的不同情绪的文档数量sentiments1[,"Total":=sum(N),by=Speaker]#分组统计不同speaker的发言文本数sentiments1<-sentiments1[,.("Percentage"=100*N/Total),by=.(Speaker,sentiment)]#分组统计每种情绪的发言文本数占比ggplot(sentiments1,aes(x = sentiment,y = Percentage ,fill=sentiment ))+#以图形形式展示  geom_bar(stat = "identity") +#柱状图形式  ggtitle("VP Sentiments")+xlab("Sentiment")+ylab("% Sentiment")+   theme(axis.text.x = element_text(angle = 45, size=8,hjust = 1))+  facet_wrap(~Speaker)#以speaker作为分组,画分组柱状图#以下是另外三个总统的情感分析过程与上面相同,所以不再解释trump <- debate$Text[debate$Speaker=="Trump"]clinton <- debate$Text[debate$Speaker=="Clinton"]holt <- debate$Text[debate$Speaker=="Holt"]sentiments_trump = cbind("Speaker"="Trump",calculate_sentiment(trump))sentiments_clinton = cbind("Speaker"="Clinton",calculate_sentiment(clinton))sentiments_holt = cbind("Speaker"="Holt",calculate_sentiment(holt))sentiments <- rbind(sentiments_trump[,-2],sentiments_clinton[,-2],sentiments_holt[,-2])sentiments <- as.data.table(sentiments)sentiments2 <- sentiments[,.N,by=.(sentiment,Speaker)]sentiments2[,"Total":=sum(N),by=Speaker]sentiments2 <- sentiments2[,.("Percentage"=100*N/Total),by=.(Speaker,sentiment)]sentiments1$group <- "Moderator"#划分党派,以便画出不同党派的的情感柱形图sentiments1$group[sentiments1$Speaker%in%"Pence"] <- "Republican"sentiments1$group[sentiments1$Speaker%in%"Kaine"] <- "Democratic"sentiments2$group <- "Moderator"sentiments2$group[sentiments2$Speaker%in%"Trump"] <- "Republican"sentiments2$group[sentiments2$Speaker%in%"Clinton"] <- "Democratic"sentiments <- rbind(sentiments1,sentiments2)ggplot(sentiments,aes(x = sentiment,y = Percentage ,fill=interaction(Speaker,group)))+  geom_bar(stat = "identity",position = "identity", alpha=.7) +  ggtitle("Presidential and VP Sentiments")+xlab("Sentiment")+ylab("% Sentiment")+   theme(axis.text.x = element_text(angle = 45, size=8,hjust = 1))+  facet_wrap(~group)
补充一点:cnSentimentR包是与Rsentiment一样功能的中文文本情感分析包,相关资料我暂时没有。关于这部分的数据,上传不了,感兴趣的可以到Kaggle官网找找。
原创粉丝点击