我正在尝试使用以下代码为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克,但我的输出中只有单个单词组合。
代码没有响应在NGramTokenizer函数中连续设置为不同值(2,3,4等)的最小值和最大值的变化。 我在代码中遗漏了什么,或者我在代码中调用的一个库(tm,ggplot2,wordcloud,RWeka)或它们的依赖项(如rJava)可能没有响应?如果有人可以就此问题提出一些建议或建议修改上述代码,我将非常感激。
谢谢, Saibal
答案 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)