"""Análise da relação temporal entre falas. Verifica quanto tempo há entre duas falas, se estão na mesma faixa/segmento e se a proximidade sugere uma nova tentativa. Um intervalo muito grande reduz a confiança de que seja um retake imediato. """ from __future__ import annotations from .modelos_de_retakes import Fala, ResultadoDoIntervalo # A partir de quantos segundos o intervalo passa a não sugerir retake. _INTERVALO_MAXIMO = 12.0 class AnalisadorDeIntervalos: """Calcula a proximidade temporal e o indício de nova tentativa.""" def __init__(self, intervalo_maximo: float = _INTERVALO_MAXIMO) -> None: self.intervalo_maximo = intervalo_maximo def analisar(self, fala_a: Fala, fala_b: Fala) -> ResultadoDoIntervalo: intervalo = max(0.0, fala_b.inicio - fala_a.fim) mesma_faixa = fala_a.faixa_id == fala_b.faixa_id mesmo_segmento = mesma_faixa and fala_a.segmento_id == fala_b.segmento_id if intervalo >= self.intervalo_maximo: proximidade = 0.0 elif intervalo <= 0: proximidade = 1.0 else: # Decai suavemente com o intervalo: 1.0 → ~0 em 12s. proximidade = max(0.0, 1.0 - intervalo / self.intervalo_maximo) indicio = mesma_faixa and intervalo <= self.intervalo_maximo and proximidade >= 0.5 return ResultadoDoIntervalo( intervalo_em_segundos=round(intervalo, 3), mesmo_segmento=mesmo_segmento, proximidade_temporal=round(proximidade, 4), indicio_de_nova_tentativa=bool(indicio), )