删除除了向量中的单词之外的所有单词

时间:2016-02-05 22:34:48

标签: r stop-words

从文本或字符向量中删除停用词很常见。我使用removeWords包中的函数tm

但是,我正在尝试删除除了之外的所有单词。我有一个名为x的单词列表。当我使用

removeWords(text, x)

我收到此错误:

In gsub(sprintf("(*UCP)\\b(%s)\\b", paste(sort(words, decreasing = TRUE), PCRE pattern compilation error 'regular expression is too large'`

我也尝试过使用grep

grep(x, text)

但这不起作用,因为x是一个向量而不是单个字符串。

那么,如何删除不在该向量中的所有单词?或者,我怎样才能只选择向量中的单词?

1 个答案:

答案 0 :(得分:2)

如果您希望Major_Version作为grep的正则表达式模式,请使用x,这样您就可以在x <- paste(x, collapse = "|")中查找这些单词。但请记住,正则表达式可能仍然太大。如果您要删除任何 text的单词,您可以创建自己的函数:

stopword()

基本上,我们只是设置keep_stopwords <- function(text) { stop_regex <- paste(stopwords(), collapse = "\\b|\\b") stop_regex <- paste("\\b", stop_regex, "\\b", sep = "") tmp <- strsplit(text, " ")[[1]] idx <- grepl(stop_regex, tmp) txt <- paste(tmp[idx], collapse = " ") return(txt) } text = "How much wood would a woodchuck if a woodchuck could chuck wood? More wood than most woodchucks would chuck if woodchucks could chuck wood, but less wood than other creatures like termites." keep_stopwords(text) # [1] "would a if a could than most would if could but than other" 作为正则表达式来寻找任何这些单词。但是我们必须小心部分匹配,所以我们将每个停用词包装在stopwords()中以确保它是完全匹配。然后我们分割字符串,以便我们单独匹配每个单词并创建一个停用单词的索引。然后我们再将这些单词粘贴在一起并将其作为单个字符串返回。

修改

这是另一种更简单易懂的方法。它也不依赖于正则表达式,这在大型文档中可能很昂贵。

\\b