用R进行网站评论文本挖掘聚类

对于非结构化的网站中文评论信息,r的中文词频包可能是用来挖掘其潜在信息的好工具,要分析文本内容,最常见的分析方法是提取文本中的词语,并统计频率。频率能反映词语在文本中的重要性,一般越重要的词语,在文本中出现的次数就会越多。词语提取后,还可以做成词云,让词语的频率属性可视化,更加直观清晰。

比如对于如下的网站评论信息:

通过一系列的文本处理和高频词汇的提取,最后结合聚类,我们可以得到如下的可视化结果。

第一类客户:

第二类

第三类

这是根据某网站成交评论制作的可视化词云,词频的统计,分词和词云的制作都是用R,最后做了聚类,将不同的用户聚成了3个类别。这个图能很直观看到,每个类别的客户的特点。不过这张图中的词语还需要进行优化,因为有些术语或词组可能被拆分成了更小的词语,没有展示出来,为了演示,我就没再花更多时间去优化词库,主要介绍分析的过程与方法。

pinglun=readLines("E:\\ 手机评论1.txt")

write.table(pinglun,"E:\\ 手机评论整理.txt")

pinglun1=read.table("E:\\手机评论整理.txt",sep="|")

# == 文本预处理

res=pinglun1[pinglun1!=" "];

#剔除通用标题

res=gsub(pattern="[專賣店【未拆封順豐】||]+"," ",res);

#剔除特殊词

res=gsub(pattern="[我|你|的|了|是]"," ",res);

#清理文本里的回车!否则每个回车就会被识别成一段文本

res=gsub("\n","",res)

###############

library(rJava);

library(Rwordseg);

# == 分词+频数统计

words=unlist(lapply(X=res, FUN=segmentCN));

word=lapply(X=words, FUN=strsplit, " ");

v=table(unlist(word));

# 降序排序

v=rev(sort(v));

d=data.frame(word=names(v), freq=v);

# 过滤掉1个字和词频小于100的记录

d=subset(d, nchar(as.character(d$word))>1 & d$freq>=100)

# == 输出结果

write.table(d, file="E: \\worldcup_keyword.txt", row.names=FALSE)

#############绘制词汇图####################3

library("wordcloud")

mycolors <- brewer.pal(8,"Dark2")#设置一个颜色系:

wordcloud(d[1:30,]$word,d[1:30,]$freq,random.order=FALSE,random.color=FALSE,colors=mycolors,family="myFont3")

write.csv(d[1:30,], file="E:\\ 30个keyword.csv", row.names=FALSE)

############kmeans聚类#######################

res1=res[1:10000]#筛选500个样本做测试

words=unlist(lapply(X=res1, FUN=segmentCN));

word=lapply(X=words, FUN=strsplit, " ");

v=table(unlist(word));

# 降序排序

v=rev(sort(v));

d=data.frame(word=names(v), freq=v);

# 过滤掉1个字和词频小于100的记录

d=subset(d, nchar(as.character(d$word))>1 & d$freq>=100)#获得高频词汇

rating=matrix(0,length(res1),dim(d)[1])#生成评价矩阵

colnames(rating)=d[,1]#给矩阵列命名

for(i in 1:length(res1)){

words=unlist(lapply(X=res1[i], FUN=segmentCN));#对每一条记录分析获得词频

word=lapply(X=words, FUN=strsplit, " ");

v=table(unlist(word));

# 降序排序

v=rev(sort(v));

dd=data.frame(word=names(v), freq=v);

index=intersect(dd[,1],colnames(rating))#找到每条记录中拥有的高频词汇

if(length(index)==0)next;

for(j in 1:length(index)){

jj=which(dd[,1]==index[j])

rating[i,colnames(rating)==index[j]]=dd[jj,2][[1]]#高频词汇的数量赋值到评价矩阵

}

}

write.table(rating, file="E:\\ 评价矩阵.txt", row.names=FALSE)

kmeans(rating,5)#对评价矩阵进行k均值聚类

result=read.csv("E:\\ 聚类结果.csv")

colnames(result)=d[1:30,1]

###分类别

c1=result[result[,31]==1,]

c2=result[result[,31]==2,]

c3=result[result[,31]==3,]

freq1=apply(c1,2,sum)[-31]

freq2=apply(c2,2,sum)[-31]

