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

如何无需复杂时间逻辑提取AWS Amazon Transcribe Medical输出JSON中的各说话人文本

如何从AWS Transcribe Medical输出中快速按说话人提取文本?

嘿,我懂你不想折腾那些时间戳匹配的复杂逻辑——毕竟谁愿意对着一堆时间值反复比对呢?这里有个省心的Python实现方案,能帮你直接按说话人整理出对应的文本,不用费脑子写复杂逻辑:

实现思路

我们可以利用输出里的speaker_labels分段信息,结合已经按时间顺序排列好的全局items列表,自动把每个说话人分段对应的文本内容提取出来,时间匹配的逻辑已经封装在代码里,你不用手动处理:

def get_speaker_text(transcribe_output):
    # 先整理全局items,把单词和对应的时间范围关联,同时处理标点
    processed_items = []
    for item in transcribe_output["items"]:
        if item["type"] == "pronunciation":
            # 提取单词的时间范围和内容
            start = float(item["start_time"])
            end = float(item["end_time"])
            content = item["alternatives"][0]["content"]
            processed_items.append((start, end, content))
        elif item["type"] == "punctuation":
            # 把标点附加到前一个单词末尾,让文本更连贯
            punctuation = item["alternatives"][0]["content"]
            if processed_items:
                last_start, last_end, last_content = processed_items[-1]
                processed_items[-1] = (last_start, last_end, last_content + punctuation)
    
    # 初始化每个说话人的文本容器
    speaker_text = {
        f"spk_{i}": "" 
        for i in range(transcribe_output["speaker_labels"]["speakers"])
    }
    
    # 遍历每个说话人分段,收集对应文本
    for segment in transcribe_output["speaker_labels"]["segments"]:
        speaker = segment["speaker_label"]
        seg_start = float(segment["start_time"])
        seg_end = float(segment["end_time"])
        
        # 收集该分段时间范围内的所有单词
        segment_words = []
        for item_start, item_end, content in processed_items:
            # 判断单词是否落在分段时间范围内(简单的重叠判断)
            if item_start <= seg_end and item_end >= seg_start:
                segment_words.append(content)
        
        # 把收集到的内容追加到对应说话人的文本里
        if segment_words:
            speaker_text[speaker] += " ".join(segment_words) + " "
    
    # 整理成你想要的输出格式
    result_lines = []
    for speaker, text in speaker_text.items():
        result_lines.append(f"{speaker} : {text.strip()}")
    return "\n".join(result_lines)

使用方式

你只需要把AWS Transcribe Medical返回的完整JSON数据传入这个函数,就能直接得到目标格式的结果:

# 假设transcribe_json是你获取到的输出数据
final_output = get_speaker_text(transcribe_json)
print(final_output)

这个方法把繁琐的时间匹配逻辑都封装好了,你不用手动去比对每个单词和分段的时间,调用函数就能轻松得到按说话人分类的文本啦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 12:32:46