R语言绘制文字云

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

内容简介:本次项目课主要学习使用分词包 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语言绘制文字云》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

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

About Face 3

About Face 3

Alan Cooper、Robert Reimann、David Cronin / John Wiley & Sons / 2007-5-15 / GBP 28.99

* The return of the authoritative bestseller includes all new content relevant to the popularization of how About Face maintains its relevance to new Web technologies such as AJAX and mobile platforms......一起来看看 《About Face 3》 这本书的介绍吧!

CSS 压缩/解压工具
CSS 压缩/解压工具

在线压缩/解压 CSS 代码

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

多种字符组合密码

XML、JSON 在线转换
XML、JSON 在线转换

在线XML、JSON转换工具