无法在R中获得n克词云

时间:2017-04-24 20:30:54

标签: r tm word-cloud

我正在尝试使用以下代码为bi-gram(以及更高的n克)创建一个词云 -

text_input <- scan("Path/Wordcloud.txt")
corpus <- Corpus(VectorSource(text_input))
corpus.ng = tm_map(corpus,removeWords,c(stopwords(),"s","ve"))
corpus.ng = tm_map(corpus.ng,removePunctuation)
corpus.ng = tm_map(corpus.ng,removeNumbers)
BigramTokenizer <- function(x) NGramTokenizer(x, Weka_control(min = 2, max = 2))
tdm.bigram = TermDocumentMatrix(corpus.ng,control = list(tokenize = BigramTokenizer))
tdm.bigram
freq = sort(rowSums(as.matrix(tdm.bigram)),decreasing = TRUE)
freq.df = data.frame(word=names(freq), freq=freq)
head(freq.df, 20) 
pal=brewer.pal(8,"Blues")
pal=pal[-(1:3)]
wordcloud(freq.df$word,freq.df$freq,max.words=100,random.order = F, colors=pal)

我在几个网站上看到类似的代码用于生成n克,但我的输出中只有单个单词组合。

Plot

代码没有响应在NGramTokenizer函数中连续设置为不同值(2,3,4等)的最小值和最大值的变化。 我在代码中遗漏了什么,或者我在代码中调用的一个库(tm,ggplot2,wordcloud,RWeka)或它们的依赖项(如rJava)可能没有响应?如果有人可以就此问题提出一些建议或建议修改上述代码,我将非常感激。

谢谢, Saibal

3 个答案:

答案 0 :(得分:0)

您错过了mentioning the token delimiter

token_delim <- " \\t\\r\\n.!?,;\"()"
BigramTokenizer <- NGramTokenizer(mycorpus, Weka_control(min=2,max=2, delimiters = token_delim))

这应该有用。

如果您需要一个有效的示例,可以查看这个五分钟的视频: https://youtu.be/HellsQ2JF2k

希望这有帮助。

答案 1 :(得分:0)

此外,其他一些人在使用语料库功能时遇到了问题。 尝试使用易失性语料库 语料库&lt; - VCorpus (VectorSource(text_input))

答案 2 :(得分:0)

我尝试了以下方法,并且有效:

> minfreq_bigram<-2
> bitoken <- NGramTokenizer(corpus, Weka_control(min=2,max=2))
> two_word <- data.frame(table(bitoken))
> sort_two <- two_word[order(two_word$Freq,decreasing=TRUE),]
> wordcloud(sort_two$bitoken,sort_two$Freq,random.order=FALSE,scale = 
c(2,0.35),min.freq = minfreq_bigram,colors = brewer.pal(8,"Dark2"),max.words=150)