tm_map删除包含我的停用词的词吗?
问题描述:
我申请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我的停用词?
答
我找到了答案通过查看tm
库source 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)
答
你可以使用词干来带来被禁止的单词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
不确定'tm',但如果你有涉及到一个额外的软件包,'quanteda'有一个函数'OK selectFeatures'(和相关的'removeFeatures'),它允许使用正则表达式和glob类型的通配符。有关示例,请参阅'?quanteda :: selectFeatures'。 – Jota
借调Quanteda。它比tm更直截了当。很快就会成为文本处理的标准。 – lmkirvan