【问题标题】:R - remove word from a sentenceR - 从句子中删除单词
【发布时间】:2019-01-22 20:26:46
【问题描述】:

我在 R 中有一个向量,它在向量的最后一个索引处有一个单词列表。我需要从该列表中删除一些单词

sentence <- "This is a sample sentence with words like or to be removed"
wordsToRemove <- c("The","an", "very", "of", "or","in","a","uses","that","be")

splitSent <- strsplit(sentence, " ")

我尝试了wordsToRemove %in% list(splitSent),但这一切都是错误的。有没有其他办法处理?

注意:这句话是我的向量中的一个元素,它有 int,其他数据类型也是如此。我已经通过下面的链接 R: find vector in list of vectors

【问题讨论】:

  • 您可能需要splitSent[[1]][!splitSent[[1]] %in% wordsToRemove]

标签: r string


【解决方案1】:

我们可以尝试在此处使用sub 和正则表达式替换来涵盖您的所有条款。这个答案通过搜索以下正则表达式,然后用空字符串替换它来有效地删除它:

\s*\b(The|an|very|of|or|in|a|uses|that|be)\b

这将匹配您的任何条款,以及任意数量的前导空格。

sentence <- "This is a sample sentence with words like or to be removed"
sentence
wordsToRemove <- c("The","an", "very", "of", "or","in","a","uses","that","be")

regex <- paste0("\\s*\\b(", paste(wordsToRemove, collapse="|"), ")\\b")
output <- sub("^\\s+", "", gsub(regex, "", sentence, ignore.case=TRUE))
output

[1] "This is a sample sentence with words like or to be removed"
[1] "This is sample sentence with words like to removed"

请注意,我实际上对上面的sub 进行了额外调用,因为我们必须修剪模式可能遗漏的任何初始前导空格。

【讨论】:

  • 根据上面OP的评论,可能想指出ignore.case = TRUE选项。
  • 如果句子是向量的一部分并且我想对向量中句子的所有值执行此操作,这将如何变化
  • @Ankit 这听起来像是你第二次改变你的问题,所以我现在不愿意更新。如果你有这个额外的需求,你应该问另一个问题。
  • @Tim,问题总是以“我在 R 中有一个向量,它在向量的最后一个索引处有一个单词列表”开始。为混淆道歉,但这句话只是一个例子
  • 那我可能不明白你的问题。如果您遗漏了某些内容,您应该进行更新。
猜你喜欢
  • 1970-01-01
  • 2021-08-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多