【问题标题】:Removing StopWords from a Character using R使用 R 从字符中删除停用词
【发布时间】:2019-08-22 07:25:51
【问题描述】:

考虑到我有下面提到的字符串;

str_input <- c("Mellanox,Asia, China, India, JAVA, United States, APIs")

我使用了下面提到的 gsub 代码,它删除了我的特定 StopWords。

gsub(paste0("\\b(",paste(location_sw, collapse="|"),")\\b"), "", str_input)

其中,location_sw 包含我的停用词列表,如下所述

location_sw <- c('Rose', 'Java', 'JAVA', 'Mellanox', 'Microsoft', '144GiB', 'West',
                 'Amazon', 'Channel Asia', 'jClarity', 'APIs')

在使用上面提供的 gsub 代码时,我得到了下面提到的输出

",Asia, China, India, , United States, "

但是,我想要以下结果;

"Asia, China, India, United States"

我想在删除停用词后删除逗号。任何输入都会非常有帮助。

【问题讨论】:

    标签: r gsub


    【解决方案1】:

    另一种方法是将strsplit 字符串转换为字符向量,然后将setdiff 相对于location_sw

    out <- setdiff(strsplit(str_input, split = ",\\s*")[[1]], location_sw)
    out
    #> [1] "Asia"          "China"         "India"         "United States"
    

    如果需要,我们可以paste它回一个字符:

    paste(out, collapse = ", ")
    #> [1] "Asia, China, India, United States"
    

    【讨论】:

      【解决方案2】:

      你可以使用

      str_input <- c("Mellanox,Asia, China, India, JAVA, United States, APIs")
      rx <- paste0("(?:,\\s*)*\\b(?:",paste(location_sw, collapse="|"),")\\b")
      trimws(gsub(rx, "", str_input), whitespace = "[\\s,]")
      ## => [1] "Asia, China, India, United States"
      

      (?:,\\s*) 将匹配 0 次或多次出现的逗号,后跟 0 次或更多空格。

      带有whitespace = "[\\s,]" 的修剪将删除前导和尾随空格和逗号。

      【讨论】:

        【解决方案3】:

        base 选项:

        paste(lapply(strsplit(str_input,",|,\\s"), function(x) 
                       x[!x %in% location_sw])[[1]],collapse=", ")
            [1] "Asia, China, India, United States"
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2013-12-16
          • 2014-05-22
          • 1970-01-01
          • 2014-06-06
          • 2015-02-25
          • 2021-09-26
          • 1970-01-01
          相关资源
          最近更新 更多