Spaces:
Sleeping
Sleeping
Update app.py
Browse files
app.py
CHANGED
@@ -4,14 +4,12 @@ import numpy as np
|
|
4 |
|
5 |
class SimpleTemperamentAnalyzer:
|
6 |
def __init__(self):
|
7 |
-
# Usando um modelo leve de sentiment analysis em português
|
8 |
self.model = pipeline(
|
9 |
"text-classification",
|
10 |
model="neuralmind/bert-base-portuguese-cased",
|
11 |
return_all_scores=True
|
12 |
)
|
13 |
|
14 |
-
# Definições básicas dos temperamentos
|
15 |
self.temperamentos = {
|
16 |
'SANGUÍNEO': ['Alegre', 'Extrovertido', 'Social', 'Otimista', 'Comunicativo'],
|
17 |
'COLÉRICO': ['Líder', 'Determinado', 'Prático', 'Produtivo', 'Independente'],
|
@@ -20,52 +18,74 @@ class SimpleTemperamentAnalyzer:
|
|
20 |
}
|
21 |
|
22 |
def analisar_respostas(self, respostas_marcadas):
|
23 |
-
"""Analisa as respostas e retorna os percentuais de cada temperamento"""
|
24 |
-
total_possiveis = {temp: len(caract) for temp, caract in self.temperamentos.items()}
|
25 |
pontuacoes = {}
|
26 |
|
|
|
27 |
for temp, caracteristicas in self.temperamentos.items():
|
28 |
marcadas = sum(1 for c in caracteristicas if c in respostas_marcadas)
|
29 |
-
pontuacoes[temp] =
|
30 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
31 |
return pontuacoes
|
32 |
|
33 |
def gerar_analise(self, temperamento_dominante, pontuacoes):
|
34 |
-
"""Gera uma análise
|
35 |
descricoes = {
|
36 |
-
'SANGUÍNEO':
|
37 |
-
|
38 |
-
|
39 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
40 |
}
|
|
|
|
|
|
|
41 |
|
42 |
-
|
43 |
-
|
44 |
-
|
45 |
-
|
46 |
-
|
47 |
-
],
|
48 |
-
'
|
49 |
-
|
50 |
-
|
51 |
-
'Desenvolver empatia'
|
52 |
-
],
|
53 |
-
'MELANCÓLICO': [
|
54 |
-
'Ser mais flexível',
|
55 |
-
'Evitar perfeccionismo excessivo',
|
56 |
-
'Desenvolver otimismo'
|
57 |
-
],
|
58 |
-
'FLEUMÁTICO': [
|
59 |
-
'Tomar mais iniciativa',
|
60 |
-
'Expressar mais os sentimentos',
|
61 |
-
'Estabelecer metas pessoais'
|
62 |
-
]
|
63 |
}
|
64 |
|
65 |
-
|
66 |
-
|
67 |
-
|
68 |
-
|
|
|
|
|
|
|
|
|
|
|
69 |
|
70 |
def criar_interface():
|
71 |
analisador = SimpleTemperamentAnalyzer()
|
@@ -86,12 +106,19 @@ def criar_interface():
|
|
86 |
for temp, pont in pontuacoes.items():
|
87 |
resultado += f"- {temp}: {pont:.1f}%\n"
|
88 |
|
89 |
-
resultado += f"\n**
|
90 |
-
resultado += f"
|
91 |
-
|
92 |
-
resultado += "**
|
93 |
-
for
|
94 |
-
resultado += f"- {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
95 |
|
96 |
return resultado
|
97 |
|
@@ -99,22 +126,18 @@ def criar_interface():
|
|
99 |
with gr.Blocks(theme=gr.themes.Soft()) as interface:
|
100 |
gr.Markdown("## Análise de Temperamento Simplificada")
|
101 |
|
102 |
-
# Cria uma lista única com todas as características
|
103 |
todas_caracteristicas = []
|
104 |
for temp, caract in analisador.temperamentos.items():
|
105 |
todas_caracteristicas.extend(caract)
|
106 |
|
107 |
-
# Checkbox para seleção
|
108 |
selecoes = gr.CheckboxGroup(
|
109 |
choices=todas_caracteristicas,
|
110 |
label="Selecione as características que mais combinam com você:"
|
111 |
)
|
112 |
|
113 |
-
# Botão e saída
|
114 |
btn = gr.Button("Analisar")
|
115 |
saida = gr.Markdown()
|
116 |
|
117 |
-
# Evento
|
118 |
btn.click(
|
119 |
fn=processar_selecao,
|
120 |
inputs=selecoes,
|
|
|
4 |
|
5 |
class SimpleTemperamentAnalyzer:
|
6 |
def __init__(self):
|
|
|
7 |
self.model = pipeline(
|
8 |
"text-classification",
|
9 |
model="neuralmind/bert-base-portuguese-cased",
|
10 |
return_all_scores=True
|
11 |
)
|
12 |
|
|
|
13 |
self.temperamentos = {
|
14 |
'SANGUÍNEO': ['Alegre', 'Extrovertido', 'Social', 'Otimista', 'Comunicativo'],
|
15 |
'COLÉRICO': ['Líder', 'Determinado', 'Prático', 'Produtivo', 'Independente'],
|
|
|
18 |
}
|
19 |
|
20 |
def analisar_respostas(self, respostas_marcadas):
|
21 |
+
"""Analisa as respostas e retorna os percentuais normalizados de cada temperamento"""
|
|
|
22 |
pontuacoes = {}
|
23 |
|
24 |
+
# Calcula pontuações brutas
|
25 |
for temp, caracteristicas in self.temperamentos.items():
|
26 |
marcadas = sum(1 for c in caracteristicas if c in respostas_marcadas)
|
27 |
+
pontuacoes[temp] = marcadas
|
28 |
+
|
29 |
+
# Normaliza as pontuações para somarem 100%
|
30 |
+
total_pontos = sum(pontuacoes.values())
|
31 |
+
if total_pontos > 0: # Evita divisão por zero
|
32 |
+
for temp in pontuacoes:
|
33 |
+
pontuacoes[temp] = (pontuacoes[temp] / total_pontos) * 100
|
34 |
+
|
35 |
return pontuacoes
|
36 |
|
37 |
def gerar_analise(self, temperamento_dominante, pontuacoes):
|
38 |
+
"""Gera uma análise detalhada baseada em todos os temperamentos"""
|
39 |
descricoes = {
|
40 |
+
'SANGUÍNEO': {
|
41 |
+
'positivo': ['sociabilidade', 'entusiasmo', 'carisma', 'energia positiva', 'facilidade de comunicação'],
|
42 |
+
'desafios': ['tendência à dispersão', 'dificuldade com rotinas', 'pode ser superficial'],
|
43 |
+
'profissional': 'Tende a se destacar em áreas que envolvem interação social, vendas, comunicação e trabalho em equipe.',
|
44 |
+
'relacionamentos': 'Faz amizades facilmente e mantém um círculo social ativo. Precisa desenvolver maior profundidade nas relações.'
|
45 |
+
},
|
46 |
+
'COLÉRICO': {
|
47 |
+
'positivo': ['liderança', 'determinação', 'praticidade', 'foco em resultados', 'iniciativa'],
|
48 |
+
'desafios': ['impaciência', 'autoritarismo', 'dificuldade em demonstrar empatia'],
|
49 |
+
'profissional': 'Excelente em posições de liderança, gestão de projetos e empreendedorismo.',
|
50 |
+
'relacionamentos': 'Direto e objetivo nas relações, precisa desenvolver mais sensibilidade e paciência.'
|
51 |
+
},
|
52 |
+
'MELANCÓLICO': {
|
53 |
+
'positivo': ['profundidade analítica', 'criatividade', 'atenção aos detalhes', 'sensibilidade', 'perfeccionismo'],
|
54 |
+
'desafios': ['autocrítica excessiva', 'tendência à introspecção', 'dificuldade com mudanças'],
|
55 |
+
'profissional': 'Se destaca em áreas que exigem análise detalhada, planejamento e criatividade.',
|
56 |
+
'relacionamentos': 'Valoriza relações profundas e significativas, mas pode ter dificuldade em se abrir.'
|
57 |
+
},
|
58 |
+
'FLEUMÁTICO': {
|
59 |
+
'positivo': ['equilíbrio emocional', 'diplomacia', 'organização', 'confiabilidade', 'paciência'],
|
60 |
+
'desafios': ['passividade', 'resistência a mudanças', 'dificuldade em tomar iniciativa'],
|
61 |
+
'profissional': 'Eficiente em funções que requerem mediação, organização e trabalho metódico.',
|
62 |
+
'relacionamentos': 'Estável e confiável nas relações, mas pode parecer distante ou pouco expressivo.'
|
63 |
+
}
|
64 |
}
|
65 |
+
|
66 |
+
# Ordena os temperamentos por pontuação
|
67 |
+
temp_ordenados = sorted(pontuacoes.items(), key=lambda x: x[1], reverse=True)
|
68 |
|
69 |
+
# Gera análise combinada
|
70 |
+
analise = {
|
71 |
+
'perfil_principal': f"Seu perfil predominante é {temperamento_dominante} ({pontuacoes[temperamento_dominante]:.1f}%), ",
|
72 |
+
'combinacao': "com influências significativas de " +
|
73 |
+
" e ".join([f"{temp} ({pont:.1f}%)" for temp, pont in temp_ordenados[1:3]]) + ".",
|
74 |
+
'caracteristicas': [],
|
75 |
+
'areas_desenvolvimento': [],
|
76 |
+
'perfil_profissional': "",
|
77 |
+
'relacionamentos': ""
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
78 |
}
|
79 |
|
80 |
+
# Adiciona características baseadas nos dois temperamentos principais
|
81 |
+
for temp, pont in temp_ordenados[:2]:
|
82 |
+
if pont > 20: # Só considera temperamentos com pontuação significativa
|
83 |
+
analise['caracteristicas'].extend(descricoes[temp]['positivo'][:3])
|
84 |
+
analise['areas_desenvolvimento'].extend(descricoes[temp]['desafios'][:2])
|
85 |
+
analise['perfil_profissional'] += descricoes[temp]['profissional'] + " "
|
86 |
+
analise['relacionamentos'] += descricoes[temp]['relacionamentos'] + " "
|
87 |
+
|
88 |
+
return analise
|
89 |
|
90 |
def criar_interface():
|
91 |
analisador = SimpleTemperamentAnalyzer()
|
|
|
106 |
for temp, pont in pontuacoes.items():
|
107 |
resultado += f"- {temp}: {pont:.1f}%\n"
|
108 |
|
109 |
+
resultado += f"\n**Análise Detalhada:**\n"
|
110 |
+
resultado += f"{analise['perfil_principal']}{analise['combinacao']}\n\n"
|
111 |
+
|
112 |
+
resultado += "**Principais Características:**\n"
|
113 |
+
for caract in analise['caracteristicas']:
|
114 |
+
resultado += f"- {caract}\n"
|
115 |
+
|
116 |
+
resultado += "\n**Áreas para Desenvolvimento:**\n"
|
117 |
+
for area in analise['areas_desenvolvimento']:
|
118 |
+
resultado += f"- {area}\n"
|
119 |
+
|
120 |
+
resultado += f"\n**Perfil Profissional:**\n{analise['perfil_profissional']}\n\n"
|
121 |
+
resultado += f"**Relacionamentos:**\n{analise['relacionamentos']}\n"
|
122 |
|
123 |
return resultado
|
124 |
|
|
|
126 |
with gr.Blocks(theme=gr.themes.Soft()) as interface:
|
127 |
gr.Markdown("## Análise de Temperamento Simplificada")
|
128 |
|
|
|
129 |
todas_caracteristicas = []
|
130 |
for temp, caract in analisador.temperamentos.items():
|
131 |
todas_caracteristicas.extend(caract)
|
132 |
|
|
|
133 |
selecoes = gr.CheckboxGroup(
|
134 |
choices=todas_caracteristicas,
|
135 |
label="Selecione as características que mais combinam com você:"
|
136 |
)
|
137 |
|
|
|
138 |
btn = gr.Button("Analisar")
|
139 |
saida = gr.Markdown()
|
140 |
|
|
|
141 |
btn.click(
|
142 |
fn=processar_selecao,
|
143 |
inputs=selecoes,
|