首页 > 解决方案 > Python:如何使用项目中的开始/结束时间戳对齐两个列表

问题描述

我有两个列表,每个列表都按以下顺序排序,start_time并且end_time不与其他项目重叠:

# (word, start_time, end_time)
words = [('i', 5.12, 5.23),
         ('like', 5.24, 5.36),
         ('you', 5.37, 5.71),
         ('really', 7.21, 7.51),
         ('yes', 8.32, 8.54)]

# (speaker, start_time, end_time)
segments = [('spk1', 0.0, 1.25),
            ('spk2', 4.75, 6.25),
            ('spk1', 6.75, 7.75),
            ('spk2', 8.25, 9.25)]

我想将每个项目中words的项目分组start_time并产生如下内容:end_timesegments

res = [('i', 'like', 'you'),
       ('really'),
       ('yes')]

使得 in 中的每一项都res包含 中对应项的wordswithstart_timeend_time介于start_timeand之间的所有项。end_timesegments

标签: pythonparsingalignmentspeechdiarization

解决方案


我在输入问题时想出了这个解决方案。我猜stackoverflow是一个很好的橡皮鸭。但我很想听听是否有更省时的方法。

res = []
cur = 0
for speaker, start, end in segments:
    sent = []
    for i, (word, word_start, word_end) in enumerate(words[cur:]):
        if word_start >= end:
            cur = cur + i
            break
        sent.append(word)
    res.append((speaker, start, end, round(end - start, 2), " ".join(sent)))
    if len(sent) == len(words[cur:]):
        cur = len(words)

推荐阅读