2011-12-23 7 views
3

Я создаю wordcloud, используя пакет wordcloud в R, и помощь «Word Cloud in R».Как удалить слова из wordcloud?

Я могу сделать это достаточно легко, но я хочу удалить слова из этого словаcloud. У меня есть слова в файле (на самом деле файл 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) 
+4

Вместо или в дополнение к нему 'игнорируемых слов («английский»)' добавить стоп-слова из файла Excel, а также. Вы можете комбинировать векторы слов, чтобы сделать один вектор стоп-слов. Они исключены из слова «облако». –

ответ

3

@Tyler Ринкер дал ответ, просто добавьте еще одну строку 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. Несомненно, есть другие способы сделать это.

+0

Благодаря Бен и оловянный человек. Для меня сложилась какая-то комбинация. У меня возникли проблемы с загрузкой xls с помощью gdata, потому что многое, если оно было замаскировано, поэтому мои проблемы оказались дополнительным интервалом между excel и ячейками с несколькими словами. Я все это ценю! Благодаря! – user1108155

0

Преобразование данных, которые вы хотите сделать datacloud в фрейм данных. Создайте CSV-файл со словами, которые вы хотите удалить, и прочитайте их как фрейм данных. Вы можете сделать anti_join: