docling / app.py
thlinhares's picture
Rename main.py to app.py
a753f66 verified
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()