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

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +71 -30
app.py CHANGED
@@ -1,9 +1,11 @@
1
  import gradio as gr
2
  from transformers import pipeline
3
  import numpy as np
 
4
 
5
  class SimpleTemperamentAnalyzer:
6
  def __init__(self):
 
7
  self.model = pipeline(
8
  "text-classification",
9
  model="neuralmind/bert-base-portuguese-cased",
@@ -17,25 +19,67 @@ class SimpleTemperamentAnalyzer:
17
  'FLEUMÁTICO': ['Calmo', 'Pacífico', 'Objetivo', 'Diplomático', 'Organizado']
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'],
@@ -63,23 +107,26 @@ class SimpleTemperamentAnalyzer:
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'] + " "
@@ -91,23 +138,18 @@ def criar_interface():
91
  analisador = SimpleTemperamentAnalyzer()
92
 
93
  def processar_selecao(selecoes):
94
- # Calcula pontuações
95
  pontuacoes = analisador.analisar_respostas(selecoes)
96
-
97
- # Identifica temperamento dominante
98
  temperamento_dominante = max(pontuacoes.items(), key=lambda x: x[1])[0]
99
-
100
- # Gera análise
101
  analise = analisador.gerar_analise(temperamento_dominante, pontuacoes)
102
 
103
- # Formata resultado
104
  resultado = "### Resultados da Análise de Temperamento\n\n"
105
  resultado += "**Pontuações:**\n"
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']:
@@ -122,7 +164,6 @@ def criar_interface():
122
 
123
  return resultado
124
 
125
- # Interface Gradio
126
  with gr.Blocks(theme=gr.themes.Soft()) as interface:
127
  gr.Markdown("## Análise de Temperamento Simplificada")
128
 
 
1
  import gradio as gr
2
  from transformers import pipeline
3
  import numpy as np
4
+ from typing import List, Dict
5
 
6
  class SimpleTemperamentAnalyzer:
7
  def __init__(self):
8
+ # Modelo para análise de sentimentos em português
9
  self.model = pipeline(
10
  "text-classification",
11
  model="neuralmind/bert-base-portuguese-cased",
 
19
  'FLEUMÁTICO': ['Calmo', 'Pacífico', 'Objetivo', 'Diplomático', 'Organizado']
20
  }
21
 
22
+ # Descrições para análise do modelo
23
+ self.descricoes_temperamentos = {
24
+ 'SANGUÍNEO': 'pessoa extrovertida, social, otimista e comunicativa',
25
+ 'COLÉRICO': 'pessoa determinada, prática, líder e independente',
26
+ 'MELANCÓLICO': 'pessoa perfeccionista, sensível, detalhista e artística',
27
+ 'FLEUMÁTICO': 'pessoa calma, pacífica, objetiva e organizada'
28
+ }
29
+
30
+ def analisar_texto_caracteristicas(self, caracteristicas: List[str]) -> Dict[str, float]:
31
+ """Usa o modelo NLP para analisar o texto das características selecionadas"""
32
+ # Junta as características em um texto para análise
33
+ texto_analise = " ".join(caracteristicas)
34
+
35
+ # Análise para cada temperamento
36
+ scores_temp = {}
37
+ for temp, desc in self.descricoes_temperamentos.items():
38
+ # Analisa a similaridade entre as características selecionadas e a descrição do temperamento
39
+ resultado = self.model(f"Características: {texto_analise}. Descrição: {desc}")
40
+ scores_temp[temp] = resultado[0][0]['score'] # Pega o score principal
41
+
42
+ return scores_temp
43
+
44
+ def analisar_respostas(self, respostas_marcadas: List[str]) -> Dict[str, float]:
45
+ """Combina análise tradicional com NLP para gerar pontuações"""
46
+ # Pontuações baseadas em contagem
47
+ pontuacoes_contagem = {}
48
  for temp, caracteristicas in self.temperamentos.items():
49
  marcadas = sum(1 for c in caracteristicas if c in respostas_marcadas)
50
+ pontuacoes_contagem[temp] = marcadas
51
+
52
+ # Pontuações baseadas em NLP
53
+ pontuacoes_nlp = self.analisar_texto_caracteristicas(respostas_marcadas)
54
+
55
+ # Combina as pontuações (média ponderada)
56
+ pontuacoes_finais = {}
57
+ for temp in self.temperamentos:
58
+ # Peso 0.6 para contagem e 0.4 para NLP
59
+ pond_contagem = pontuacoes_contagem[temp] * 0.6
60
+ pond_nlp = pontuacoes_nlp[temp] * 0.4
61
+ pontuacoes_finais[temp] = pond_contagem + pond_nlp
62
+
63
+ # Normaliza para 100%
64
+ total = sum(pontuacoes_finais.values())
65
+ if total > 0:
66
+ for temp in pontuacoes_finais:
67
+ pontuacoes_finais[temp] = (pontuacoes_finais[temp] / total) * 100
68
+
69
+ return pontuacoes_finais
70
 
71
+ def interpretar_combinacao(self, temp_ordenados: List[tuple]) -> str:
72
+ """Usa o modelo para interpretar a combinação de temperamentos"""
73
+ combinacao = f"{temp_ordenados[0][0]} com {temp_ordenados[1][0]}"
74
+ interpretacao = self.model(
75
+ f"Combinação de temperamentos: {combinacao}. "
76
+ f"Características principais: {self.descricoes_temperamentos[temp_ordenados[0][0]]} "
77
+ f"com aspectos de {self.descricoes_temperamentos[temp_ordenados[1][0]]}"
78
+ )
79
+ return interpretacao[0][0]['label']
80
+
81
+ def gerar_analise(self, temperamento_dominante: str, pontuacoes: Dict[str, float]) -> Dict:
82
+ """Gera uma análise detalhada usando o modelo NLP"""
83
  descricoes = {
84
  'SANGUÍNEO': {
85
  'positivo': ['sociabilidade', 'entusiasmo', 'carisma', 'energia positiva', 'facilidade de comunicação'],
 
107
  }
108
  }
109
 
 
110
  temp_ordenados = sorted(pontuacoes.items(), key=lambda x: x[1], reverse=True)
111
 
112
+ # Usa o modelo para interpretar a combinação
113
+ interpretacao_combinacao = self.interpretar_combinacao(temp_ordenados)
114
+
115
  analise = {
116
  'perfil_principal': f"Seu perfil predominante é {temperamento_dominante} ({pontuacoes[temperamento_dominante]:.1f}%), ",
117
+ 'combinacao': f"com influências significativas de {' e '.join([f'{temp} ({pont:.1f}%)' for temp, pont in temp_ordenados[1:3]])}.",
118
+ 'interpretacao': interpretacao_combinacao,
119
  'caracteristicas': [],
120
  'areas_desenvolvimento': [],
121
  'perfil_profissional': "",
122
  'relacionamentos': ""
123
  }
124
 
125
+ # Análise das características principais usando o modelo
126
  for temp, pont in temp_ordenados[:2]:
127
+ if pont > 20:
128
+ caract_temp = " ".join(descricoes[temp]['positivo'])
129
+ analise_caract = self.model(f"Características principais: {caract_temp}")
130
  analise['caracteristicas'].extend(descricoes[temp]['positivo'][:3])
131
  analise['areas_desenvolvimento'].extend(descricoes[temp]['desafios'][:2])
132
  analise['perfil_profissional'] += descricoes[temp]['profissional'] + " "
 
138
  analisador = SimpleTemperamentAnalyzer()
139
 
140
  def processar_selecao(selecoes):
 
141
  pontuacoes = analisador.analisar_respostas(selecoes)
 
 
142
  temperamento_dominante = max(pontuacoes.items(), key=lambda x: x[1])[0]
 
 
143
  analise = analisador.gerar_analise(temperamento_dominante, pontuacoes)
144
 
 
145
  resultado = "### Resultados da Análise de Temperamento\n\n"
146
  resultado += "**Pontuações:**\n"
147
  for temp, pont in pontuacoes.items():
148
  resultado += f"- {temp}: {pont:.1f}%\n"
149
 
150
  resultado += f"\n**Análise Detalhada:**\n"
151
+ resultado += f"{analise['perfil_principal']}{analise['combinacao']}\n"
152
+ resultado += f"**Interpretação:** {analise['interpretacao']}\n\n"
153
 
154
  resultado += "**Principais Características:**\n"
155
  for caract in analise['caracteristicas']:
 
164
 
165
  return resultado
166
 
 
167
  with gr.Blocks(theme=gr.themes.Soft()) as interface:
168
  gr.Markdown("## Análise de Temperamento Simplificada")
169