Update app.py
Browse files
app.py
CHANGED
@@ -1,6 +1,5 @@
|
|
1 |
import gradio as gr
|
2 |
from sentence_transformers import SentenceTransformer
|
3 |
-
from sklearn.metrics.pairwise import cosine_similarity
|
4 |
import numpy as np
|
5 |
|
6 |
# Modelo para embeddings
|
@@ -34,11 +33,9 @@ disc_questions = [
|
|
34 |
("S", "Ouvir atentamente e contribuir quando solicitado"),
|
35 |
("C", "Tomar notas e questionar os detalhes")
|
36 |
]
|
37 |
-
}
|
38 |
-
# Adicione mais perguntas conforme necessário
|
39 |
]
|
40 |
|
41 |
-
# Características de cada perfil para o relatório
|
42 |
perfis_caracteristicas = {
|
43 |
'D': {
|
44 |
'pontos_fortes': [
|
@@ -129,12 +126,18 @@ perfis_caracteristicas = {
|
|
129 |
def calcular_perfil(respostas):
|
130 |
# Contar frequência de cada perfil
|
131 |
contagem = {'D': 0, 'I': 0, 'S': 0, 'C': 0}
|
|
|
132 |
for resposta in respostas:
|
133 |
-
|
|
|
|
|
134 |
|
135 |
# Calcular porcentagens
|
136 |
total = sum(contagem.values())
|
137 |
-
|
|
|
|
|
|
|
138 |
|
139 |
return percentuais
|
140 |
|
@@ -166,18 +169,14 @@ def gerar_relatorio(percentuais):
|
|
166 |
for caracteristica in perfis_caracteristicas[perfil_dominante]['ambiente_ideal']:
|
167 |
relatorio += f"- {caracteristica}\n"
|
168 |
|
169 |
-
# Recomendações personalizadas baseadas no modelo
|
170 |
-
texto_base = " ".join(perfis_caracteristicas[perfil_dominante]['pontos_fortes'])
|
171 |
-
embedding_base = model.encode([texto_base])[0]
|
172 |
-
|
173 |
return relatorio
|
174 |
|
175 |
-
def processar_questionario(
|
176 |
-
#
|
177 |
-
|
178 |
|
179 |
# Calcular percentuais
|
180 |
-
percentuais = calcular_perfil(
|
181 |
|
182 |
# Gerar relatório
|
183 |
relatorio = gerar_relatorio(percentuais)
|
@@ -188,23 +187,28 @@ def processar_questionario(respostas):
|
|
188 |
with gr.Blocks(title="Questionário DISC") as iface:
|
189 |
gr.Markdown("# Análise de Perfil Comportamental DISC")
|
190 |
|
191 |
-
|
192 |
-
|
193 |
-
for i, questao in enumerate(disc_questions):
|
194 |
-
gr.Markdown(f"### {questao['pergunta']}")
|
195 |
-
respostas.append(
|
196 |
-
gr.Radio(
|
197 |
-
choices=[f"{perfil} - {desc}" for perfil, desc in questao['opcoes']],
|
198 |
-
label=f"Questão {i+1}"
|
199 |
-
)
|
200 |
-
)
|
201 |
|
202 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
203 |
output = gr.Textbox(label="Relatório", lines=20)
|
204 |
|
|
|
|
|
|
|
|
|
205 |
btn.click(
|
206 |
fn=processar_questionario,
|
207 |
-
inputs=
|
208 |
outputs=output
|
209 |
)
|
210 |
|
|
|
1 |
import gradio as gr
|
2 |
from sentence_transformers import SentenceTransformer
|
|
|
3 |
import numpy as np
|
4 |
|
5 |
# Modelo para embeddings
|
|
|
33 |
("S", "Ouvir atentamente e contribuir quando solicitado"),
|
34 |
("C", "Tomar notas e questionar os detalhes")
|
35 |
]
|
36 |
+
}
|
|
|
37 |
]
|
38 |
|
|
|
39 |
perfis_caracteristicas = {
|
40 |
'D': {
|
41 |
'pontos_fortes': [
|
|
|
126 |
def calcular_perfil(respostas):
|
127 |
# Contar frequência de cada perfil
|
128 |
contagem = {'D': 0, 'I': 0, 'S': 0, 'C': 0}
|
129 |
+
|
130 |
for resposta in respostas:
|
131 |
+
if resposta: # Verifica se a resposta não é None
|
132 |
+
perfil = resposta.split()[0] # Pega a primeira letra (D, I, S ou C)
|
133 |
+
contagem[perfil] += 1
|
134 |
|
135 |
# Calcular porcentagens
|
136 |
total = sum(contagem.values())
|
137 |
+
if total > 0: # Evita divisão por zero
|
138 |
+
percentuais = {k: (v/total) * 100 for k, v in contagem.items()}
|
139 |
+
else:
|
140 |
+
percentuais = {k: 0 for k in contagem.keys()}
|
141 |
|
142 |
return percentuais
|
143 |
|
|
|
169 |
for caracteristica in perfis_caracteristicas[perfil_dominante]['ambiente_ideal']:
|
170 |
relatorio += f"- {caracteristica}\n"
|
171 |
|
|
|
|
|
|
|
|
|
172 |
return relatorio
|
173 |
|
174 |
+
def processar_questionario(*args):
|
175 |
+
# Recebe as respostas como argumentos individuais e converte para lista
|
176 |
+
respostas = list(args)
|
177 |
|
178 |
# Calcular percentuais
|
179 |
+
percentuais = calcular_perfil(respostas)
|
180 |
|
181 |
# Gerar relatório
|
182 |
relatorio = gerar_relatorio(percentuais)
|
|
|
187 |
with gr.Blocks(title="Questionário DISC") as iface:
|
188 |
gr.Markdown("# Análise de Perfil Comportamental DISC")
|
189 |
|
190 |
+
# Lista para armazenar os componentes de rádio
|
191 |
+
radio_components = []
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
192 |
|
193 |
+
# Criar questões
|
194 |
+
for i, questao in enumerate(disc_questions):
|
195 |
+
gr.Markdown(f"### {questao['pergunta']}")
|
196 |
+
radio = gr.Radio(
|
197 |
+
choices=[f"{perfil} - {desc}" for perfil, desc in questao['opcoes']],
|
198 |
+
label=f"Questão {i+1}"
|
199 |
+
)
|
200 |
+
radio_components.append(radio)
|
201 |
+
|
202 |
+
# Saída
|
203 |
output = gr.Textbox(label="Relatório", lines=20)
|
204 |
|
205 |
+
# Botão
|
206 |
+
btn = gr.Button("Gerar Relatório")
|
207 |
+
|
208 |
+
# Conectar função aos componentes
|
209 |
btn.click(
|
210 |
fn=processar_questionario,
|
211 |
+
inputs=radio_components,
|
212 |
outputs=output
|
213 |
)
|
214 |
|