内容简介:本次项目课主要学习使用分词包 Rwordseg 对莎士比亚的名著《仲夏夜之梦》中的内容进行单词频数统计,以及进行数据清洗,并提取关键词,最后使用包 wordcloud 根据关键词出现的频数对该书绘制标签云图,从而在一定程度上了解名著。本实验环境采用带桌面的 Ubuntu Linux 环境,无需密码自动登录,系统用户名 shiyanlou,实验中会用到桌面上的程序:本课程难度为一般,属于初级级别课程,适合具有R基础的用户,熟悉R基础知识加深巩固。
基于R语言实现文字云的绘制
一、实验介绍
1.1 实验内容
本次项目课主要学习使用分词包 Rwordseg 对莎士比亚的名著《仲夏夜之梦》中的内容进行单词频数统计,以及进行数据清洗,并提取关键词,最后使用包 wordcloud 根据关键词出现的频数对该书绘制标签云图,从而在一定程度上了解名著。
1.2 实验知识点
- 数据挖掘的基本原理
- R代码对《仲夏夜之梦》中关键词提取的具体实现
- 分词包‘Rwordseg’的基本使用
- 数据清洗的基本使用
1.3 实验环境
本实验环境采用带桌面的 Ubuntu Linux 环境,无需密码自动登录,系统用户名 shiyanlou,实验中会用到桌面上的程序:
- R version 3.0.2
- Xfce终端
1.4 适合人群
本课程难度为一般,属于初级级别课程,适合具有R基础的用户,熟悉R基础知识加深巩固。
二、开发准备
2.1 环境准备
数据准备
在命令行终端输入以下命令行,并解压文件:
# 下载summer压缩包 $ wget http://labfile.oss.aliyuncs.com/courses/375/summer.tar.gz #解压文件 $ tar -zxvf summer.tar.gz
解压后的 summer.txt 文档就是本次项目使用的数据,是莎士比亚的名著《仲夏夜之梦》的英文电子档。
R 的逻辑包准备
项目中需要用到的分词包 Rwordseg 用于对文本中的词进行频数统计,该包是 R 中的中文分词包,这里面用于英文文档的提取是因为文本挖掘包 tm 运行环境在 R-3.1.0 以上,而实验楼 ubuntu 系统自带的 R 版本比较低。因此,在英文单词比较少的情况下,使用中文分词包同样可以达到比较好的分词效果。
Rwordseg 包且依赖于 rJava 包,同时需要预装好 java 环境,以及 java 环境变量的配置。
首先,安装 rJava 方法如下:
由于网络原因配置 R 安装包的 CRAN 源,将下面内容添加到/usr/lib/R/etc/Rprofile.site。
# set a CRAN mirror local({r <- getOption("repos") r["CRAN"] <- "http://mirrors.aliyuncs.com/CRAN/" options(repos=r)})
安装 rJava:
# 进入 R 语言环境 $ sudo R # 如果没有安装,请安装 rJava 包 > install.packages('rJava') # 载入 rJava 包 > library(rJava)
具体的从本地安装 Rwordseg 包的流程如下:
# 下载 Rworgseg 的安装包 $ wget http://labfile.oss.aliyuncs.com/courses/375/Rwordseg_0.2-1.tar.gz # 解压 $ gunzip Rwordseg_0.2-1.tar.gz # 进入 R 语言的交互式环境 $ sudo R # 从本地安装逻辑包 > install.packages('Rwordseg_0.2-1.tar',repos=NULL,type='source')
三、实验步骤
“文字云”也称“词云”就是对网络文本中出现频率较高的“关键词”予以视觉上的突出,形成“关键词云层”或“关键词渲染”,从而过滤掉大量的文本信息,使浏览网页者只要一眼扫过文本就可以领略文本的主旨。
3.1 数据清洗
英文中很多单词并没有实际上的关键词作用,例如冠词 the、人称代词 he 等单词不能指向实际的意义,它们只是构成一句话的语法组成元素,那么这一类的词就需要被剔除,被清洗,这就是数据清洗,清洗是对文本关键词提取没有影响的单词。
文本分词
分词在英文中就是单词或者词组(本文主要是单词),一个单词在文中出现的频率越高就越能证明它在文章中占有的地位,也就是关键字。其中文本分词包 Rwordseg 就是用于提取单词。
下面使用 Rwordseg 对文档进行分词统计(输入?function 可以查询函数的具体使用方法):
# 加载包 > 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.Freq) > length(datas$freq.Freq) > head(datas,100)
结果显示部分截图如下:
由上图中 summary 函数的输出结果可知,频数的分布并不均匀,中位数为 1,说明文中有一半左右的单词都只是出现了一次而已,单词出现一次的可以忽略不计,且第 3 分位数为 3,也就是说 3362 个单词中,关键词主要分布在频数为 3-475 的单词中,因此需要将数据集中频数比较低的数据剔除。
观察 head 函数的运行结果,频数排名前 22 的单词均是冠词、人称代词、连接词、介词之类与文章内容无关的单词,从第 23 个开始,与文章有关的单词才开始出现,因此需要将这一类组成英文句子语法结构的单词剔除。
首先,使用 subset 函数实现数据集的初步筛选,剔除频数低的单词(关于 subset 函数的使用可以输入?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 行所代表的数据。
3.2 绘制文字云
# 加载词云包 > library(wordcloud) # 参数 scale 设置字体的大小,col 设置字体颜色为彩虹色 > wordcloud(words=new_sample$word,freq=new_sample$freq,scale=c(10,.5),col=rainbow(length(new_sample$freq)))
输出结果如下:
上图中仍然有诸如 have、 our、 what、 some 这类不具有明显意义的单词,但是它仍然能给我们带来一定的信息,像 love、 HIPPOLYTA、 dead 和 die 出现的概率就很高,从某个层面上反映了《仲夏夜之梦》这个故事主题。
四、实验总结
基于R语言的交互式环境,结合文本分词包 ‘Rwordseg’对名著内容进行词频分析,同通过包‘wordcloud’绘制词云,对提取的数据进行了可视化。整个实验让我们熟悉了R语言的基础以及加深巩固,并且学习了如何调用R包来处理数据并将其可视化。
五、课后习题
观察大写单词的频数,并且尝试提取大写单词组成的数据集,并总结单词背后的意义。
以上所述就是小编给大家介绍的《R语言绘制文字云》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- R语言绘制流程图(二)
- 一文详解如何用 R 语言绘制热图
- 中了数据可视化的毒:BBC如何使用R语言绘制数据图表?
- ViewGroup 默认顺序绘制子 View,如何修改?什么场景需要修改绘制顺序?
- Shader 绘制基础图形
- css绘制特殊图形
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
集创思维设计矩阵
慈思远 / 电子工业出版社 / 2017-4 / 72.00元
《集创思维设计矩阵——写给互联网人的设计指南》总结了作者从业7年以来的设计经历,在大量企业所面对的设计问题基础上,提出了枪型思维,即如何给产品更准确的定位。 在定位准确的基础上加以设计,提出了设计中高维度融合低维度的设计思维,即设计者可以从商业逻辑推演到设计逻辑,让设计更加精确;又提出了设计和计算的博弈,指出在每一步创新的基础上,设计者一定要清晰地评判设计的代价。这样设计后的产品才是可以和企......一起来看看 《集创思维设计矩阵》 这本书的介绍吧!