Spaces:
Sleeping
Sleeping
| import gradio as gr | |
| import logging | |
| from datetime import datetime | |
| from analyzers.gemini_analyzer import GeminiAnalyzer | |
| from analyzers.ner_analyzer import NERAnalyzer | |
| from docling.document_converter import DocumentConverter | |
| # Configuração de logging | |
| logging.basicConfig( | |
| level=logging.INFO, | |
| format='%(asctime)s - %(name)s - %(levelname)s - %(message)s', | |
| handlers=[ | |
| logging.FileHandler(f'contract_analyzer_{datetime.now().strftime("%Y%m%d")}.log'), | |
| logging.StreamHandler() | |
| ] | |
| ) | |
| logger = logging.getLogger(__name__) | |
| class ContractAnalyzer: | |
| def __init__(self): | |
| self.gemini_analyzer = GeminiAnalyzer() | |
| self.ner_analyzer = NERAnalyzer() | |
| self.document_converter = DocumentConverter() | |
| def analyze_contract(self, file, analysis_type: str): | |
| logger.info(f"Iniciando análise do arquivo usando {analysis_type}: {file.name}") | |
| try: | |
| result = self.document_converter.convert(file.name) | |
| document_text = result.document.export_to_markdown() | |
| if analysis_type == "Gemini": | |
| analysis_result = self.gemini_analyzer.analyze(document_text) | |
| output = self.gemini_analyzer.format_output(analysis_result) | |
| else: # NER | |
| entities = self.ner_analyzer.extract_entities(document_text) | |
| representatives = self.ner_analyzer.extract_representatives(entities) | |
| output = self.ner_analyzer.format_output(representatives) | |
| return document_text, output | |
| except Exception as e: | |
| logger.error(f"Erro durante análise do contrato: {str(e)}") | |
| return "", f"Erro ao processar o arquivo: {str(e)}" | |
| def create_interface(): | |
| analyzer = ContractAnalyzer() | |
| try: | |
| logger.info("Iniciando configuração da interface Gradio") | |
| iface = gr.Interface( | |
| fn=analyzer.analyze_contract, | |
| inputs=[ | |
| "file", | |
| gr.Radio( | |
| choices=["Gemini", "NER"], | |
| label="Tipo de Análise", | |
| value="Gemini" | |
| ) | |
| ], | |
| outputs=[ | |
| gr.Textbox(label="Texto do Contrato"), | |
| gr.Textbox(label="Resultado da Análise") | |
| ], | |
| title="Analisador de Contratos Sociais", | |
| description="Este aplicativo analisa contratos sociais usando Gemini ou NER para identificar representantes legais.", | |
| ) | |
| logger.info("Interface Gradio configurada com sucesso") | |
| return iface | |
| except Exception as e: | |
| logger.error(f"Erro ao configurar interface Gradio: {str(e)}") | |
| raise | |
| if __name__ == "__main__": | |
| logger.info("Iniciando aplicação") | |
| iface = create_interface() | |
| iface.launch() |