数极客首页

R语言数据挖掘实战案例:电商评论情感分析

本文的结构如下

通过对客户的评论,进行一系列的方法进行分析,得出客户对于某个商品的各方面的态度和情感倾向,以及客户注重商品的哪些属性,商品的优点和缺点分别是什么,商品的卖点是什么,等等..

2.文本挖掘主要的思想.

由于语言数据的特殊性,我们主要是将一篇句子中的关键词提取出来,从而将一个评论的关键词也提取出来,然后根据关键词所占的权重,这里我们用空间向量的模型,将每个特征关键词转化为数字向量,然后计算其距离,然后聚类,得到情感的三类,分别是正面的,负面的,中性的.用以代表客户对商品的情感倾向.

3.文本挖掘的主要流程:

点击快速开始—新建任务,输入任务名点击下一步,打开京东美的热水器页面

然后软件自动跳转到第一个商品的具体页面,我们点击评论,在弹出页面中点击 点击这个元素,看到评论也有很多页,这时我们又需要创建一个循环列表,同上,点击下一页—循环点击.然后点击我们需要抓取的评论文本,在弹出页面中点击创建一个元素列表以处理一组元素—-点击添加到列表—继续编辑列表,然后点击第2个评论在弹出页面中点击添加到列表—循环,再点击评论的文本选择抓取这个元素的文本.好了,此时软件会循环抓取本页面的文本,如图:

本例使用了京东平台下对于美的热水器的客户评论作为分析对象,按照流程,首先我们使用八爪鱼在京东网站上爬取了客户对于美的热水器的评论,部分数据如下!

文本短,基本上大量的评论就是一句话.

情感倾向明显:明显的词汇 如”好” “可以”

语言不规范:会出现一些网络用词,符号,数字等

重复性大:一句话出现词语重复

数据量大.

故我们需要对这些数据进行数据预处理,先进行数据清洗,

编辑距离去重其实就是一种字符串之间相似度计算的方法。给定两个字符串,将字符串A转化为字符串B所需要的删除、插入、替换等操作步骤的数量就叫做从A到B的编辑路径。而最短的编辑路径就叫字符串A、B的编辑距离。比如,“还没正式使用,不知道怎样,但安装的材料费确实有点高,380”与“还没使用,不知道质量如何,但安装的材料费确实贵,380”的编辑距离就是9.

首先,针对重复的评论我们要去重,即删掉重复的评论.

另外一句话中出现的重复词汇,这会影响一个评论中关键词在整体中出现的频率太高而影响分析结果.我们要将其压缩.

还有一些无意义的评论,像是自动好评的,我们要识别并删去.

4.3压缩语句的规则:

1.若读入与上列表相同,下为空,则放下

2.若读入与上列表相同,下有,判断重复, 清空下表

3.若读入与上列表相同,下有,判断不重,清空上下

4.若读入与上列表不同,字符>=2,判断重复,清空上下

5.若读入与上列表不同,下为空,判断不重,继续放上

6.若读入与上列表不同,下有,判断不重,放下

7.读完后,判断上下,若重则压缩.

4.4然后我们再进行中文的分词,分词的大致原理是:

中文分词是指将一段汉字序列切分成独立的词。分词结果的准确性对文本挖掘效果至关重要。目前分词算法主要包括四种:字符串匹配算法、基于理解的算法、基于统计的方法和基于机器学习的算法。

1.字符串匹配算法是将待分的文本串和词典中的词进行精确匹配,如果词典中的字符串出现在当前的待分的文本中,说明匹配成功。常用的匹配算法主要有正向最大匹配、逆向最大匹配、双向最大匹配和最小切分。

2.基于理解的算法是通过模拟现实中人对某个句子的理解的效果进行分词。这种方法需要进行句法结构分析,同时需要使用大量的语言知识和信息,比较复杂。

3.基于统计的方法是利用统计的思想进行分词。单词由单字构成,在文本中,相邻字共同出现的次数越多,他们构成词的概率就越大;因此可以利用字之间的共现概率来反映词的几率,统计相邻字的共现次数,计算它们的共现概率。当共现概率高于设定的阈值时,可以认为它们可能构成了词

