【问题标题】:Find matching one, two or three word phrases in a string in R在 R 中的字符串中查找匹配的一个、两个或三个单词短语
【发布时间】:2018-07-11 04:16:16
【问题描述】:

我正在尝试在 R 的数据框中识别、匹配和提取字符串的 char 列中的两个单词短语。

我有一个示例术语列表,例如:

phrases <- as.list(c("Business","Business Process", "Processes", "Business Processes"))

还有一个类似的字符串:

string <- "brings seamless integration among the business processes and financials."

我正在使用 str_extract_all 和 sapply,如下所示:

sapply(str_extract_all(tolower(string), paste(tolower(phrases), collapse = "|")), function(s) paste(s, collapse=', '))

这只是识别单个单词的术语,而不是两个单词的短语“业务流程”,这也是需要的。

当前输出为:[1]“业务,流程”

但我希望能够获得“业务、流程、业务流程”

我尝试过使用模式 \\b 并在两个词之间添加 \\s 但没有帮助。

我应该如何提取单词和双词短语?

编辑: 我需要将匹配项保留为数据框中的一列 - 我尝试了以下三个建议并收到以下错误:

$&lt;-.data.frame(*tmp*, 短语, value = c("business", "process", 中的错误: 替换有267行,数据有495

我的 DataFrame 有多个列,其中一列包含与短语列表匹配的字符串。我需要能够将所有匹配项作为逗号分隔值拉入字符串的同一行中。期望的输出

Row,   String,                                  Phrases
1,  Businesses are great,                       business
2,  Great thing are great, 
3,   Processes are great,                       processes
4,   Business Processes are great for business, business processes, processes, business

【问题讨论】:

    标签: r string extract


    【解决方案1】:

    这似乎有效

    tmp <- sapply(phrases,function(x) regmatches(string,gregexpr(paste0("\\b",x,"\\b"),string,ignore.case = T)))
     > unlist(tmp)
    [1] "business"           "processes"          "business processes"
    

    【讨论】:

      【解决方案2】:
      unname(mapply(function(x,y)str_extract(x,paste0(tolower(y),"\\b")),string,phrases))
      [1] "business"           NA                   "processes"          "business processes"
      

      【讨论】:

        【解决方案3】:

        使用grepl

        unlist(phrases[sapply(phrases, function(x) grepl(paste0("\\<", x, "\\>"), string, ignore.case = T))])
        #[1] "Business"           "Processes"          "Business Processes"
        

        或全部小写:

        unlist(tolower(phrases)[sapply(tolower(phrases), function(x) grepl(paste0("\\<", x, "\\>"), tolower(string)))])
        #[1] "business"           "processes"          "business processes"
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-12-06
          • 1970-01-01
          • 2022-12-13
          • 2022-01-19
          相关资源
          最近更新 更多