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

如何基于Watson Speech-to-Text输出重构带时序的对话?

如何将Watson Speech-to-Text的词汇按连续说话人分组

针对你用Watson Speech-to-Text得到的分词DataFrame,要把连续同说话人的词汇合并成组,我给你整理了一套简洁的实现方案,咱们直接上代码和解释:

首先,先把你的示例数据转换成DataFrame方便操作:

import pandas as pd

words = [['said', 0.01, 0.06, 0],['this', 0.06, 0.12, 0],['said', 0.12, 0.15, 1],['that', 0.15, 0.22, 1],['said', 0.22, 0.31, 0],['something', 0.31, 0.45, 0],['else', 0.45, 0.56, 0]]
df = pd.DataFrame(words, columns=['word', 'start_time', 'end_time', 'speaker'])

接下来关键的一步是生成分组标识:我们需要判断每一行的说话人和上一行是否不同,如果不同就开启一个新分组。用shift()对比当前行和上一行的speaker,再用cumsum()生成唯一的分组ID:

# 生成分组ID:当speaker变化时,分组号+1
df['group_id'] = (df['speaker'] != df['speaker'].shift()).cumsum()

然后就可以按group_id聚合了,聚合规则很明确:

  • 词汇列:把同一组的word拼成列表
  • start_time:取组内最小的起始时间(也就是第一个词的start)
  • end_time:取组内最大的结束时间(也就是最后一个词的end)
  • speaker:取组内任意一个即可(因为同一组speaker相同)

代码实现:

grouped_df = df.groupby('group_id').agg(
    words_list=('word', list),
    start_time=('start_time', 'min'),
    end_time=('end_time', 'max'),
    speaker=('speaker', 'first')
).reset_index(drop=True)

最后把聚合后的DataFrame转换成你需要的嵌套列表格式:

grouped_words = grouped_df.apply(lambda x: [x['words_list'], x['start_time'], x['end_time'], x['speaker']], axis=1).tolist()

运行完这些代码,grouped_words就是你想要的结果:

[[['said', 'this'], 0.01, 0.12, 0],
 [['said', 'that'], 0.12, 0.22, 1],
 [['said', 'something', 'else'], 0.22, 0.56, 0]]

补充说明

  • 这个方法完美处理说话人多次切换的情况,哪怕同一个说话人在不同时间段出现,也会被分成不同的组(完全符合你要的“连续说出的词汇分组”需求)
  • 如果你的原始DataFrame包含其他字段,只需要调整agg里的对应字段即可,核心逻辑完全通用

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:12:00