4.最后是基于机器学习的方法:利用机器学习进行模型构建。构建大量已分词的文本作为训练数据,利用机器学习算法进行模型训练,利用模型对未知文本进行分词。

4.5得到分词结果后,

我们知道,在句子中经常会有一些”了””啊””但是”这些句子的语气词,关联词,介词等等,这些词语对于句子的特征没有贡献,我们可以将其去除,另外还有一些专有名词,针对此次分析案例,评论中经常会出现”热水器”,”中国”这是我们已知的,因为我们本来就是对于热水器的评论进行分析,故这些属于无用信息.我们也可以删除.那么这里就要去除这些词.一般是通过建立的自定义词库来删除.

4.6 我们处理完分词结果后,

便可以进行统计,画出词频云图,来大致的了解那些关键词的情况,借此对于我们下一步的分析,提供思考的材料.操作如下:

我们便开始着手建模分析了,在模型的选择面前,有很多方法,但总结下来就只有两类,分别向量空间模型和概率模型,这里分别介绍一个代表模型

模型一: TF-IDF法:

但是实际上,如果一个词条在一个类的文档中频繁出现,则说明该词条能够很好代表这个类的文本的特征,这样的词条应该给它们赋予较高的权重,并选来作为该类文本的特征词以区别与其它类文档。这就是IDF的不足之处.

模型二:.LDA模型

传统判断两个文档相似性的方法是通过查看两个文档共同出现的单词的多少,如TF-IDF等,这种方法没有考虑到文字背后的语义关联,可能在两个文档共同出现的单词很少甚至没有,但两个文档是相似的。

举个例子,有两个句子分别如下:

“乔布斯离我们而去了。”

“苹果价格会不会降?”

可以看到上面这两个句子没有共同出现的单词,但这两个句子是相似的,如果按传统的方法判断这两个句子肯定不相似,所以在判断文档相关性的时候需要考虑到文档的语义,而语义挖掘的利器是主题模型,LDA就是其中一种比较有效的模型。

LDA模型是一个无监督的生成主题模型,其假设:文档集中的文档是按照一定的概率共享隐含主题集合,隐含主题集合则由相关词构成。这里一共有三个集合,分别是文档集、主题集和词集。文档集到主题集服从概率分布,词集到主题集也服从概率分布。现在我们已知文档集和词集,根据贝叶斯定理我们就有可能求出主题集。具体的算法非常复杂,这里不做多的解释,有兴趣的同学可以参看如下资料

http://www.52analysis.com/shujuwajue/2609.html

http://blog.csdn.net/huagong_a … 37616

4.8 项目总结

1.数据的复杂性更高,文本挖掘面对的非结构性语言,且文本很复杂.

2.流程不同,文本挖掘更注重预处理阶段

3.总的流程如下:

1.舆情分析

2.搜索引擎优化

3.其他各行各业的辅助应用

6.分析工具:

ROST CM 6是武汉大学沈阳教授研发编码的国内目前唯一的以辅助人文社会科学研究的大型免费社会计算平台。该软件可以实现微博分析、聊天分析、全网分析、网站分析、浏览分析、分词、词频统计、英文词频统计、流量分析、聚类分析等一系列文本分析,用户量超过7000,遍布海内外100多所大学,包括剑桥大学、日本北海道大学、北京大学、清华大学、香港城市大学、澳门大学众多高校。下载地址: http://www.121down.com/soft/softview-38078.html

RStudio是一种R语言的集成开发环境(IDE),其亮点是出色的界面设计及编程辅助工具。它可以在多种平台上运行,包括windows,Mac,Ubuntu,以及网页版。另外这个软件是免费和开源的,可以在官方网页:www.rstudio.org

上下载。

7.1 Rostcm6实现:

这是处理前的文本内容,我们将爬取到的数据,只去除评论这一字段,然后保存为TXT格式,打开如下,按照流程我们先去除重复和字符,英文,数字等项.

7.2 R的实现

这里需要安装几个必须包,因为有几个包安装比较复杂,这里给了链接http://blog.csdn.net/cl1143015 … 82731

