曾经打算着,每天都要发一贴,但是昨天没有发,这两天都在学习文本分析,但是昨天学的不到位,所以没有发,今天补上了。好了,废话少说,直接来案例喽。
我用的文本是刚过去不久的十八大(shibada)六中全会全文。主要分为以下几个部分: 1、使用Rwordseg包进行分词处理2、获取词频数据3、使用wordcloud包做词云图 4、使用wordcloud升级版wordCloud2做词云图 (wordcloud这个函数paramater太多了,而且做出来的图比较死板,而它的升级版却很好的解决了这些问题)
好了,进行具体的操作~~~~ - library(rJava) #加载rJava包
- library(Rwordseg) #加载Rwordseg包
- installDict(
- "D:/R install/sougou dictionary/十八大报告节选.scel",
- dictname="十八大")#安装自定义词典
- listDict() #查看已加载的词典
- shibada<-read.table(file.choose())#打开要分析的文档,等价于shibada<-read.table("D:/R install/18 da.txt")
- head(shibada)#查看前六行
- shibada1<-readLines(file.choose())#按行读取文字,读取后只有一个自变量(V1),而read.table读取的方式是遇见空格就形成一个变量
- head(shibada1)#再次查看前六行
- shibada1<-gsub("\\s","",shibada1)#去除space键
- shibada1<-gsub(pattern =
- "[的|和|是|有|在|要|对|必|须|为|了把|]","",shibada1)#删除特殊字词
- shibada1<-gsub("\n","",shibada1)#删除Enter键
- head(shibada1)
- a<-lapply(shibada1,FUN=segmentCN)
- str(a)
- fenci<-unlist(lapply(shibada1,FUN=segmentCN))
- #使用lapply函数对文本进行分词(分词的结果返回来的是列表),使用unlist函数降结果转换为向量
- str(fenci)
- fenci1<-table(fenci) #计算频率
- fenci1<-sort(fenci1,decreasing = T)#排序
- d<-data.frame(fenci1)#构建数据框
- write.csv(d,file.choose())#储存词频文件
- # 做词云图
- install.packages("RColorBrewer")#wordcloud依赖的包
- library(RColorBrewer)
- install.packages("wordcloud")
- library(wordcloud)
- par(bg="lightyellow")
- wordcloud(d$fenci,d$Freq,scale = c(6,0.5),
- colors=c('red','blue','green','yellow','purple'),
- min.freq=5,max.words = 100,random.color = T,
- random.order = T,ordered.colors = F)
复制代码 注:1、所用的文档见:
2、rJava、Rwordseg包的安装见https://bbs.pinggu.org/thread-4930045-1-1.html
3、其中使用的函数,如file.choose(),gsub(),unlist(),lapply()等,我会在下一个帖子中进行讲解,大家权当做会就可以了,哈哈。
词云图:
完美的分割线
下面是用wordcloud2包做的词云图: - #wordcloud的升级版wordcloud2来做词云图
- install.packages("jsonlite")
- devtools::install_github("lchiffon/wordcloud2")#安装wordcloud2,使用install.packages("wordcloud2")会出现错误,因而用这两行代码
- library(wordcloud2)
- wordcloud2(d,size = 2,color = "random-light", backgroundColor = "grey")
- wordcloud2(d,size = 2,color = "random-light",shape='star', backgroundColor = "grey")#两种图形,一个圆形,一个五角星
- letterCloud(d,size = 1,word="畅",backgroundColor = "grey")#注意C是大写,word="畅"是指图形是这个汉字
复制代码上图:
注:图上底角出现的数字是该词的频率,是不是比wordcloud做出来的效果好多了,而且还能做出有个性的图
ok,这贴到此结束,后续自己还会坚持写的。
|