【好文翻译】用R创建云词
在这篇文章中,我会向大家展示如何利用文本数据在R中建立云词。我们会使用一个包含20万个问题的数据集,而这数据集可以在这里下载(感谢reddit网站的用户trexmatt给我们提供的数据集)。
我们会使用这三个包:tm
, SnowballC
和
wordcloud
。
首先,我们要加载所需的包和读取数据。
library(tm)
library(SnowballC)
library(wordcloud)
jeopQ <- read.csv('JEOPARDY_CSV.csv', stringsAsFactors = FALSE)
那些你需要问的问题都可以在问题栏上找到答案。
现在我们会在文本数据方面进行一系列的操作依次简化这种过程。
首先,我们需要创建一个语料库。
jeopCorpus <- Corpus(VectorSource(jeopQ$Question))
接下来,我们把语料库内容转化为小写。
jeopCorpus <- tm_map(jeopCorpus, content_transformer(tolower))
然后,我们会去除所有的标点符号和停用词。停用词通常都会应用在英语语言中,如I,me,my等等。你可以通过使用stopwords('english')这条语句来查看整个停用词列表。
jeopCorpus <- tm_map(jeopCorpus, removePunctuation)
jeopCorpus <- tm_map(jeopCorpus, PlainTextDocument)
jeopCorpus <- tm_map(jeopCorpus, removeWords, stopwords('english'))
再下一步,我们会提取词干。这意味着所有的词都会转化成它们的原形(如learning -> learn, walked -> walk等等)。这可以确保任何形式的单词都可以转化为相同的形式只会在云词中出现一次。
jeopCorpus <- tm_map(jeopCorpus, stemDocument)
现在,我们来描绘一下云词。
wordcloud(jeopCorpus, max.words = 100, random.order = FALSE)
如果你想去除”this”和”that”这样的词汇,你可以在removeWords函数中写上这些词语,操作如下:
jeopCorpus <- tm_map(jeopCorpus, removeWords, c('the', 'this', stopwords('english')))
这里有以下几种方式可对它进行自定义操作:
比例尺(scale):这可以用于展现一定范围内文字的大小。
max.wordsand min.freq:这些参数可用于限制被标绘的字数。Max.words可以标出一个特定的词汇数以及丢弃最不常用的词,因此,min.freq会丢弃所有使用频率低于某一个特别的数值的词语。
随机顺序(random.order):通过把它设定为FALSE,我们可以使得所有出现频率最高的词语首先被标记。如果我们不这样设定,它会以一个随即顺序方式标记所有词语,而且出现频率最高的词也不必出现在中心位置。
Rot.per:这个值可以决定多少个部分的词语会纵向出现。
色彩(colors):默认值是黑色。如果你想基于不同的频率展现不同的颜色,你可以特殊设定一个向量的颜色,或者使用一个已经定义好的主色板。你可以在这里找到其中的清单。
这篇文章到这里就可以结束了。我希望你能享受使用它的过程。一如既往的,如果你有什么问题,请你大胆的留言或者在我的twitter上问问题。
记住,我在edX上的麻省理工学院《The Analytics Edge》课程上学会这种方法的。这是一个伟大的课程。如果你对数据科学感兴趣,我高度推荐你去学习这门课程。
原文链接:http://datascienceplus.com/building-wordclouds-in-r/
请关注“恒诺新知”微信公众号,感谢“R语言“,”数据那些事儿“,”老俊俊的生信笔记“,”冷🈚️思“,“珞珈R”,“生信星球”的支持!