You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在R语言中批量提取文本中两类关键词的所有组合生成数据框

高效实现R语言中关键词对的匹配组合提取

针对长关键词列表的场景,推荐使用向量化字符串匹配+嵌套数据展开+内连接的方案,替代暴力grepl+merge,大幅提升效率。以下是具体实现:

依赖包加载

library(tidyverse)
library(stringr)

测试数据构造

# 示例数据框(ID+文本列)
df <- tibble(
  ID = c(1, 2, 3),
  text = c(
    "苹果和香蕉都是水果,还有橙子",
    "猫和狗是宠物,兔子也是",
    "汽车和自行车属于交通工具,火车也是"
  )
)

# 示例关键词列表
listX <- c("苹果", "猫", "汽车")
listY <- c("香蕉", "狗", "自行车")

核心实现步骤

1. 提取每行匹配的listX关键词

使用str_extract_all一次性提取文本中所有匹配的X关键词,再通过unnest展开成ID-X的一对一关系:

# 可选:添加\\b边界符避免部分字符匹配(如"苹果"不会匹配"苹果派")
pattern_x <- str_c("\\b", listX, "\\b", collapse = "|")

matches_x <- df %>%
  mutate(X = str_extract_all(text, pattern_x)) %>%
  unnest(X) %>%
  filter(!is.na(X)) # 过滤无匹配的行

2. 提取每行匹配的listY关键词

同X关键词的提取逻辑:

pattern_y <- str_c("\\b", listY, "\\b", collapse = "|")

matches_y <- df %>%
  mutate(Y = str_extract_all(text, pattern_y)) %>%
  unnest(Y) %>%
  filter(!is.na(Y))

3. 生成X-Y匹配组合

通过ID内连接两个匹配表,自动生成该行所有X-Y的笛卡尔积组合:

result <- matches_x %>%
  inner_join(matches_y, by = "ID")

结果展示

执行print(result)会得到如下输出:

# A tibble: 3 × 3
     ID X     Y      
  <dbl> <chr> <chr>  
1     1 苹果  香蕉   
2     2 猫    狗     
3     3 汽车  自行车

效率优势

  • str_extract_all是向量化操作,比循环调用grepl快数倍,尤其当关键词列表和数据行数较多时;
  • 仅保留有匹配的行/关键词,避免了暴力merge产生的大量冗余数据;
  • 逻辑清晰,易于扩展(如添加更多关键词列表)。

内容的提问来源于stack exchange,提问作者tlmoore

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 01:22:13