2016-11-04 80 views
0

我申請removeWords過濾這樣的文集:tm_map刪除包含我的停用詞的詞嗎?

corpus <- Corpus(vs, readerControl = list(language="en")) 
corpus <- tm_map(corpus, content_transformer(tolower)) 
corpus <- tm_map(corpus, stripWhitespace) 
corpus <- tm_map(corpus, removeWords, c(stopwords("english"))) 
corpus <- tm_map(corpus, removeWords, bannedWords$V1) 

然而,這只是匹配工作正是,所以:

  • 他媽的被刪除
  • F * cking不會被刪除

如何刪除co ndain我的停用詞?

+0

不確定'tm',但如果你有涉及到一個額外的軟件包,'quanteda'有一個函數'OK selectFeatures'(和相關的'removeFeatures'),它允許使用正則表達式和glob類型的通配符。有關示例,請參閱'?quanteda :: selectFeatures'。 – Jota

+0

借調Quanteda。它比tm更直截了當。很快就會成爲文本處理的標準。 – lmkirvan

回答

0

我找到了答案通過查看tmsource code爲removeWords功能和擴展的正則表達式:

gsub(sprintf("(*UCP)\\b(%s)\\b", 

gsub(sprintf("(*UCP)\\b[a-zA-Z]*(%s)[a-zA-Z]*\\b", 

完整的功能

removeWordsContaining <- 
function(x, words) 
    UseMethod("removeWordsContaining", x) 
removeWordsContaining.character <- 
function(x, words) 
    gsub(sprintf("(*UCP)\\b[a-zA-Z]*(%s)[a-zA-Z]*\\b", 
       paste(sort(words, decreasing = TRUE), collapse = "|")), 
     "", x, perl = TRUE) 
removeWordsContaining.PlainTextDocument <- 
    content_transformer(removeWordsContaining.character) 

blog_corpus <- Corpus(vs, readerControl = list(language="en")) 
blog_corpus <- tm_map(blog_corpus, content_transformer(tolower)) 
blog_corpus <- tm_map(blog_corpus, stripWhitespace) 
blog_corpus <- tm_map(blog_corpus, removePunctuation) 
blog_corpus <- tm_map(blog_corpus, removeNumbers) 
blog_corpus <- tm_map(blog_corpus, removeWords, c(stopwords("english"))) 
blog_corpus <- tm_map(blog_corpus, removeWordsContaining, bannedWords$V1) 
2

你可以使用詞幹來帶來被禁止的單詞ba CK到他們的基本形式。看下面的例子。

library(tm) 

banned <- c("buck") 
text <- c("He is bucking the trend", "A buck is not worth a dollar anymore!") 

corpus <- Corpus(VectorSource(text), readerControl = list(language="en")) 
corpus <- tm_map(corpus, content_transformer(tolower)) 
corpus <- tm_map(corpus, stripWhitespace) 
corpus <- tm_map(corpus, stemDocument) 
corpus <- tm_map(corpus, removeWords, c(stopwords("english"), banned)) 

writeLines(as.character(corpus[[1]])) 
    trend 

,如果你不阻止文件,你會得到:

corpus <- Corpus(VectorSource(text), readerControl = list(language="en")) 
corpus <- tm_map(corpus, content_transformer(tolower)) 
corpus <- tm_map(corpus, stripWhitespace) 
corpus <- tm_map(corpus, removeWords, c(stopwords("english"), banned)) 

writeLines(as.character(corpus[[1]])) 
    bucking trend 
+0

感謝!我會測試詞幹,以確保'motherbucker'是正確的阻止:) –

+0

我想你將不得不將這一個添加到禁止列表。這不是官方動詞。詞幹將是motherbuck :-)。將此添加到禁止列表中將起作用。另請參閱「停用詞(英語)」和「停用詞(」智能「)」的區別以及如何使用詞幹。 – phiver