Added a module to coalesce adjacent same-speaker segments

This commit is contained in:
2026-04-27 19:30:00 -05:00
parent 13d972cb24
commit aab6d12730
12 changed files with 919 additions and 28 deletions

View File

@@ -2,6 +2,7 @@ package overlap
import (
"fmt"
"sort"
"gitea.maximumdirect.net/eric/seriatim/internal/model"
)
@@ -18,9 +19,10 @@ func Detect(in model.MergedTranscript) model.MergedTranscript {
return in
}
order := sortedSegmentIndices(in.Segments)
var groupID int
var candidate overlapCandidate
for index := range in.Segments {
for _, index := range order {
segment := in.Segments[index]
if !candidate.active {
candidate = newCandidate(index, segment)
@@ -40,6 +42,17 @@ func Detect(in model.MergedTranscript) model.MergedTranscript {
return in
}
func sortedSegmentIndices(segments []model.Segment) []int {
indices := make([]int, len(segments))
for index := range segments {
indices[index] = index
}
sort.SliceStable(indices, func(i, j int) bool {
return model.SegmentLess(segments[indices[i]], segments[indices[j]])
})
return indices
}
type overlapCandidate struct {
active bool
indices []int