File size: 2,598 Bytes
fcc1cf1
ddd5e15
 
d10af90
fcc1cf1
ddd5e15
 
d10af90
ddd5e15
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
d10af90
ddd5e15
 
 
 
 
 
 
 
e29185d
ddd5e15
 
 
fcc1cf1
ddd5e15
 
 
 
 
 
 
 
 
 
 
e29185d
ddd5e15
d10af90
ddd5e15
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
fcc1cf1
ddd5e15
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
import gradio as gr
from sentence_transformers import SentenceTransformer
from sklearn.metrics.pairwise import cosine_similarity
import numpy as np

# Carregar o modelo
model = SentenceTransformer('sentence-transformers/all-MiniLM-L6-v2')

# Definir perfis DISC base para comparação
disc_profiles = {
    'D (Dominância)': '''
    - Direto e decisivo
    - Focado em resultados
    - Assume riscos
    - Gosta de desafios
    - Toma iniciativa
    ''',
    
    'I (Influência)': '''
    - Otimista e entusiasta
    - Comunicativo
    - Sociável
    - Persuasivo
    - Expressivo
    ''',
    
    'S (Estabilidade)': '''
    - Paciente e cooperativo
    - Leal e confiável
    - Calmo e consistente
    - Bom ouvinte
    - Trabalha bem em equipe
    ''',
    
    'C (Conformidade)': '''
    - Analítico e preciso
    - Sistemático
    - Focado em qualidade
    - Atento aos detalhes
    - Segue regras e procedimentos
    '''
}

def analyze_disc(user_text):
    # Gerar embeddings para o texto do usuário
    user_embedding = model.encode([user_text])[0]
    
    # Gerar embeddings para cada perfil DISC
    results = {}
    for profile_name, profile_desc in disc_profiles.items():
        profile_embedding = model.encode([profile_desc])[0]
        
        # Calcular similaridade
        similarity = cosine_similarity([user_embedding], [profile_embedding])[0][0]
        results[profile_name] = float(similarity)
    
    # Normalizar resultados para soma = 100%
    total = sum(results.values())
    normalized_results = {k: (v/total) * 100 for k, v in results.items()}
    
    # Ordenar resultados
    sorted_results = dict(sorted(normalized_results.items(), key=lambda x: x[1], reverse=True))
    
    # Formatar resultado
    output = "Análise do Perfil DISC:\n\n"
    for profile, score in sorted_results.items():
        output += f"{profile}: {score:.1f}%\n"
        
    return output

# Interface Gradio
iface = gr.Interface(
    fn=analyze_disc,
    inputs=gr.Textbox(
        lines=5,
        placeholder="Digite uma descrição do comportamento da pessoa..."
    ),
    outputs=gr.Textbox(),
    title="Analisador de Perfil DISC",
    description="Analise o perfil DISC baseado em uma descrição comportamental usando IA",
    examples=[
        ["Pessoa focada em resultados, toma decisões rápidas e gosta de desafios"],
        ["Muito comunicativo, alegre e gosta de trabalhar com pessoas"],
        ["Calmo, paciente e trabalha bem em equipe"],
        ["Detalhista, analítico e segue procedimentos com precisão"]
    ]
)

# Iniciar a interface
iface.launch()