DHEIVER commited on
Commit
04f0dea
·
verified ·
1 Parent(s): ef17b94

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +69 -46
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] = (marcadas / total_possiveis[temp]) * 100
30
-
 
 
 
 
 
 
31
  return pontuacoes
32
 
33
  def gerar_analise(self, temperamento_dominante, pontuacoes):
34
- """Gera uma análise simplificada baseada no temperamento dominante"""
35
  descricoes = {
36
- 'SANGUÍNEO': 'pessoa sociável e entusiasmada, que se relaciona facilmente',
37
- 'COLÉRICO': 'pessoa determinada e prática, com forte capacidade de liderança',
38
- 'MELANCÓLICO': 'pessoa profunda e analítica, com sensibilidade artística',
39
- 'FLEUMÁTICO': 'pessoa calma e objetiva, que mantém o equilíbrio em situações difíceis'
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
40
  }
 
 
 
41
 
42
- recomendacoes = {
43
- 'SANGUÍNEO': [
44
- 'Desenvolver mais foco e disciplina',
45
- 'Estabelecer rotinas diárias',
46
- 'Praticar conclusão de tarefas'
47
- ],
48
- 'COLÉRICO': [
49
- 'Cultivar mais paciência',
50
- 'Ouvir mais as pessoas',
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
- return {
66
- 'descricao': descricoes[temperamento_dominante],
67
- 'recomendacoes': recomendacoes[temperamento_dominante]
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**Temperamento Predominante:** {temperamento_dominante}\n\n"
90
- resultado += f"**Análise:**\n"
91
- resultado += f"Você demonstra ser uma {analise['descricao']}.\n\n"
92
- resultado += "**Recomendações para Desenvolvimento:**\n"
93
- for rec in analise['recomendacoes']:
94
- resultado += f"- {rec}\n"
 
 
 
 
 
 
 
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,