【问题标题】:R: Replace Abbreviations\ WordsR:替换缩写词\单词
【发布时间】:2021-02-10 19:41:16
【问题描述】:

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

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

-缩写: USA, H2O, Type 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)}

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

【问题讨论】:

  • 如果您有data$MESSAGE 的样本,看看我们的解决方案是否正确,那就太好了。您介意将dput(sample(data$MESSAGE, 20)) 的输出附加到您的问题吗?
  • 使用 stringr::str_replace_all() 和命名向量进行替换
  • 一个元素可以包含多个值吗?即我们可以有一个像"USA H2O"这样的字符串吗?还是每个元素只包含一个值,就像示例中一样?
  • @teunbrand 感谢您的反馈 - 我在线程上添加了输入和所需输出数据的示例。再次感谢您。

标签: r gsub abbreviation


【解决方案1】:

如果您只需要替换整个单词(例如,bpSome 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-10-26
    • 2020-03-27
    • 2015-08-19
    • 2020-02-17
    • 1970-01-01
    • 1970-01-01
    • 2016-07-12
    相关资源
    最近更新 更多