如何从wordcloud中删除单词?

时间:2011-12-23 19:35:22

标签: r word-cloud

我正在使用R中的wordcloud包创建一个wordcloud,以及“Word Cloud in R”的帮助。

我可以轻松地做到这一点,但我想从这个wordcloud中删除单词。我在文件中有文字(实际上是一个excel文件,但我可以改变它),我想要排除所有这些单词,其中有几百个。有什么建议吗?

require(XML)
require(tm)
require(wordcloud)
require(RColorBrewer)
ap.corpus=Corpus(DataframeSource(data.frame(as.character(data.merged2[,6]))))
ap.corpus=tm_map(ap.corpus, removePunctuation)
ap.corpus=tm_map(ap.corpus, tolower)
ap.corpus=tm_map(ap.corpus, function(x) removeWords(x, stopwords("english")))
ap.tdm=TermDocumentMatrix(ap.corpus)
ap.m=as.matrix(ap.tdm)
ap.v=sort(rowSums(ap.m),decreasing=TRUE)
ap.d=data.frame(word = names(ap.v),freq=ap.v)
table(ap.d$freq)

2 个答案:

答案 0 :(得分:3)

@Tyler Rinker给出了答案,只需添加另一行removeWords(),但这里有更多细节。

假设你的excel文件名为nuts.xls并且只有一列这样的单词

stopwords
peanut
cashew
walnut
almond
macadamia

R中你可以这样继续

     library(gdata) # package with xls import function
     library(tm)
     # now load the excel file with the custom stoplist, note a few of the arguments here 
     # to clean the data by removing spaces that excel seems to insert and prevent it from 
     # importing the characters as factors. You can use any args from read.table(), which is
     # handy
     nuts<-read.xls("nuts.xls", header=TRUE, stringsAsFactor=FALSE, strip.white=TRUE)

     # now make some words to build a corpus to test for a two-step stopword removal process...
     words1<- c("peanut, cashew, walnut, macadamia, apple, pear, orange, lime, mandarin, and, or, but")
     words2<- c("peanut, cashew, walnut, almond, apple, pear, orange, lime, mandarin, if, then, on")
     words3<- c("peanut, walnut, almond, macadamia, apple, pear, orange, lime, mandarin, it, as, an")
     words.all<-data.frame(rbind(words1,words2,words3))
     words.corpus<-Corpus(DataframeSource((words.all)))

     # now remove the standard list of stopwords, like you've already worked out
     words.corpus.nostopwords <- tm_map(words.corpus, removeWords, stopwords("english"))
     # now remove the second set of stopwords, this time your custom set from the excel file, 
     # note that it has to be a reference to a character vector containing the custom stopwords
     words.corpus.nostopwords <- tm_map(words.corpus.nostopwords, removeWords, nuts$stopwords)

     # have a look to see if it worked
     inspect(words.corpus.nostopwords)
     A corpus with 3 text documents

     The metadata consists of 2 tag-value pairs and a data frame
     Available tags are:
          create_date creator 
     Available variables in the data frame are:
          MetaID 

     $words1
        , , , , apple, pear, orange, lime, mandarin, , , 

     $words2
        , , , , apple, pear, orange, lime, mandarin, , , 

     $words3
        , , , , apple, pear, orange, lime, mandarin, , , 

成功!标准停用词已经消失,excel文件中自定义列表中的单词也不见了。毫无疑问,还有其他方法可以做到。

答案 1 :(得分:-1)

将要制作数据广播的数据转换为数据框。 创建一个包含要删除的单词的CSV文件,并将其作为数据框读取。然后,您可以制作anti_join

allWords = as.data.frame(table(bigWords$Words))

wordsToAvoid = read.csv("wordsToDrop.csv")

finalWords = anti_join(allWords, wordsToAvoid, by = "Words")