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

在R中基于两向量差异提取子集文本:忽略大小写及多格式匹配

解决方案:提取B中未在A出现的术语(忽略大小写、支持分号多术语、括号内容匹配)

步骤说明

要实现需求,需要先把A中的所有潜在术语(包括分号分隔项、括号内的缩写)提取并标准化,再和B中的术语逐一匹配:

  1. 拆解A中的术语:按分号拆分多术语条目,清理空格,同时提取括号内的缩写作为独立术语
  2. 标准化格式:统一转成小写,消除大小写差异
  3. 匹配筛选:将B中的术语标准化后,筛选出不在A术语集合中的条目

完整代码

# 原始数据
A <- data.frame(c("Absolute Value", "absolute deviation", "acceptance line ; acceptance boundary", "age-adjusted rate", "variance", "modified mean ; modified arithmetic mean ; trimmed mean ", "standard error (stdev)"))
B  <- data.frame(c("descriptive", "Acceptance Boundary", "deviation", "stdev", "modified arithmetic mean", "mutability"))

# 处理A的术语,生成所有标准化的匹配项
A_terms <- A[[1]]
# 按分号拆分多术语
A_split <- unlist(strsplit(A_terms, ";"))
# 清理前后空格
A_trimmed <- trimws(A_split)

# 定义函数:提取带括号术语的主内容和括号内的缩写
extract_bracket_content <- function(term) {
  bracket_part <- gsub(".*\\((.*?)\\).*", "\\1", term)
  main_part <- gsub("\\s*\\(.*?\\)\\s*", "", term)
  c(trimws(main_part), trimws(bracket_part))
}

# 处理所有带括号的术语,展开为完整列表
A_processed <- unlist(lapply(A_trimmed, extract_bracket_content))
# 去重并转小写
A_standardized <- tolower(unique(A_processed))

# 处理B的术语,筛选不在A中的条目
B_terms <- B[[1]]
B_standardized <- tolower(trimws(B_terms))
# 匹配筛选
result_terms <- B_terms[!B_standardized %in% A_standardized]

# 生成最终的C
C <- data.frame(terms = result_terms)

运行结果

执行代码后,C的内容与期望完全一致:

> C
        terms
1 descriptive
2    deviation
3   mutability

关键逻辑说明

  • 分号拆分:将A中用;分隔的多格式术语(如modified mean ; modified arithmetic mean)拆分为独立条目,确保每个术语都能被匹配
  • 大小写忽略:统一转小写后比较,解决Acceptance Boundary和acceptance boundary的大小写差异问题
  • 括号内容提取:把standard error (stdev)拆分为standard error和stdev,确保B中的缩写stdev能被识别为存在于A中
  • 空格清理:用trimws去除术语前后的冗余空格,避免因空格导致的匹配失败

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 13:35:26