R:只替换整个语句(而不是它们的一部分)

数据挖掘 r 文本挖掘
2022-02-25 08:21:17

我有一个数据集 DS。我想按照如下模式替换模式将包含的语句替换为其他语句:

在此处输入图像描述

我使用了以下功能:

from_distincts_to_origins <- function(patternST, replacementST,originalFile){

  #---------------------------------------
  patternST<-paste0('\\b',patternST,'\\b')
  #---------------------------------------
  # we have to point back to the original data set
  file_origin_DF <- as.data.frame(originalFile)

  file_output <- file_origin_DF
  for(i in 1:length(patternST))   { 
    where <- file_output[[1]]#vector
    file_output <- apply(file_output,  
                         2,
                         function(x) sub(patternST[i], 
                                         replacementST[i], 
                                         where, 
                                         #ignored.case=FALSE, 
                                         perl=FALSE, 
                                         fixed=FALSE, useBytes=FALSE)
    )

    file_output <- as.data.frame(file_output, stringsAsFactors =F) # in order to work
  }       

  return(file_output)
}

将会发生的是,R 将开始用“足球”代替所有“我喜欢足球”。当它传递到第二行时,它会寻找“I like football,W Lazio”,但它只会找到“ football,W Lazio ”,因此这些行不会被“Lazio”替换。

一种可能的解决方案是对 Pattern 进行排序,使其顶部有最长的字符串,但这只会减少替换缺失。

R中有另一种方法可以做到这一点吗?

1个回答

我相信,如果您将确切的正则表达式锚点添加到您尝试匹配的模式中,这将有所帮助。在您的情况下,添加"^I like football$"为您尝试匹配的模式将查找完全像这样开始和结束的字符串。这样你就有:

>grepl("^I like football$", "I like football, W Lazio")
[1] FALSE

这将至少消除您现在面临的问题。
我不确定我是否理解问题的其余部分......据我所知,你有一些其他的字符向量text,例如,你正在尝试在里面寻找向量的元素pattern,如果匹配,替换它们从replacement右边对应的向量元素?