如何按POT分组从医学文本段落中提取指定术语?
解决方案:按POT分组提取指定医学术语到新列
先构造一份可复现的示例数据,方便你对照调试:
library(dplyr) library(stringr) # 模拟含POT分组和医学描述的数据集 df <- tibble( POT_group = c("POT1", "POT1", "POT2", "POT2", "POT3"), description = c( "Examination of stomach and antrum shows mild inflammation", "Incisura appears normal; stomach mucosa intact", "Antrum has ulcerative changes; no issues in incisura", "Stomach distended, antrum hyperemic", "Incisura with scarring, stomach wall thickened" ) )
核心处理步骤
先定义要提取的目标术语,再结合dplyr的分组聚合功能,把每个POT分组下的术语整理到新列:
# 目标术语集合 target_terms <- c("stomach", "antrum", "incisura") # 提取+分组聚合流程 result_df <- df %>% # 从每行描述中提取所有目标术语,生成列表列 mutate(extracted_terms = str_extract_all(description, regex(paste(target_terms, collapse = "|"), ignore_case = TRUE))) %>% # 按POT分组,合并组内所有术语、去重、统一大小写 group_by(POT_group) %>% summarise( # 两种输出格式二选一: # 1. 保留为列表格式(适合后续进一步处理) grouped_terms = list(unique(tolower(unlist(extracted_terms)))), # 2. 转为逗号分隔的字符串(适合直接查看) # grouped_terms = str_c(unique(tolower(unlist(extracted_terms))), collapse = ", ") ) %>% ungroup()
关联回原数据(可选)
如果需要让原数据的每一行都带上所属POT分组的术语集合,用left_join关联即可:
final_df <- df %>% left_join(result_df, by = "POT_group")
关键说明
- 用
regex(..., ignore_case = TRUE)确保不区分术语大小写(比如提取"Stomach"和"stomach"都算同一个); tolower统一术语格式,避免大小写差异导致的重复项;unique自动去除同一分组内重复出现的术语,保证结果简洁。
内容的提问来源于stack exchange,提问作者Sebastian Zeki
相关产品推荐
相关产品推荐

