我正在使用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)
答案 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")