R语言绘制文字云
差不多一年没有怎么认真写过博客了,最近要做毕业设计,记录一下有关实验。参考实验楼上一个实验。主要学习使用分词包
# 加载包 > library(Rwordseg) # 以字符串形式读入文本 > text<-readLines('summer.txt') # 清除所有空字符串的行 > res <- text[text!=""] # 使用segmentCN函数对字符串res进行分词归类 > words <- unlist(lapply(X=res,FUN=segmentCN)) # 以空字符串为分隔符对字符串分割并对每个单词位置进行赋值 > word <- lapply(X=words,FUN=strsplit," ") # 计算每个单词的频数 > v <- table(unlist(word)) # 按照单词出现的频数(词频)降序排列 > v <-sort(v,decreasing=T) # 将数据存储为数据框的形式,数据由单词和对应的频数组成 > datas <- data.frame(word=names(v),freq=v) 数据预处理 数据预处理就是噪声数据清除。首先,观察数据集的分布: > summary(datas$freq) > length(datas$freq) > head(datas,100) 由上图中summary函数的输出结果可知,频数的分布并不均匀,中位数为1,说明文中有一半左右的单词都只是出现了一次而已,单词出现一次的可以忽略不计,且第3分位数为3,也就是说3362个单词中,关键词主要分布在频数为3-475的单词中,因此需要将数据集中频数比较低的数据剔除。 观察head函数的运行结果,频数排名前22的单词均是冠词、人称代词、连接词、介词之类与文章内容无关的单词,从第23个开始,与文章有关的单词才开始出现,因此需要将这一类组成英文句子语法结构的单词剔除。 首先,使用subset函数实现数据集的初步筛选,剔除频数低的单词(关于 # 使用sunset函数选取关键词分布区域 > newdatas <- subset(datas,freq>=3) # 剔除与文章无关的单词 > newdatas <- newdatas[-c(1:22),] > nrow(newdatas) > head(newdatas,30) 由length函数的输出结果可知,清洗数据后保留了990个单词,由于初次清洗后的数据集仍然比较大,而且根据head函数查看排名前30的数据中仍然有很多与文章内容无关的单词,因此需要抽样;但是剔除这些单词,观察一些大写的单词:LYSANDER、HERMIA、BOTTOM、THESEUS这些专有名词都是需要关注的关键词,可能是人名或者地名。 # 设置随机种子 > set.seed(3000) # 抽样后使用floor函数对抽样结果取整 > sample_1 <- floor(runif(30,min=1,max=990)) # 新的数据集样本 > new_sample <- newdatas[c(sample_1,1),] 这里的抽样数量选择31(30+1),是取总体数量990的开平方31,其中由于排名第一的love这个单词是与文章内容有关的关键词,因此需要加入到样本中。因此选取的样本数据集应该就是将floor抽取的行号和第1行所代表的数据。 # 加载词云包 > library(wordcloud) # 参数scale设置字体的大小,col设置字体颜色为彩虹色 > wordcloud(words=new_sample$word,freq=new_sample$freq,scale=c(10,.5),col=rainbow(length(new_sample$freq))) (编辑:威海站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |