Замените слова на stringi

Я пытаюсь использовать stringi для замены определенных слов с помощью stri_replace, однако столкнулся с проблемой при замене похожих частей слова. В приведенном ниже примере я исправляю орфографические ошибки в слове треугольник, но кажется, что это сбивает с толку, потому что «три» является частью «триан», является частью «треугольника», и получается как «треугольник». Я не так хорошо знаком с stri_replace, я упускаю какой-то аргумент? Спасибо за вашу помощь.

stri_replace_all_regex("The quick brown tri jumped over the lazy trian.",
      c("tri", "trian", "fox"), c("triangle",  "triangle", "bear"), 
         vectorize_all=FALSE)

## [1] "The quick brown trianglegle jumped over the lazy triangleglean."

person Cyan0121    schedule 29.01.2016    source источник
comment
Пожалуйста, уберите ошибку из заголовка. Это вы не понимаете регулярное выражение, а не ошибку.   -  person Tyler Rinker    schedule 30.01.2016


Ответы (2)


Вы можете изолировать слова, чтобы они были разными. \\W не является символом. Вы можете попробовать что-то вроде этого:

stri_replace_all_regex("The quick brown tri jumped over the lazy trian.",
                   paste0(c("trian", "tri",  "fox"), "(\\W)"), 
                   paste0(c("triangle","triangle", "bear"),"$1"),
                   vectorize_all = FALSE)
[1] "The quick brown triangle jumped over the lazy triangle."
person HubertL    schedule 29.01.2016
comment
Это работает довольно хорошо, но по какой-то причине, когда я пытаюсь заменить val на ценный, он подхватывает слово овал и превращает его в оценочный Код ниже: stri_replace_all_regex(Быстрый коричневый овал перепрыгнул через ленивый треугольник trian, fox), (\\W)), paste0(c(value,triangle, bear),$1), vectorize_all = FALSE) [1] Быстрый коричневый ovalue перепрыгнул через ленивый треугольник. - person Cyan0121; 10.02.2016
comment
Вам просто нужно сделать то же самое со словами, начинающимися : stri_replace_all_regex("The quick brown oval jumped over the lazy trian.", paste0("(\\W)", c("val", "trian", "fox"), "(\\W)"), paste0("$1", c("valuable","triangle", "bear"),"$2"), vectorize_all = FALSE), что дает [1] "The quick brown oval jumped over the lazy triangle." - person HubertL; 10.02.2016

Если вы не хотите, чтобы выполнялись частичные совпадения, завершите некоторые (или, может быть, даже все аргументы шаблона) пробелом (а также замените пробел:

stri_replace_all_regex("The quick brown tri jumped over the lazy trian.",
  pattern=c("tri "), repl=c("triangle "), 
     vectorize_all=FALSE)

stri_replace_all_regex("The quick brown tri jumped over the lazy trian.",
       c("tri ", "trian", "fox "), c("triangle ",  "triangle", "bear "), 
          vectorize_all=TRUE)
[1] "The quick brown triangle jumped over the lazy trian."
[2] "The quick brown tri jumped over the lazy triangle."  
[3] "The quick brown tri jumped over the lazy trian."     
person IRTFM    schedule 29.01.2016