微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

R:替换缩写\单词

如何解决R:替换缩写\单词

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

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

-缩写:美国,H2O,3型,T3,bp

  • 期望词美国,水,3 型疾病,3 型疾病,血压

输入数据例如

  • [1] 我有 3 型,它被认为是该疾病最严重的阶段。

  • [2] 多喝 H2O 会让你的皮肤焕发光彩。

  • [3] 我有 T2 还是 T3?请有人帮忙。

  • [4] 我们在 美国 没有这个,但我听说未来 3 年内会提供。

  • [5] bp 高意味着我必须注意饮食?

所需的输出

  • [1] 我患有 3 型疾病,它被认为是最严重的阶段 疾病。

  • [2] 多喝会让你的皮肤焕发光彩。

  • [3] 我是否患有3 型疾病?请有人帮忙。

  • [4] 我们在美利坚合众国没有这个,但我听说未来 3 年内会提供。

  • [5] 血压高意味着我必须注意饮食?

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

   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)}

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

解决方法

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

示例代码:

abbreviations <- c("USA","H2O","Type 3","T3","bp")
desired_words <- c("United States of America","Water","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(",")\\b") 代码创建了一个像 \b(Type 3|USA|H2O|T3|bp)\b 这样的正则表达式,它匹配 Type 3USA 等作为整个单词,仅当 \b 是一个单词时边界。如果找到匹配项,stringr::str_replace_all 会将其替换为相应的 desired_word

参见R demo online

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。