2016-11-04 7 views
0

私はこのようなコーパスをフィルタリングするremoveWordsを適用しています:停止単語を含む単語を削除するtm_map?

  • のF * CKはF *
  • が削除されます。

    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) 
    

    しかし、それだけで正確にので、仕事をマッチングされますckingは削除されません

coネスト私のストップワード?

+0

ないtm' 'わからをしていますが、追加パッケージを含むとOKなら、' quanteda'は '機能を持っています正規表現とグロブ型のワイルドカードを使用できるselectFeatures(および関連する 'removeFeatures')があります。いくつかの例については '?quanteda :: selectFeatures'を参照してください。 – Jota

+0

QuantedaでSeconded。 tmよりずっと簡単です。すぐにrのテキスト処理の標準となるでしょう。 – lmkirvan

答えて

0

私はremoveWords機能についてtmライブラリsource codeを見てから正規表現を拡張することで答えを見つけた:

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

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

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

への完全な機能あなたは、ステミングを使用して禁止された言葉をもたらすことができます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

禁止リストに追加する必要があると思います。これは公式動詞ではありません。ステムはマザーバックです:-)。これを禁止リストに追加すると動作します。 'stopwords(" english ")と' stopwords( "smart") 'と' 'stem ''の使い方の違いも参照してください。 – phiver

関連する問題