R语言绘制文字云

栏目: R语言 · 发布时间: 5年前

内容简介:本次项目课主要学习使用分词包 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

R语言绘制文字云 解压后的 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)

R语言绘制文字云

数据预处理

数据预处理就是噪声数据清除。首先,观察数据集的分布:

> summary(datas$freq.Freq)
> length(datas$freq.Freq)
> head(datas,100)

结果显示部分截图如下:

R语言绘制文字云

由上图中 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)

R语言绘制文字云 由 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),]

R语言绘制文字云 这里的抽样数量选择 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)))

输出结果如下:

R语言绘制文字云

上图中仍然有诸如 have、 our、 what、 some 这类不具有明显意义的单词,但是它仍然能给我们带来一定的信息,像 love、 HIPPOLYTA、 dead 和 die 出现的概率就很高,从某个层面上反映了《仲夏夜之梦》这个故事主题。

四、实验总结

基于R语言的交互式环境,结合文本分词包 ‘Rwordseg’对名著内容进行词频分析,同通过包‘wordcloud’绘制词云,对提取的数据进行了可视化。整个实验让我们熟悉了R语言的基础以及加深巩固,并且学习了如何调用R包来处理数据并将其可视化。

五、课后习题

观察大写单词的频数,并且尝试提取大写单词组成的数据集,并总结单词背后的意义。


以上所述就是小编给大家介绍的《R语言绘制文字云》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

数学建模

数学建模

[美] Frank R.Giordano,Maurice D.Weir,William P.Fox / 机械工业出版社 / 2004-1 / 45.00元

数学建模是用数学方法解决各种实际问题的桥梁。本书分离散建模(第1~9章)和连续建模(第10~13章)两部分介绍了整个建模过程的原理,通过本书的学习,学生将**会在创造性模型和经验模型的构建、模型分析以及模型研究方面进行实践,增强解决问题的能力。 ·论证了离散动力系统,离散优化等技术对现代应用数学的发展的促进作用。 ·在创造性模型和经验模型的构建、模型分析以及模型研究中融入个人项目和小组......一起来看看 《数学建模》 这本书的介绍吧!

随机密码生成器
随机密码生成器

多种字符组合密码

RGB HSV 转换
RGB HSV 转换

RGB HSV 互转工具

HEX HSV 转换工具
HEX HSV 转换工具

HEX HSV 互换工具