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

如何用R从访谈转录文本中提取指定人员的对话内容

解决方案

假设你用的是tidyverse工具包,以下是具体的处理步骤和代码:

1. 先构造示例数据(匹配你的场景)

library(tidyverse)

# 模拟你的原始DataFrame
df <- tibble(
  interviewer = "John Smith",
  text = "John Smith 2:03\nIs this great?\nJoe Blogs 2:24\nYes it is.\nJohn Smith 2:35\nIs it the greatest of all time?\nJoe Blogs 2:47\nClearly. "
)

2. 处理文本并生成目标列

df_result <- df %>%
  # 把text列按换行符拆分成单独行
  separate_rows(text, sep = "\n") %>%
  # 过滤拆分后产生的空行
  filter(text != "") %>%
  # 标记哪些行是「姓名+时间戳」的说话人标识行
  mutate(is_speaker = str_detect(text, "\\d+:\\d+")) %>%
  # 将说话人标识向下填充,让每段对话对应到说话人
  fill(text, .direction = "down") %>%
  # 只保留对话内容行,拆分说话人信息和对话内容
  filter(!is_speaker) %>%
  mutate(
    # 从说话人行中提取纯姓名(去掉末尾的时间戳)
    speaker = str_remove(lag(text), "\\s+\\d+:\\d+$"),
    dialogue = text
  ) %>%
  # 按原始访谈分组(确保每个访谈的对话单独处理)
  group_by(interviewer) %>%
  # 分别拼接访谈者和被访者的所有对话
  summarize(
    interviewer = str_c(dialogue[speaker == interviewer], collapse = " "),
    subject = str_c(dialogue[speaker != interviewer], collapse = " ")
  )

3. 最终输出结果

运行后会得到和需求一致的DataFrame:

interviewersubject
Is this great? Is it the greatest of all time?Yes it is. Clearly.

关键步骤说明

  • separate_rows:把长文本拆分成逐行记录,方便后续匹配说话人和对话
  • str_detect:通过匹配数字:数字的时间戳格式,快速识别说话人标识行
  • fill:让每段对话自动关联到上方最近的说话人
  • str_remove:用正则去掉说话人标识里的时间戳,提取纯姓名
  • str_c:把同一说话人的所有对话拼接成单个字符串

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 08:54:22