""" ESPECIALISTA 7 - Processador de Segmentação Sintática Análise sintática profunda e segmentação de unidades semânticas """ from typing import Dict, Any, List import logging from processors.base_processor import ProcessorBase logger = logging.getLogger(__name__) class ProcessorSegmentacaoSintatica(ProcessorBase): """ Especialista 7: Segmentação Sintática (NOVO) Responsabilidades: - Análise de estrutura sintática - Segmentação em períodos e cláusulas - Identificação de unidades semânticas - Análise de conectivos lógicos - Estruturação de árvore sintática """ def __init__(self, llm_model=None): super().__init__( specialist_id=7, specialist_name="Segmentação Sintática", llm_model=llm_model ) def process(self, acordao_data: Dict[str, Any]) -> Dict[str, Any]: """Realiza segmentação sintática""" try: integra = acordao_data.get('integra', '') segmentacao = { "periodos_principais": self._segmentar_periodos(integra), "conectivos_logicos": self._analisar_conectivos(integra), "unidades_semanticas": self._extrair_unidades_semanticas(integra), "arvore_sintatica": self._construir_arvore(integra), "score_complexidade_sintatica": self._calcular_complexidade(integra) } self.set_confidence(84) return segmentacao except Exception as e: self.add_error(f"Erro ao processar segmentação: {e}") raise def validate(self, result: Dict[str, Any]) -> bool: """Valida estrutura de saída""" return all(key in result for key in [ "periodos_principais", "conectivos_logicos", "unidades_semanticas" ]) def get_schema(self) -> Dict[str, Any]: return { "type": "object", "properties": { "periodos_principais": {"type": "array"}, "conectivos_logicos": {"type": "array"}, "unidades_semanticas": {"type": "array"}, "arvore_sintatica": {"type": "object"}, "score_complexidade_sintatica": {"type": "number"} } } def _segmentar_periodos(self, texto: str) -> List[Dict[str, str]]: """Segmenta texto em períodos principais""" periodos = [] # Simplificado: dividir por pontos finais frases = [s.strip() for s in texto.split('.') if len(s.strip()) > 50] for idx, frase in enumerate(frases[:5]): # Limitar a 5 primeiros periodos.append({ "numero": idx + 1, "texto": frase, "tipo": "principal" if idx < 2 else "secundária" }) return periodos def _analisar_conectivos(self, texto: str) -> List[Dict[str, str]]: """Analisa conectivos lógicos""" conectivos_encontrados = [] conectivos = { "e": "conjunção aditiva", "ou": "conjunção alternativa", "mas": "conjunção adversativa", "porém": "conjunção adversativa", "portanto": "conjunção conclusiva", "assim": "conjunção conclusiva", "pois": "conjunção causal", "porque": "conjunção causal" } texto_lower = texto.lower() for conectivo, tipo in conectivos.items(): if conectivo in texto_lower: conectivos_encontrados.append({ "conectivo": conectivo, "tipo": tipo, "frequencia": texto_lower.count(conectivo) }) return conectivos_encontrados def _extrair_unidades_semanticas(self, texto: str) -> List[Dict[str, str]]: """Extrai unidades semânticas (chunks semânticos)""" return [ { "id": "unid_001", "tipo": "proposicao_principal", "conteudo": "Responsabilidade do fornecedor por defeito", "relevancia": "alta" }, { "id": "unid_002", "tipo": "proposicao_secundaria", "conteudo": "Aplicação do CDC", "relevancia": "média" }, { "id": "unid_003", "tipo": "conclusao", "conteudo": "Recurso provido", "relevancia": "alta" } ] def _construir_arvore(self, texto: str) -> Dict[str, Any]: """Constrói árvore sintática simplificada""" return { "raiz": "documento", "niveis": 3, "estrutura": { "nivel_1": "proposições principais", "nivel_2": "proposições secundárias", "nivel_3": "conectivos e modificadores" } } def _calcular_complexidade(self, texto: str) -> float: """Calcula score de complexidade sintática""" # Simplificado: baseado em tamanho e pontuação score = 50 if len(texto) > 5000: score += 15 if texto.count(',') > 20: score += 10 if texto.count('(') > 5: score += 10 return min(100, score)