对于现在这个数据的时代,数据的类型并不像以前以数值化为主这般单一,现在不同的网站、App都充斥着文本的数据,而这些文本数据的背后,更是代表了用户背后的情感信息,忽略了这些数据,可能会导致错失机会。比如我们在淘宝店中可以看到用户对产品的评价,由于各个人的意见都褒贬不一,所以就有使用情感分析去判断舆论的走势。下面就简单介绍一下分析的思路和过程:
一、数据的准备
首先我选择从天猫网上随便选一个产品网页,该页面中包含对该产品的用户评价,我们的首要任务就是将其爬取下来。现在的网页如下:戴尔电脑

评论信息如上截图,我们也发现所有的评论不在同一页面,每次抓取完一页的数据,就需要点击下一页,再抓取当前页面的评论数据。让我们用代码帮助我们完成点击下一页的动作,这样就可以大大提升我们抓取的效率:
# 网页url
url = 'https://detail.tmall.com/item.htm?id=589583463316&ali_refid=a3_430676_1006:1102672698:N:FKL6p+C5FWFe
PDRN++UfYbwTjZ9raDfZ:60c2645a6e0a04068b3416315863aa21&ali_trackid=1_60c2645a6e0a04068b3416315863aa21&spm=a231o.
7712113/g.1004.1&sku_properties=5919063:6536025'
library(RSelenium)
remDr <-remoteDriver(
browserName = "chrome",
remoteServerAddr = "localhost",
port = 4444L
)
remDr$open()
remDr$navigate(url)
library(rvest)
#抓取第一页的评论
review = remDr$getPageSource()[[1]]%>%read_html()%>%html_nodes(css ='div.tm-rate-fulltxt' )%>%html_text()
#循环抓取
i=2
while(i<11){
#定位每一页的"下一页"按钮的元素位置
A = as.character(paste0("//div[@class = 'rate-paginator']/a[@data-page='",i,"']"))
btn = remDr$findElement(using = 'xpath',value = A)
#点击当前元素
btn$clickElement()
#抓取当前页面的评论信息
rev = remDr$getPageSource()[[1]]%>%read_html()%>%html_nodes(css='div.tm-rate-fulltxt' )%>%html_text()
review = c(review,rev)
i=i+1
}
如图,就是部分的评论数据,此次一共爬取了240条评论数据 。
二、清洗及分词处理
对于刚刚爬取下来的评论数据,首先我们要去掉一些没有意义的符合和词语。比如标点符合、停用词、语气词和字母字符等等,下面我们就通过代码,对所有评论进行清洗。
library(stringr)
#去掉标点符号
fir_rew = str_remove_all(review,",|。| |!|:|?|\\.|~")
#去掉英文字符和数字
sec_rew = str_remove_all(fir_rew,"\\d|[a-zA-Z]")完成了对评论数据清洗,我们就需要对各条评论进行分词处理,因为一个句子我们用要让电脑明白是比较困难的,但是将句子拆分成词语,就能通过词语本身所代表的情感,判断是好评或者是差评。而R语言中我们通常使用jiebaR包。
library(jiebaR)
wk = worker()
words = segment(sec_rew,wk)
简单的代码就可以对评论进行分词,分词的效果和我们使用的分词引擎和词典配置都是有关的,如果使用的时候不太关心引擎的事,那么可以直接使用默认的worker就可以了,下面也给出worker()的具体参数及配置含义:

在jiebaR中通过show_dictpath()函数可以查看默认的标准词典,对于我们的使用来说,不同行业或不同的文字类型,我们可以通过将不同的词典添加到jiebaR默认的词典路径中,再使用函数worker()读取该词典,常用的各行业词典可以从搜狗输入法等下载。
在完成分词之后,我们需要去除一些没有意义的停用词、语气词等等,我的做法是通过匹配停用词词典和语气词词典,去掉词语中的无用的词语,从而筛选出我们需要用于感情分析的数据。而停用词语和语气词的词典在网上应该可以下载到,当然如果我们可以找到比较全面的词典,对我们去除无用词的工作会起到很大的帮助。
三、情感得分
在得到用于分析的词语数据之后,我们可以导入从网上下载的消极词词典和积极词词典,且我们对词典中的每个词语进行一个情感数值的赋值,比如消极词词典中的每个词语,我们都赋予其“-1”的得分,相反积极词词典就赋予“1”的得分,如下面的消极词词典:

之后就是匹配我们的词语数据与积极和消极词典中的词语,并为词语赋予数值,把不在两个词典中的词语情感分值赋予0,之后我们对计算所有词语的总得分,若总分为负数,则对该产品的差评比较多,反之好评较多。但是得分评价的效果与我们使用的词典是由很大关系的,如果我们的评价词语中与积极消极词典中的匹配度越大,则我们的评分就越全面,我们做出判断就越为准确。
四、词云可视化
既然我们都完成了分词这一部分的工作了,在我们计算完情感得分之后,我们可以对得到的词语进行词云可视化,之前在介绍rechart的时候也有提及到词云可视化,而现在我们就用wordcloud2包来实现可视化的效果。wordcloud2的函数就只有wordcloud(),使用的方法也比较简单,只需要传入包含词语就词语对应词频的数据框。比如我们直接对评论进行词云的可视化:
df = data.frame(x=sec_rew[1:50],y=sample(c(1:50),50))
wordcloud2(df)
wordcloud2的设置也是挺丰富的,参数如下:
size:字体大小,默认为1,一般来说该值越小,生成的形状轮廓越明显
fontFamily:字体,如‘微软雅黑’
fontWeight:字体粗细
color:字体颜色
backgroundColor:背景颜色
minRontatin与maxRontatin:字体旋转角度范围的最小值以及最大值
rotationRation:字体旋转比例
shape:词云形状
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/31537575/viewspace-3137308/ ,如需转载,请注明出处,否则将追究法律责任。