Regex 如何从R中列的列表中删除单词

Regex 如何从R中列的列表中删除单词,regex,r,oracle,text,mining,Regex,R,Oracle,Text,Mining,我在表格中有一列标题,希望删除单独表格/向量中列出的所有单词 例如,标题表: “Lorem ipsum dolor” “坐下来,祝你好运” “elit,sed do eiusmod tempor” “不包括劳工” “等着瞧吧,大阿利夸。” 待删除:c(“Lorem”、“dolore”、“elit”) 输出: “ipsum dolor” “坐下来,祝你好运” “,sed do eiusmod tempor” “不包括劳工” “等着瞧吧。” 被列入黑名单的单词可能出现多次 tm软件包具有此功能,但当

我在表格中有一列标题,希望删除单独表格/向量中列出的所有单词

例如,标题表:

“Lorem ipsum dolor”
“坐下来,祝你好运”
“elit,sed do eiusmod tempor”
“不包括劳工”
“等着瞧吧,大阿利夸。”

待删除:c(“Lorem”、“dolore”、“elit”)

输出:

“ipsum dolor”
“坐下来,祝你好运”
“,sed do eiusmod tempor”
“不包括劳工”
“等着瞧吧。”

被列入黑名单的单词可能出现多次

tm软件包具有此功能,但当应用于wordcloud时。我需要的是保持列不变,而不是将所有行合并成一个字符串。当给定一组值作为模式时,正则表达式函数(gsub())似乎不起作用。Oracle SQL解决方案也很有趣。

首先读取数据:

lorem <- c("Lorem ipsum dolor",
           "sit amet, consectetur adipiscing",
           "elit, sed do eiusmod tempor",
           "incididunt ut labore",
           "et dolore magna aliqua.")

to.delete <- c("Lorem", "dolore", "elit")

output <- lorem
for (i in to.delete) {
  output <- gsub(i, "", output)
}
dat <- c("Lorem ipsum dolor",
           "sit amet, consectetur adipiscing",
           "elit, sed do eiusmod tempor",
           "incididunt ut labore",
           "et dolore magna aliqua.")
todelete <- c("Lorem", "dolore", "elit")
首先读取数据:

dat <- c("Lorem ipsum dolor",
           "sit amet, consectetur adipiscing",
           "elit, sed do eiusmod tempor",
           "incididunt ut labore",
           "et dolore magna aliqua.")
todelete <- c("Lorem", "dolore", "elit")

您也可以使用
stri\u replace\u all\u fixed

library(stringi)
lorem <- c("Lorem ipsum dolor",
           "sit amet, consectetur adipiscing",
           "elit, sed do eiusmod tempor",
           "incididunt ut labore",
           "et dolore magna aliqua.")

to.delete <- c("Lorem", "dolore", "elit")

#just a simple function call
library(stringi)
stri_replace_all_fixed(lorem, to.delete, '')

您也可以使用
stri\u replace\u all\u fixed

library(stringi)
lorem <- c("Lorem ipsum dolor",
           "sit amet, consectetur adipiscing",
           "elit, sed do eiusmod tempor",
           "incididunt ut labore",
           "et dolore magna aliqua.")

to.delete <- c("Lorem", "dolore", "elit")

#just a simple function call
library(stringi)
stri_replace_all_fixed(lorem, to.delete, '')

tm
-软件包具有以下功能:
tm:::删除单词。字符

其实施情况如下:

foo <- function(x, words){
  gsub(sprintf("(*UCP)\\b(%s)\\b", paste(sort(words, decreasing = TRUE), 
                                         collapse = "|")), "", x, perl = TRUE)
}

tm
-软件包具有以下功能:
tm:::删除单词。字符

其实施情况如下:

foo <- function(x, words){
  gsub(sprintf("(*UCP)\\b(%s)\\b", paste(sort(words, decreasing = TRUE), 
                                         collapse = "|")), "", x, perl = TRUE)
}

gsub(),谢谢,但如问题中所述,我无法使用一组值作为正则表达式的模式-我是否遗漏了什么?请将gsub()功能与循环结合起来。gsub(),谢谢,但如问题中所述,我无法使用一组值作为正则表达式的模式-我遗漏了什么吗?将gsub()功能与循环结合起来。非常感谢,我也在考虑循环gsub,我只是担心这是否在性能方面可行:to.delete列表有几千个字,因此,这将意味着对gsub的数千次执行——这可能是一个问题吗?它可能会很慢@jeremycg的答案在这种情况下可能会运行得更快。非常感谢,我也在考虑循环gsub,我只是担心这是否在性能方面可行:to.delete列表有几千个单词,因此这意味着执行了数千个gsub-这可能是个问题吗?它可能会很慢@在这种情况下,jeremycg的答案对您来说可能运行得更快。对于未来的读者来说,这种方法在长时间的“todelete”向量(我的例子中有数千个单词)中失败,因此循环有时似乎是不可避免的。对于未来的读者来说,这种方法在长时间的“todelete”向量(我的例子中有数千个单词)中失败,因此,循环有时似乎是不可避免的。
gsub("(*UCP)\\b(Lorem|elit|dolore)\\b","", x, perl = TRUE)