title: “R语言基于京东评论数据情感文本挖掘”
date: “/5/20”
读取数据
数据读取
Data <- read.csv("./huizong.csv", header = TRUE, encoding = 'utf-8')colnames(Data) <- c("x1", "x2", "x3", "x4", "x5", "x6", "x7", "x8", "x9")index <- which(Data$x5 == "美的")meidi_jd <- Data[index, 6]# write.table(meidi_jd, "./meidi_jd.txt", row.names = FALSE,# fileEncoding ='utf-8',col.names = F,quote = F)
写出我们需要的数据备用
Data <- readLines("meidi_jd.txt", encoding = "UTF-8")length(Data)Data1 <- unique(Data)length(Data1)
将我们需要的数据读入去重并查看长度
将文本按情感类型分类,并读取
将由ROSTCM6处理后的数据导入使用ROSTCM6来完成情感分析是因为该软件的情感倾向性分析使用的是基于优化的情感词典的方法,其准确率目前来讲会比基于词向量以及基于神经网络的情感分析方法的正确率会高,而前述用于情感倾向性分析的方法是基于词向量以及基于神经网络的情感倾向性分析方法。
Data1 <- readLines("./meidi_jd_process_end_负面情感结果.txt", encoding = "UTF-8")Data2 <- readLines("./meidi_jd_process_end_正面情感结果.txt", encoding = "UTF-8")
删除不必要的数据
\t 表示以制表符为分隔符 strsplit 分割字符串。 由于ROSTCM6处理后的文件含有前缀,我们需要将前缀去除
for (i in 1:length(Data1)) {Data1[i] <- unlist(strsplit(Data1[i], "\\t"))[2]}for (i in 1:length(Data2)) {Data2[i] <- unlist(strsplit(Data2[i], "\\t"))[2]}# write.table(Data1, "./meidi_jd_neg.txt", row.names = FALSE,col.names = F,quote = F)# write.table(Data2, "./meidi_jd_pos.txt", row.names = FALSE,col.names = F,quote = F)
创建jiebaR的环境
#jiebaR在做中文文本挖掘时必不可免的包,不做过多介绍,有心的同学可自行查找资料,将上一步分组完毕的数据读入,
# 在调用包之前需要安装install.packages("")library(jiebaRD) library(Rcpp) library(jiebaR) Data1 <- readLines("./meidi_jd_pos.txt", encoding = "UTF-8")Data2 <- readLines("./meidi_jd_neg.txt", encoding = "UTF-8")cutter <- jiebaR::worker()cutter <= Data1cutter2 <- jiebaR::worker()cutter2 <= Data2# write.table(cutter <= Data1, "./meidi_jd_neg_cut.txt",col.names = F,quote = F)# write.table(cutter2 <= Data2, "./meidi_jd_pos_cut.txt", col.names = F,quote = F)
建立主题模型
#读取停词文本,网上均可搜到,以删除这些词汇
lapply()函数可用于对列表对象执行操作,并返回与原始集合长度相同的列表对象。lapply()的输出是一个列表
gsub替换字符 本命令中替换所有出现a~z的字符为空
LDA模型简介/huagong_adu/article/details/7937616
VectorSource函数构建source对象以利用邮件向量构建语料库。
library(NLP)library(tm)library(slam)library(RColorBrewer)library(wordcloud) library(topicmodels)Data1 <- readLines("./meidi_jd_pos_cut.txt", encoding = "UTF-8")Data2 <- readLines("./meidi_jd_neg_cut.txt", encoding = "UTF-8")stopwords <- unlist (readLines("./stoplist.txt", encoding = "UTF-8"))removeStopWords = function(x, words) { ret <- character(0)index <- 1it_max <- length(x)while (index <= it_max) {if (length(words[words == x[index]]) <1) ret <- c(ret, x[index])index <- index + 1}ret}Data1 <- gsub("([a~z])", "", Data1)Data2 <- gsub("([a~z])", "", Data2)sample.words1 <- lapply(Data1, removeStopWords, stopwords)sample.words2 <- lapply(Data2, removeStopWords, stopwords)corpus1 = Corpus(VectorSource(sample.words1))sample.dtm1 <- DocumentTermMatrix(corpus1, control = list(wordLengths = c(2, Inf)))Gibbs = LDA(sample.dtm1, k = 3, method = "Gibbs", control = list(seed = , burnin = 1000, thin = 100, iter = 1000))Topic1 <- topics(Gibbs, 1)table(Topic1)Terms1 <- terms(Gibbs, 10)Terms1
根据美的热水器好评的3个潜在主题的特征词提取,主题1中的高频特征词,即很好、送货、快、加热、速度、很快、服务、非常等,主要反映京东送货快、服务非常好;美的热水器加热速度快;主题2中的高频特征词,即热门关注点主要是价格、东西、值得等,主要反映美的热水器不错,价格合适值得购买等;主题3中的高频特征词,即热门关注点主要是售后、师傅、上门、安装等,主要反映京东的售后服务以及师傅上门安装等.
corpus2 = Corpus(VectorSource(sample.words2))sample.dtm2 <- DocumentTermMatrix(corpus2, control = list(wordLengths = c(2, Inf)))library(topicmodels)Gibbs2 = LDA(sample.dtm2, k = 3, method = "Gibbs",control = list(seed = , burnin = 1000, thin = 100, iter = 1000))Topic2 <- topics(Gibbs2, 1)table(Topic2)Terms2 <- terms(Gibbs2, 10)Terms2
从美的热水器差评的3个潜在主题中,我们可以看出,主题1中的高频特征词主要是安装、服务、元等,主要反映的是美的热水器安装收费高、热水器售后服务不好等;主题2中的高频特征词主要是不过、有点、还可以等情感词汇,主要反映的是美的热水器可能不满足其需求等;主题3中的高频特征词主要是没有、但是、自己等,可能主要反映美的热水器自己安装等。
综合以上对主题及其中的高频特征词可以看出,美的热水器的优势有以下几个方面:价格实惠、性价比高、外观好看、热水器实用、使用起来方便、加热速度快、服务好。
相对而言,用户对美的热水器的抱怨点主要体现以下几个方面:美的热水器安装的费用贵及售后服务等。
因此,用户的购买原因可以总结为以下几个方面:美的大品牌值得信赖,美的热水器价格实惠,性价比高。
根据对京东平台上,美的热水器的用户评价情况进行LDA主题模型分析,我们对美的品牌提出以下建议:
1)在保持热水器使用方便、价格实惠等优点的基础上,对热水器进行改进,从整体上提升热水器的质量。
2)提升安装人员及客服人员的整体素质,提高服务质量。制定安装费用收取明文细则,并进行公开透明,减少安装过程的乱收费问题。适度降低安装费用和材料费用,以此在大品牌的竞争中凸显优势。