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

如何匹配两个DataFrame字符串并输出同义词典的行名?

高效实现同义词组匹配与对应行名输出

问题说明

现有两个DataFrame:

  • thesaurus:每行对应一组同义词,行名为唯一编号
  • PKV_clean:存储待匹配的记录文本

核心需求:当PKV_clean的记录中出现thesaurus任意一行的同义词时,输出该行的行名(示例匹配结果为0070、0110)。此前尝试grep匹配行名失败,手动构建0/1矩阵在数据量较大时操作繁琐,需高效解决方案。

基于R语言的高效实现方案

1. 预处理同义词组,生成匹配模式

将thesaurus每行的同义词整合成正则匹配模式,并关联对应的行名:

library(dplyr)
library(stringr)

# 将行名转为列,每行同义词合并为|分隔的正则模式
syn_patterns <- thesaurus %>%
  rownames_to_column("syn_id") %>%
  rowwise() %>%
  # 若同义词含正则特殊字符,需添加str_escape转义
  mutate(pattern = str_c(str_escape(c_across(-syn_id)), collapse = "|")) %>%
  ungroup() %>%
  select(syn_id, pattern)

2. 批量匹配记录文本

定义匹配函数,对PKV_clean的每条记录文本,批量匹配所有同义词模式并提取对应行名:

# 传入单条文本,返回匹配到的同义词组编号
match_syn_ids <- function(text) {
  match_flag <- str_detect(text, syn_patterns$pattern)
  syn_patterns$syn_id[match_flag]
}

# 对PKV_clean的文本列应用函数,得到每条记录的匹配结果
PKV_clean$matched_syn_ids <- lapply(PKV_clean$你的文本列名, match_syn_ids)

3. 整理匹配结果(可选)

若需将匹配结果展开为每行对应一个匹配项,可使用unnest:

library(tidyr)

PKV_matched_result <- PKV_clean %>%
  unnest(matched_syn_ids, keep_empty = TRUE)

注意事项

  • 若同义词中包含.、*这类正则特殊字符,必须用str_escape转义,否则会导致匹配错误
  • 该方案通过正则批量匹配替代手动矩阵构建,在数据量大时能显著提升效率

内容的提问来源于stack exchange,提问作者KC-Migo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 06:39:13