【问题标题】:How to remove words from wordcloud R package so that they can be included in the output?如何从 wordcloud R 包中删除单词,以便它们可以包含在输出中?
【发布时间】:2016-10-07 16:07:42
【问题描述】:

我正在使用 R Packages 存储库中带有描述“Word Cloud”的包“wordcloud”。当我从一些随机文本创建 wordcloud 时,一些单词会被自动省略,因为它们不应该是 wordcloud 的一部分。

代码:

library(RColorBrewer)
library(NLP)
library(wordcloud)
library(tm)


wordcloud("foo bar oh oh by by bye bingo hell no", scale=c(3,1), colors=brewer.pal(6,"Dark2"),random.order=FALSE)

输出:

我想在 wordcloud 中保留“oh”和“by”之类的词。怎么样?

编辑:我更喜欢从 wordcloud 包的停用词集中删除这些词,而不是使用频率。

【问题讨论】:

    标签: r word-cloud r-package


    【解决方案1】:

    这是一种方法:

    library(wordcloud)
    library(tm)
    txt <- "foo bar oh oh by by bye bingo hell no"
    corp <- Corpus(VectorSource(txt))
    tdm <- TermDocumentMatrix(corp, control = list(wordLengths = c(-Inf, Inf)))
    m <- as.matrix(tdm)
    v <- sort(rowSums(m),decreasing=TRUE)
    d <- data.frame(word = names(v),freq=v)
    wordcloud(d$word,d$freq,min.freq=1)
    

    【讨论】:

    • 更新了问题,现在显示了获得所需输出的首选方法。
    • 如果您输入wordcloud::wordcloud,您可以看到该函数使用tm 包(corpus &lt;- tm_map(corpus, function(x) removeWords(x, stopwords())))来删除这些单词。所以你必须重写wordcloud() 函数。但是,使用tdm &lt;- TermDocumentMatrix(corp, control = list(wordLengths = c(-Inf, Inf), stopwords = setdiff(tm::stopwords(), c("by", "and")))) 的自然方式。
    【解决方案2】:

    wordcloud()有两种使用方式:

    • 一个包含所有单词的字符串作为主要参数:你现在做什么
    • 一个词向量和相应的频率向量

    第一个输入强制 wordcloud() 调用 tm,构成语料库,删除停用词,这是丢失两个字母词的步骤。

    一种简单的方法是恢复使用不需要 tm 包的 wordcloud,方法是在将字符串输入 wordcloud() 之前对其进行处理:

    library(stringr)
    library(wordcloud)
    library(RColorBrewer)
    
    ## The initial string
    mystring <- "foo bar oh oh by by bye bingo hell no"
    ## Split it and count frequencies
    tabl <- table(str_split(mystring,pattern=" "))
    ## Make the wordcloud: all words are there!
    wordcloud(names(tabl),tabl,scale=c(3,1), colors=brewer.pal(6,"Dark2"),random.order=FALSE)
    

    【讨论】:

    • 更新了问题,现在显示了获得所需输出的首选方法。
    • @JasminShah 为什么提议的解决方案如此糟糕以至于不考虑它?
    • @Dason,因为我需要这个用于特定目的,这样我就可以从集合中删除诸如“out”、“but”、“who”、“here”之类的词,并在 wordcloud 中查看它们.它们在任何输入中的数量都可能不同。对于频率,它适用于每个单词,但如果我希望它适用于一个或两个特定单词怎么办?我希望我说得够清楚。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-15
    • 2022-12-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多