首页 > 其他分享 >用R语言进行网站评论文本挖掘聚类|附代码数据

用R语言进行网站评论文本挖掘聚类|附代码数据

时间:2024-04-09 18:22:54浏览次数:28  
标签:rating word res result 聚类 挖掘 文本

原文链接:http://tecdat.cn/?p=3994

原文出处:拓端数据部落公众号

 最近我们被客户要求撰写关于文本挖掘的研究报告,包括一些图形和统计输出。

对于非结构化的网站中文评论信息,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(r;  

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)#每个类中心

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

the hidden value of voice conversations-1289606784_standard_1536x1536.webp


最受欢迎的见解

1.Python主题建模LDA模型、t-SNE 降维聚类、词云可视化文本挖掘新闻组

2.R语言文本挖掘、情感分析和可视化哈利波特小说文本数据

3.r语言文本挖掘tf-idf主题建模,情感分析n-gram建模研究

4.游记数据感知旅游目的地形象

5.疫情下的新闻数据观察

6.python主题lda建模和t-sne可视化

7.r语言中对文本数据进行主题模型topic-modeling分析

8.主题模型:数据聆听人民网留言板的那些“网事”

9.python爬虫进行web抓取lda主题语义数据分析

标签:rating,word,res,result,聚类,挖掘,文本
From: https://www.cnblogs.com/tecdat/p/18124518

相关文章

  • node.js实现代码读取文本txt文件
    1,安装node2,[email protected]@8.4.2-save3,runnodejsnode.\version.js nodecodeconsthttp=require('http');consthostname='127.0.0.1';constport=3000;letfs=require('fs')console.log(fs......
  • 界面组件DevExpress WinForms v23.2 - 功能区、富文本编辑器功能升级
    DevExpressWinForms拥有180+组件和UI库,能为WindowsForms平台创建具有影响力的业务解决方案。DevExpressWinForms能完美构建流畅、美观且易于使用的应用程序,无论是Office风格的界面,还是分析处理大批量的业务数据,它都能轻松胜任!DevExpressWinForms控件日前正式发布了v23.2,此版......
  • PHP对接-UEditor富文本 持续更新中
    遇坑,新增自定义按钮时,不显示按钮//新增代码 UE.registerUI('imgsss',function(editor,uiName){ //注册按钮执行时的command命令,使用命令默认就会带有回退操作 editor.registerCommand(uiName,{ execCommand:function(){ varme=this; openAlbu......
  • R语言层次聚类、多维缩放MDS分类RNA测序(RNA-seq)乳腺发育基因数据可视化|附数据代码
    全文链接:https://tecdat.cn/?p=35691原文出处:拓端数据部落公众号分析师:QingLi在生物学和医学研究中,乳腺发育是一个复杂而精细的过程,涉及众多基因的表达调控。近年来,随着高通量测序技术的发展,RNA测序(RNA-seq)技术已经成为研究基因表达模式的有力工具。通过RNA-seq技术,我们可以获......
  • DataGridView 头部行高自动适应文本
    C#WinformDataGridView头部行高自动适应文本//头部行高自动适应DGV.ColumnWidthChanged+=DGV_ColumnWidthChanged;///<summary>///DataGridView头部行高自动适应文本///</summary>///<paramna......
  • 文本转语音常用的几个python库
    在Python编程领域,文本到语音(Text-to-Speech,TTS)的转换是一个常见的需求,尤其是在开发能够与用户交互的应用程序时。以下是几个流行的Python库,它们可以帮助开发者实现文本到语音的转换,并且有的可以将转换后的语音保存为MP3文件。gTTS(GoogleText-to-Speech)gTTS是一个依......
  • 总结链---对大文本通过拆分总结摘要
    fromlangchain.chainsimportload_summarize_chainfromlangchain_community.document_loadersimportTextLoader#文本加载器fromlangchain_community.llms.ollamaimportOllamafromlangchain_text_splittersimportRecursiveCharacterTextSplitterllm=Ollama(mod......
  • Python实战:使用Python进行Faces聚类
    1.引言Faces聚类是一种基于人脸图像的聚类算法,它可以将相似的人脸图像分组在一起,从而实现对大规模人脸图像库的分类和识别。通过Python实现Faces聚类,我们可以加深对编程语言的理解,同时也能够体会到编程带来的便利。2.环境准备在开始编写Faces聚类系统之前,我们需......
  • JS如何实现点击复制功能,JS点击复制文本
    div,p等标签不可以,建一个文本框标签,不能给display:none;我们需要对他进行一个定位,让透明看不见找不到,点击复制,将需要复制的内容赋值给文本框,接着对文本框进行全选,在进行复制操作即可<p id="content">博客园</p><textarea id="text" style="position: fixed;top: 10000px;l......
  • 在RichTextBox mvvm中使用wpf工具包在插入符号处插入文本
    ,可以通过以下步骤实现:首先,确保你已经在项目中引用了WPF工具包。可以通过在VisualStudio中的项目引用中添加对WPF工具包的引用来完成。在你的MVVM模式中,创建一个名为"InsertTextCommand"的命令类,用于处理插入文本的逻辑。这个命令类应该实现ICommand接口,并且包含一个Execute方......