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

如何用PHP截取JSON对象切片并提取指定时间范围的转录内容?

解决Amazon Transcribe JSON指定时间范围的文本提取问题

我来帮你搞定这个头疼的提取问题!之前用ksort、slice这些方法没成功,大概率是没摸透Amazon Transcribe的JSON结构——它的转录内容不是简单的线性数组,而是拆成了词汇和标点的独立条目,还有特殊的时间戳规则,得针对性处理。

核心思路

Amazon Transcribe的转录结果存在results.items数组里,每个条目要么是带时间戳的词汇,要么是不带时间戳的标点。我们需要:

  1. 遍历所有条目,筛选出时间落在100-160秒区间内的词汇(包括和区间有重叠的片段)
  2. 把关联的标点和对应词汇拼接,最后整合成连贯文本

具体PHP代码实现

// 假设$transcribeJson是你拿到的Amazon Transcribe原始JSON字符串
$transcribeData = json_decode($transcribeJson, true);
$filteredContent = [];
$targetStartTime = 100;
$targetEndTime = 160;

foreach ($transcribeData['results']['items'] as $item) {
    // 处理带时间戳的词汇条目
    if (isset($item['start_time'], $item['end_time'])) {
        $itemStart = (float)$item['start_time'];
        $itemEnd = (float)$item['end_time'];
        
        // 判断当前词汇的时间段是否和目标区间有重叠(避免遗漏边缘内容)
        if ($itemStart <= $targetEndTime && $itemEnd >= $targetStartTime) {
            $filteredContent[] = $item['alternatives'][0]['content'];
        }
    } else {
        // 处理标点:如果前一个词汇在目标范围内,就把标点拼到该词汇后面
        $lastItemIndex = count($filteredContent) - 1;
        if ($lastItemIndex >= 0) {
            $filteredContent[$lastItemIndex] .= $item['alternatives'][0]['content'];
        }
    }
}

// 把筛选后的内容拼接成最终文本
$extractedText = implode(' ', $filteredContent);
echo $extractedText;

为什么之前的方法行不通?

  • ksort:Amazon Transcribe的条目本身就是按时间顺序排列的,排序完全没必要
  • slice:切片是按数组索引截取,但目标时间对应的条目索引是不确定的,没法直接用索引切片
  • 忽略了标点的特殊处理:标点没有时间戳,必须和前面的词汇绑定,直接提取会导致文本格式混乱

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 07:27:13