R:替换缩写词\单词

R: Replace Abbreviations\ Words

我已经尝试解决这个问题一整天了,但没有任何改善。

我正在尝试将以下缩写替换为我的数据集中的以下所需词:

-缩写: USA, H2O, Type 3, T3, bp

输入数据例如

期望的输出是

我尝试了以下代码但没有成功:

   data= read.csv(C:"xxxxxxx, header= TRUE")
   lowercase= tolower(data$MESSAGE)
   dict=list("\busa\b"= "united states of america", "\bh2o\b"= 
   "water", "\btype 3\b|\bt3\"= "type 3 disease", "\bbp\b"= 
   "blood pressure")
   for(i in 1:length(dict1)){
   lowercasea= gsub(paste0("\b", names(dict)[i], "\b"), 
   dict[[i]], lowercase)}

我知道我肯定做错了什么。有人可以指导我吗?提前谢谢你。

如果您只需要替换整个单词(例如 Some bp. 中的 bp 而不是 bpcatalogue 中的),您将必须使用单词边界从缩写中构建正则表达式, 并且 - 因为你有多个单词的缩写 - 也按长度降序对它们进行排序(或者,例如 type 可能会在 type three 之前触发替换)。

示例代码:

abbreviations <- c("USA", "H2O", "Type 3", "T3", "bp")
desired_words <- c("United States of America", "Water", "Type 3 Disease", "Type 3 Disease", "blood pressure")
df <- data.frame(abbreviations, desired_words, stringsAsFactors = FALSE)
x <- 'Abbreviations: USA, H2O, Type 3, T3, bp'
sort.by.length.desc <- function (v) v[order( -nchar(v)) ]

library(stringr)
str_replace_all(x, 
    paste0("\b(",paste(sort.by.length.desc(abbreviations), collapse="|"), ")\b"), 
    function(z) df$desired_words[df$abbreviations==z][[1]][1]
) 

paste0("\b(",paste(sort.by.length.desc(abbreviations), collapse="|"), ")\b") 代码创建了一个像 \b(Type 3|USA|H2O|T3|bp)\b 这样的正则表达式,它匹配 Type 3USA 等,因为 \b 是整个单词单词边界。如果找到匹配项,stringr::str_replace_all 会将其替换为相应的 desired_word.

参见R demo online