import gradio as gr import pandas as pd def predict(text): # Aqui pode integrar o modelo real de churn! texto = text.lower() sinais_risco = [ "cancelamento", "migrando", "deixando", "insatisfeito", "não quero mais", "vou sair" ] if any(sinal in texto for sinal in sinais_risco): return "🚨 Classe prevista: FUGA (alto risco de churn)" return "✅ Classe prevista: Não fuga (baixo risco de churn)" def analisar_arquivo(file): try: df = pd.read_excel(file, engine="openpyxl") except Exception as e: return f"Erro ao ler o arquivo: {e}", None # Checa coluna Resumo if "Resumo" not in df.columns: return "❌ Coluna 'Resumo' não encontrada.", None # Converte para minúsculo, processa cada linha df["Resumo"] = df["Resumo"].fillna("").astype(str).str.lower() predicoes = df["Resumo"].apply(predict) df["Predição"] = predicoes # Exibe até 50 linhas no preview preview = df[["Resumo", "Predição"]].head(50).to_markdown(index=False) # Salva resultado saida = "resultado_analise.xlsx" df.to_excel(saida, index=False) return preview, saida with gr.Blocks(theme=gr.themes.Soft(primary_hue="blue", secondary_hue="gray")) as demo: gr.Markdown(""" # 🏢 **ChurnSentinel API** Sentinela inteligente para detectar risco de fuga de cliente.
_Analise frases individualmente ou em lote via planilha Excel._ """) with gr.Tab("🔎 Análise de Texto"): gr.Markdown("Cole um feedback de relacionamento ou NPS abaixo para analisar:") inp = gr.Textbox(label="Texto do relacionamento/NPS do cliente", lines=4, placeholder="Digite ou cole aqui...", elem_id="text-input") out = gr.Textbox(label="Predição", elem_id="pred-output") btn = gr.Button("Analisar", variant="primary") btn.click(predict, inp, out) with gr.Tab("📁 Análise em Arquivo"): gr.Markdown("Envie uma planilha `.xlsm` ou `.xlsx` contendo a coluna **Resumo**.") inp_file = gr.File(label="Arquivo Excel (.xlsm ou .xlsx)", file_types=[".xlsm", ".xlsx"]) out_markdown = gr.Markdown() out_file = gr.File(label="Download da planilha analisada") btn2 = gr.Button("Analisar Arquivo", variant="primary") btn2.click(analisar_arquivo, inputs=inp_file, outputs=[out_markdown, out_file]) demo.launch()