freq3=apply(c3,2,sum)[-31]

library("wordcloud")

mycolors <- brewer.pal(8,"Dark2")#设置一个颜色系:

wordcloud(colnames(result)[-17],freq1[-17],random.order=FALSE,random.color=FALSE,colors=mycolors,family="myFont3")

wordcloud(colnames(result)[-17],freq2[-17],random.order=FALSE,random.color=FALSE,colors=mycolors,family="myFont3")

wordcloud(colnames(result)[-17],freq3[-17],random.order=FALSE,random.color=FALSE,colors=mycolors,family="myFont3")

######算法比较

y=rbind(matrix(rnorm(10000,mean=2,sd=0.3),ncol=10),matrix(rnorm(10000,mean=1,sd=0.7),ncol=10))#生成两类随机数合并

colnames(y)=c(paste("y",1:10))#变量名

#Kmeans算法聚类

cl=kmeans(y,2)

pch1=rep("1",1000)#类标号

pch2=rep("2",1000)

plot(y,col=cl$cluster,pch=c(rep("1",1000),rep("2",1000)),main="kmeans算法聚类图")#每个类样本

points(cl$centers,col=3,pch="*",cex=3)#每个类中心

最后可以得到直观的用户的聚类特征从而进一步进行研究。

原文发布于微信公众号 - 大数据挖掘DT数据分析(datadw)

原文发表时间:2017-03-25

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏CVer

[计算机视觉] 入门学习资料

本文将介绍计算机视觉相关的经典书籍,顶级期刊/会议,在线学习课程,常用开源库和安利小工具等。 简介 计算机视觉(Computer Vision) 计算机视觉是...

1.2K18
来自专栏AI研习社

当机器学习遇上运动鞋:摩擦,在这光滑的地上摩擦

在 GOAT(https://www.goat.com/),我们为买家和卖家创造了一个最大的运动鞋安全交易市场。帮助人们表达他们个人的风格和定位的运动鞋世界是 ...

1004
来自专栏数据小魔方

R语言构建层次分析模型不看一下吗~

AHP (Analytic Hierarchy Process)层次分析法是美国运筹学家Saaty教授于二十世纪80年代提出的一种实用的多方案或多目标的决策方法...

1742
来自专栏机器之心

资源 | 从语言建模到隐马尔可夫模型:一文详述计算语言学

机器之心整理 参与:路雪、蒋思源 计算语言学(computational linguistics)是一门跨学科的研究领域,它试图找出自然语言的规律,建立运算模型...

35910
来自专栏数说工作室

异常值检测

之前发过一篇讨论文章——异常值怎么整。 在原文评论区里(戳此→异常值怎么整?| 讨论)得到了各位大大的指教,数说君也受益匪浅,现在整理一下供大家参考: 聚类 ...

3445
来自专栏大数据挖掘DT机器学习

【趣味】数据挖掘(6)——借水浒传故事,释决策树思路

决策树 (又称判定树,Decision Tree)是硕、博士生数据挖掘课程要点和难点,教学实践表明,这一章需要数学基础知识多,难得有趣。明知是难点,偏向难...

3545
来自专栏AI科技评论

深度 | 清华大学博士生涂锋斌:设计神经网络硬件架构时,我们在思考些什么?(上)

基于神经网络的人工智能近年取得了突破性进展,正在深刻改变人类的生产和生活方式,是世界各国争相发展的战略制高点。 神经网络作为实现人工智能任务的有效算法之一,已经...

3216
来自专栏机器之心

谷歌微软等科技巨头数据科学面试107道真题:你能答出多少?

选自Learndatasci 机器之心编译 参与:李泽南 来自 Glassdoor 的最新数据可以告诉我们各大科技公司最近在招聘面试时最喜欢向候选人提什么问题。...

2857
来自专栏机器之心

机器之心「GMIS 2017」嘉宾揭秘:LSTM之父Jürgen Schmidhuber

2017 全球机器智能峰会(GMIS 2017),让我们近距离接触「LSTM 之父」Jürgen Schmidhuber。 2017 全球机器智能峰会(GMIS...

3118
来自专栏怀英的自我修炼

考研数学-1-导学

逻辑简单的题目,会用强大的计算量撑起整个的3小时。因此,要保证逻辑上想通的不丢分。

1032

扫码关注云+社区

领取腾讯云代金券