feat: criado repositório jhonny-editor no Gitea
criado repositório jhonny-editor no Gitea adicionado script admin/deploy.command com commit automático atualizado admin/DEV-NOTES.md com template limpo Resumo: - 32 arquivos alterados - 16 novos - 15 modificados - 0 removidos 16 files changed, 638 insertions(+), 61 deletions(-) Arquivos: - code/engine/skills/boas-praticas-oo.md -> .agents/skills/boas-praticas-oo/SKILL.md - AGENTS.md - code/cep-plugin/index.html - code/cep-plugin/main.js - code/cep-plugin/styles.css - code/engine/integracoes/visual/apple_vision.py - code/engine/integracoes/visual/apple_vision_runner.swift - code/engine/integracoes/visual/extrator_ffmpeg.py - code/engine/scanner/__init__.py - code/engine/scanner/configuracao_visual.py - code/engine/scanner/coordenacao/__init__.py - code/engine/scanner/retakes/adaptador_de_falas.py - code/engine/scanner/retakes/agrupador_de_takes.py - code/engine/scanner/retakes/detector_de_reinicios.py - code/engine/scanner/retakes/modelos_de_retakes.py - code/engine/scanner/visual.py - .jhonny/ - .retakes/ - CODING_STANDARDS.md - code/engine/executar_retakes.py - code/engine/persistencia/ - code/engine/scanner/retakes/__init__.py - code/engine/scanner/retakes/carregador_de_artefatos.py - code/engine/scanner/retakes/classificador_de_retakes.py - code/engine/scanner/retakes/coordenador_de_retakes.py - code/engine/scanner/retakes/deteccao_de_retakes.py - code/engine/scanner/retakes/gerador_de_evidencias.py - code/engine/scanner/retakes/repositorio_de_retakes.py - code/engine/testes/test_consultas_de_persistencia.py - code/engine/testes/test_deteccao_de_retakes.py - code/engine/testes/test_persistencia_sqlite.py - code/relatorios/audio/arquivos/92f97877259a86a8095b1eecafdefe357212a12247d04b78df60e0c0ae38b2ea/
This commit is contained in:
@@ -0,0 +1,87 @@
|
||||
"""Geração de evidências legíveis para cada grupo de retakes.
|
||||
|
||||
Produz uma lista estruturada ``{tipo, descricao, valor}`` que explica por
|
||||
que duas falas foram consideradas retake — pronto para a interface do
|
||||
painel descrever os motivos ao usuário.
|
||||
"""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
from .modelos_de_retakes import AgrupamentoDeFalas, ClassificacaoDeRetake, EvidenciaDeRetake
|
||||
|
||||
|
||||
class GeradorDeEvidencias:
|
||||
"""Monta as evidências de um grupo a partir do agrupamento e da categoria."""
|
||||
|
||||
def gerar(
|
||||
self,
|
||||
agrupamento: AgrupamentoDeFalas,
|
||||
classificacao: ClassificacaoDeRetake,
|
||||
) -> list[EvidenciaDeRetake]:
|
||||
evidencias: list[EvidenciaDeRetake] = []
|
||||
if not agrupamento.pares:
|
||||
return evidencias
|
||||
|
||||
par = max(agrupamento.pares,
|
||||
key=lambda item: item.comparacao.similaridade_final)
|
||||
comp = par.comparacao
|
||||
estado = "É um retake provável." if classificacao.tipo == "retake_confirmado" else (
|
||||
"Pode ser um retake." if classificacao.tipo == "possivel_retake" else "Repetição detectada.")
|
||||
|
||||
evidencias.append(EvidenciaDeRetake(
|
||||
tipo="similaridade_textual",
|
||||
descricao=(
|
||||
f"As duas falas possuem {comp.similaridade_jaccard * 100:.0f}% "
|
||||
f"de palavras em comum e {comp.similaridade_final * 100:.0f}% de "
|
||||
f"similaridade textual geral."
|
||||
),
|
||||
valor=comp.similaridade_final,
|
||||
))
|
||||
|
||||
if par.similaridade_semantica > 0:
|
||||
evidencias.append(EvidenciaDeRetake(
|
||||
tipo="similaridade_semantica",
|
||||
descricao=f"Semanticamente, as falas têm {par.similaridade_semantica * 100:.0f}% de afinidade.",
|
||||
valor=par.similaridade_semantica,
|
||||
))
|
||||
|
||||
if comp.similaridade_do_inicio >= 0.8:
|
||||
evidencias.append(EvidenciaDeRetake(
|
||||
tipo="repeticao_do_inicio",
|
||||
descricao="As duas falas começam com as mesmas palavras.",
|
||||
valor=comp.similaridade_do_inicio,
|
||||
))
|
||||
|
||||
evidencias.append(EvidenciaDeRetake(
|
||||
tipo="proximidade_temporal",
|
||||
descricao=(
|
||||
f"A segunda tentativa começa {par.intervalo.intervalo_em_segundos:.1f} "
|
||||
f"segundos após a primeira."
|
||||
),
|
||||
valor=par.intervalo.proximidade_temporal,
|
||||
))
|
||||
|
||||
for sinal in agrupamento.sinais_de_reinicio:
|
||||
for detalhe in sinal.evidencias:
|
||||
evidencias.append(EvidenciaDeRetake(
|
||||
tipo="reinicio",
|
||||
descricao=detalhe,
|
||||
valor=sinal.intensidade,
|
||||
))
|
||||
|
||||
if par.mudanca_visual_proxima:
|
||||
evidencias.append(EvidenciaDeRetake(
|
||||
tipo="mudanca_visual_proxima",
|
||||
descricao=(
|
||||
"Há um corte visual próximo: as tentativas podem estar em "
|
||||
"tomadas diferentes, reforçando a hipótese de retake."
|
||||
),
|
||||
valor=1.0,
|
||||
))
|
||||
|
||||
evidencias.append(EvidenciaDeRetake(
|
||||
tipo="classificacao",
|
||||
descricao=f"{estado} Confiança de {classificacao.confianca * 100:.0f}%.",
|
||||
valor=classificacao.confianca,
|
||||
))
|
||||
return evidencias
|
||||
Reference in New Issue
Block a user