大家可以参看这个博客安装包.安装完成后就可以开始R文本挖掘了

加载工作空间

library(rJava)

library(tmcn)

library(Rwordseg)

library(tm)

setwd(“F:/数据及程序/chapter15/上机实验”)

data1=readLines(“./data/meidi_jd_pos.txt”,encoding = “UTF-8″)

head(data1)

data<-data1[1:100]

—————————————————————#Rwordseg分词

data1_cut=segmentCN(data1,nosymbol=T,returnType=”tm”)

删除n,英文字母,数字

data1_cut=gsub(“”,””,data1_cut)

data1_cut=gsub(“[a-z]*”,””,data1_cut)

data1_cut=gsub(“d+”,””,data1_cut)

write.table(data1_cut,’data1_cut.txt’,row.names = FALSE)

Data1=readLines(‘data1_cut.txt’)

Data1=gsub(‘”‘,”,data1_cut)

length(Data1)

head(Data1)

———————————————————————– #加载工作空间

library(NLP)

library(tm)

library(slam)

library(topicmodels)

R语言环境下的文本可视化及主题分析

setwd(“F:/数据及程序/chapter15/上机实验”)

data1=readLines(“./data/meidi_jd_pos_cut.txt”,encoding = “UTF-8”)

head(data1)

stopwords<- unlist (readLines(“./data/stoplist.txt”,encoding = “UTF-8”))

stopwords = stopwords[611:length(stopwords)]

删除空格、字母

Data1=gsub(“”,””,Data1)

Data1=gsub(“[a~z]*”,””,Data1)

Data1=gsub(“d+”,””,Data1)

构建语料库

corpus1 = Corpus(VectorSource(Data1))

corpus1 = tm_map(corpus1,FUN=removeWords,stopwordsCN(stopwords))

建立文档-词条矩阵

sample.dtm1 <- DocumentTermMatrix(corpus1, control = list(wordLengths = c(2, Inf)))

colnames(as.matrix(sample.dtm1))

tm::findFreqTerms(sample.dtm1,2)

unlist(tm::findAssocs(sample.dtm1,’安装’,0.2))

—————————————————————–

#主题模型分析

Gibbs = LDA(sample.dtm1, k = 3, method = “Gibbs”,control = list(seed = 2015, burnin = 1000,thin = 100, iter = 1000))

最可能的主题文档

Topic1 <- topics(Gibbs, 1)

table(Topic1)

每个Topic前10个Term

Terms1 <- terms(Gibbs, 10)

Terms1

——————————————————————- #用vec方法分词

library(tmcn)

library(tm)

library(Rwordseg)

library(wordcloud)

setwd(“F:/数据及程序/chapter15/上机实验”)

data1=readLines(“./data/meidi_jd_pos.txt”,encoding = “UTF-8”)

d.vec1 <- segmentCN(data1,returnType = “vec”)

wc1=getWordFreq(unlist(d.vec1),onlyCN = TRUE)

wordcloud(wc1$Word,wc1$Freq,col=rainbow(length(wc1$Freq)),min.freq = 1000)

#

8.结果展示与说明

这是分析的部分结果.可以看到大部分客户的评论包含积极情绪,说明了客户对于美的热水器认可度比较高满意度也可以,当然,我们仅凭情感分析的结果是无法看出,客户到底对于哪些方面满意,哪些方面不满意,我们有什么可以保持的地方,又有哪些需要改进的地方,这就需要我们的另一项结果展示.

安装方面的问题

热水器价格方面比较便宜

热水器功能方面 加热快,

京东的服务和送货比较快.

另外值得我们注意的是,云图里面,也有些”好”,”大”,”满意”等等出现比较多的词,我们尚且不知道这些词背后的语义,这就需要我们去找到相应的评论,提取出这些词相应的主题点.再加以优化分析的结果

来源:PPV ?文:@白加黑治感冒

本文采用「CC BY-SA 4.0 CN」协议转载学习交流,内容版权归原作者所有,如涉作品、版权和其他问题请联系「我们」处理。

发表评论

评论已关闭。

相关文章