如何用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:
| interviewer | subject |
|---|---|
| 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
相关产品推荐
相关产品推荐

