Spaces:
Sleeping
Sleeping
Commit ·
fdc319c
1
Parent(s): 1c6c8a6
Deploy inicial do app no Hugging Face Space
Browse files
app.py
CHANGED
|
@@ -1,22 +1,55 @@
|
|
| 1 |
import gradio as gr
|
|
|
|
| 2 |
|
| 3 |
def predict(text):
|
| 4 |
-
# Aqui
|
| 5 |
-
# Exemplo básico de regra para simulação
|
| 6 |
texto = text.lower()
|
| 7 |
-
sinais_risco = [
|
|
|
|
|
|
|
| 8 |
if any(sinal in texto for sinal in sinais_risco):
|
| 9 |
return "🚨 Classe prevista: FUGA (alto risco de churn)"
|
| 10 |
return "✅ Classe prevista: Não fuga (baixo risco de churn)"
|
| 11 |
|
| 12 |
-
|
| 13 |
-
|
| 14 |
-
|
| 15 |
-
|
| 16 |
-
|
| 17 |
-
description="Sentinela inteligente para detectar risco de fuga de cliente. Cole aqui um texto de relacionamento ou NPS para analisar o risco."
|
| 18 |
-
)
|
| 19 |
|
| 20 |
-
|
| 21 |
-
|
| 22 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
import gradio as gr
|
| 2 |
+
import pandas as pd
|
| 3 |
|
| 4 |
def predict(text):
|
| 5 |
+
# Aqui pode integrar o modelo real de churn!
|
|
|
|
| 6 |
texto = text.lower()
|
| 7 |
+
sinais_risco = [
|
| 8 |
+
"cancelamento", "migrando", "deixando", "insatisfeito", "não quero mais", "vou sair"
|
| 9 |
+
]
|
| 10 |
if any(sinal in texto for sinal in sinais_risco):
|
| 11 |
return "🚨 Classe prevista: FUGA (alto risco de churn)"
|
| 12 |
return "✅ Classe prevista: Não fuga (baixo risco de churn)"
|
| 13 |
|
| 14 |
+
def analisar_arquivo(file):
|
| 15 |
+
try:
|
| 16 |
+
df = pd.read_excel(file, engine="openpyxl")
|
| 17 |
+
except Exception as e:
|
| 18 |
+
return f"Erro ao ler o arquivo: {e}", None
|
|
|
|
|
|
|
| 19 |
|
| 20 |
+
# Checa coluna Resumo
|
| 21 |
+
if "Resumo" not in df.columns:
|
| 22 |
+
return "❌ Coluna 'Resumo' não encontrada.", None
|
| 23 |
+
|
| 24 |
+
# Converte para minúsculo, processa cada linha
|
| 25 |
+
df["Resumo"] = df["Resumo"].fillna("").astype(str).str.lower()
|
| 26 |
+
predicoes = df["Resumo"].apply(predict)
|
| 27 |
+
df["Predição"] = predicoes
|
| 28 |
+
# Exibe até 50 linhas no preview
|
| 29 |
+
preview = df[["Resumo", "Predição"]].head(50).to_markdown(index=False)
|
| 30 |
+
# Salva resultado
|
| 31 |
+
saida = "resultado_analise.xlsx"
|
| 32 |
+
df.to_excel(saida, index=False)
|
| 33 |
+
return preview, saida
|
| 34 |
+
|
| 35 |
+
with gr.Blocks(theme=gr.themes.Soft(primary_hue="blue", secondary_hue="gray")) as demo:
|
| 36 |
+
gr.Markdown("""
|
| 37 |
+
# 🏢 **ChurnSentinel API**
|
| 38 |
+
Sentinela inteligente para detectar risco de fuga de cliente.<br>
|
| 39 |
+
_Analise frases individualmente ou em lote via planilha Excel._
|
| 40 |
+
""")
|
| 41 |
+
with gr.Tab("🔎 Análise de Texto"):
|
| 42 |
+
gr.Markdown("Cole um feedback de relacionamento ou NPS abaixo para analisar:")
|
| 43 |
+
inp = gr.Textbox(label="Texto do relacionamento/NPS do cliente", lines=4, placeholder="Digite ou cole aqui...", elem_id="text-input")
|
| 44 |
+
out = gr.Textbox(label="Predição", elem_id="pred-output")
|
| 45 |
+
btn = gr.Button("Analisar", variant="primary")
|
| 46 |
+
btn.click(predict, inp, out)
|
| 47 |
+
with gr.Tab("📁 Análise em Arquivo"):
|
| 48 |
+
gr.Markdown("Envie uma planilha `.xlsm` ou `.xlsx` contendo a coluna **Resumo**.")
|
| 49 |
+
inp_file = gr.File(label="Arquivo Excel (.xlsm ou .xlsx)", file_types=[".xlsm", ".xlsx"])
|
| 50 |
+
out_markdown = gr.Markdown()
|
| 51 |
+
out_file = gr.File(label="Download da planilha analisada")
|
| 52 |
+
btn2 = gr.Button("Analisar Arquivo", variant="primary")
|
| 53 |
+
btn2.click(analisar_arquivo, inputs=inp_file, outputs=[out_markdown, out_file])
|
| 54 |
+
|
| 55 |
+
demo.launch()
|