DHEIVER commited on
Commit
3d31404
·
verified ·
1 Parent(s): 6ed5258

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +123 -100
app.py CHANGED
@@ -1,116 +1,139 @@
1
  import gradio as gr
2
- from temperament_analyzer import TemperamentAnalyzer
 
3
 
4
- def create_interface():
5
- analyzer = TemperamentAnalyzer()
6
-
7
- def process_selections(
8
- sang_strengths, sang_weaknesses,
9
- col_strengths, col_weaknesses,
10
- mel_strengths, mel_weaknesses,
11
- fleu_strengths, fleu_weaknesses
12
- ):
13
- # Organize responses
14
- responses = {
15
- 'SANGUÍNEO': {
16
- 'strengths': sang_strengths,
17
- 'weaknesses': sang_weaknesses
18
- },
19
- 'COLÉRICO': {
20
- 'strengths': col_strengths,
21
- 'weaknesses': col_weaknesses
22
- },
23
- 'MELANCÓLICO': {
24
- 'strengths': mel_strengths,
25
- 'weaknesses': mel_weaknesses
26
- },
27
- 'FLEUMÁTICO': {
28
- 'strengths': fleu_strengths,
29
- 'weaknesses': fleu_weaknesses
30
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
31
  }
 
 
 
 
 
 
 
32
 
33
- # Calculate scores
34
- scores = analyzer.analyze_responses(responses)
35
 
36
- # Identify dominant temperament
37
- dominant = max(scores.items(), key=lambda x: x[1])[0]
38
 
39
- # Format result
40
- result = f"""
41
- # Análise de Temperamento
 
 
 
 
 
42
 
43
- ## Pontuações
44
- {'-' * 50}
45
- """ + '\n'.join([f"**{temp}**: {score:.1f}%" for temp, score in scores.items()]) + f"""
46
 
47
- ## Temperamento Dominante
48
- {'-' * 50}
49
- **{dominant}**
50
  """
51
 
52
- return result
53
 
54
- # Gradio Interface
55
- with gr.Blocks(theme=gr.themes.Soft()) as iface:
56
- gr.Markdown("# Análise de Temperamento e Necessidades Espirituais")
57
 
58
- with gr.Tab("SANGUÍNEO"):
59
- sang_str = gr.CheckboxGroup(
60
- choices=analyzer.questionnaire['SANGUÍNEO']['strengths'],
61
- label="Pontos Fortes"
62
- )
63
- sang_weak = gr.CheckboxGroup(
64
- choices=analyzer.questionnaire['SANGUÍNEO']['weaknesses'],
65
- label="Pontos Fracos"
66
- )
67
-
68
- with gr.Tab("COLÉRICO"):
69
- col_str = gr.CheckboxGroup(
70
- choices=analyzer.questionnaire['COLÉRICO']['strengths'],
71
- label="Pontos Fortes"
72
- )
73
- col_weak = gr.CheckboxGroup(
74
- choices=analyzer.questionnaire['COLÉRICO']['weaknesses'],
75
- label="Pontos Fracos"
76
- )
77
-
78
- with gr.Tab("MELANCÓLICO"):
79
- mel_str = gr.CheckboxGroup(
80
- choices=analyzer.questionnaire['MELANCÓLICO']['strengths'],
81
- label="Pontos Fortes"
82
- )
83
- mel_weak = gr.CheckboxGroup(
84
- choices=analyzer.questionnaire['MELANCÓLICO']['weaknesses'],
85
- label="Pontos Fracos"
86
- )
87
-
88
- with gr.Tab("FLEUMÁTICO"):
89
- fleu_str = gr.CheckboxGroup(
90
- choices=analyzer.questionnaire['FLEUMÁTICO']['strengths'],
91
- label="Pontos Fortes"
92
- )
93
- fleu_weak = gr.CheckboxGroup(
94
- choices=analyzer.questionnaire['FLEUMÁTICO']['weaknesses'],
95
- label="Pontos Fracos"
96
- )
97
-
98
- analyze_btn = gr.Button("Analisar Temperamento", variant="primary")
99
- output = gr.Markdown()
100
-
101
- analyze_btn.click(
102
- fn=process_selections,
103
- inputs=[
104
- sang_str, sang_weak,
105
- col_str, col_weak,
106
- mel_str, mel_weak,
107
- fleu_str, fleu_weak
108
- ],
109
- outputs=output
110
  )
 
 
 
 
 
 
 
 
 
 
 
 
 
111
 
112
- return iface
 
 
 
 
 
 
113
 
114
  if __name__ == "__main__":
115
- iface = create_interface()
116
- iface.launch()
 
1
  import gradio as gr
2
+ from transformers import pipeline
3
+ 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'],
18
+ 'MELANCÓLICO': ['Perfeccionista', 'Detalhista', 'Artístico', 'Sensível', 'Idealista'],
19
+ 'FLEUMÁTICO': ['Calmo', 'Pacífico', 'Objetivo', 'Diplomático', 'Organizado']
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()
72
+
73
+ def processar_selecao(selecoes):
74
+ # Calcula pontuações
75
+ pontuacoes = analisador.analisar_respostas(selecoes)
76
 
77
+ # Identifica temperamento dominante
78
+ temperamento_dominante = max(pontuacoes.items(), key=lambda x: x[1])[0]
79
 
80
+ # Gera análise
81
+ analise = analisador.gerar_analise(temperamento_dominante, pontuacoes)
82
 
83
+ # Formata resultado
84
+ resultado = f"""
85
+ ### Resultados da Análise de Temperamento
86
+
87
+ **Pontuações:**
88
+ {' '.join([f'- {temp}: {pont:.1f}%\n' for temp, pont in pontuacoes.items()])}
89
+
90
+ **Temperamento Predominante:** {temperamento_dominante}
91
 
92
+ **Análise:**
93
+ Você demonstra ser uma {analise['descricao']}.
 
94
 
95
+ **Recomendações para Desenvolvimento:**
96
+ {"".join([f'- {rec}\n' for rec in analise['recomendacoes']])}
 
97
  """
98
 
99
+ return resultado
100
 
101
+ # Interface Gradio
102
+ with gr.Blocks(theme=gr.themes.Soft()) as interface:
103
+ gr.Markdown("## Análise de Temperamento Simplificada")
104
 
105
+ # Cria uma lista única com todas as características
106
+ todas_caracteristicas = []
107
+ for temp, caract in analisador.temperamentos.items():
108
+ todas_caracteristicas.extend(caract)
109
+
110
+ # Checkbox para seleção
111
+ selecoes = gr.CheckboxGroup(
112
+ choices=todas_caracteristicas,
113
+ label="Selecione as características que mais combinam com você:"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
114
  )
115
+
116
+ # Botão e saída
117
+ btn = gr.Button("Analisar")
118
+ saida = gr.Markdown()
119
+
120
+ # Evento
121
+ btn.click(
122
+ fn=processar_selecao,
123
+ inputs=selecoes,
124
+ outputs=saida
125
+ )
126
+
127
+ return interface
128
 
129
+ # Arquivo requirements.txt simplificado
130
+ """
131
+ gradio==4.19.2
132
+ transformers==4.37.2
133
+ numpy==1.26.3
134
+ torch==2.1.2
135
+ """
136
 
137
  if __name__ == "__main__":
138
+ interface = criar_interface()
139
+ interface.launch()