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

R语言提取GO词元搭配时如何关联原数据行id值

核心问题:你当前的写法直接对整列文本执行提取后统一压平,丢失了每个匹配结果和原数据行id的对应关系,在提取阶段保留行对应关系再合并即可实现需求。

方法1:基于tidyverse列表列+unnest实现(推荐)

# 加载依赖包
library(tidyverse)

# 原有词形、匹配规则定义不变
lemma_GO <- c("go", "goes", "going", "gone", "went", "gon na") 
pattern_GO <- paste0("\\b(", paste0(lemma_GO, collapse = "|"), ")\\b")

# 提取+关联id
df_GO <- df %>%
  # 先将每行的提取结果存为列表列
  mutate(
    left = str_extract_all(go, paste0("('?\\b[a-z']+\\b|^)(?=\\s?", pattern_GO, ")")),
    node = str_extract_all(go, pattern_GO),
    right = str_extract_all(go, paste0("(?<=\\s?", pattern_GO, "\\s?)('?\\b[a-z']+\\b|$)"))
  ) %>%
  # 移除原文本列,展开列表列得到结构化结果
  select(-go) %>%
  unnest(cols = c(left, node, right))

方法2:逐行处理绑定id

library(tidyverse)

lemma_GO <- c("go", "goes", "going", "gone", "went", "gon na") 
pattern_GO <- paste0("\\b(", paste0(lemma_GO, collapse = "|"), ")\\b")

df_GO <- df %>%
  pmap_dfr(function(id, go) {
    left <- str_extract_all(go, paste0("('?\\b[a-z']+\\b|^)(?=\\s?", pattern_GO, ")"))[[1]]
    node <- str_extract_all(go, pattern_GO)[[1]]
    right <- str_extract_all(go, paste0("(?<=\\s?", pattern_GO, "\\s?)('?\\b[a-z']+\\b|$)"))[[1]]
    tibble(left, node, right, id)
  })

两种方法输出的df_GO都和你给出的期望结果完全一致,包含关联的原数据id字段。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 23:18:03