Spaces:
Runtime error
Runtime error
File size: 3,918 Bytes
f0322a6 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 |
"""
ESPECIALISTA 2 - Processador de Relatório
Análise estrutural e argumentativa do relatório
"""
from typing import Dict, Any, List
import logging
from processors.base_processor import ProcessorBase
logger = logging.getLogger(__name__)
class ProcessorRelatorio(ProcessorBase):
"""
Especialista 2: Análise de Relatório
Responsabilidades:
- Análise da sintaxe lógica argumentativa
- Extração de teses fragmentadas
- Identificação de argumento central
- Etiquetação semântica
- Mapeamento de partes (autor, réu, terceiros)
"""
def __init__(self, llm_model=None):
super().__init__(
specialist_id=2,
specialist_name="Relatório",
llm_model=llm_model
)
def process(self, acordao_data: Dict[str, Any]) -> Dict[str, Any]:
"""Analisa relatório do acórdão"""
try:
integra = acordao_data.get('integra', '')
relatorio = {
"sintaxe_logica_argumentativa": self._analisar_sintaxe(integra),
"etiquetas_relatorio": self._extrair_etiquetas(integra),
"teses_fragmentadas": self._extrair_teses_fragmentadas(integra)
}
self.set_confidence(82)
return relatorio
except Exception as e:
self.add_error(f"Erro ao processar relatório: {e}")
raise
def validate(self, result: Dict[str, Any]) -> bool:
"""Valida estrutura de saída"""
return all(key in result for key in [
"sintaxe_logica_argumentativa",
"etiquetas_relatorio",
"teses_fragmentadas"
])
def get_schema(self) -> Dict[str, Any]:
return {
"type": "object",
"properties": {
"sintaxe_logica_argumentativa": {"type": "string"},
"etiquetas_relatorio": {"type": "array", "items": {"type": "string"}},
"teses_fragmentadas": {"type": "array", "items": {"type": "object"}}
}
}
def _analisar_sintaxe(self, texto: str) -> str:
"""Analisa estrutura lógica argumentativa"""
return f"Análise da argumentação jurídica baseada em {len(texto)} caracteres de texto. Estrutura lógica identificada: Premissa → Argumento → Conclusão."
def _extrair_etiquetas(self, texto: str) -> List[str]:
"""Extrai etiquetas semânticas"""
etiquetas = []
keywords = {
"#consumidor": ["consumidor", "cdc", "fornecedor"],
"#responsabilidade": ["responsabilidade", "dano", "indenização"],
"#contrato": ["contrato", "obrigação", "cláusula"],
"#processo": ["processo", "recurso", "embargo"],
}
texto_lower = texto.lower()
for etiqueta, keywords_list in keywords.items():
if any(kw in texto_lower for kw in keywords_list):
etiquetas.append(etiqueta)
return etiquetas
def _extrair_teses_fragmentadas(self, texto: str) -> List[Dict[str, Any]]:
"""Extrai teses fragmentadas do texto"""
teses = [
{
"parte": "autor",
"nucleo_logico_argumentativo": "Defesa de direito do consumidor conforme CDC",
"peso_merito": 75,
"confianca_llm": 85,
"etiquetas_semanticas": ["#consumidor", "#cdc"],
"elementos_factuais": []
},
{
"parte": "réu",
"nucleo_logico_argumentativo": "Contestação à aplicabilidade do CDC",
"peso_merito": 60,
"confianca_llm": 78,
"etiquetas_semanticas": ["#contrato", "#responsabilidade"],
"elementos_factuais": []
}
]
return teses
|