import gradio as gr from transformers import pipeline import numpy as np class SimpleTemperamentAnalyzer: def __init__(self): # Usando um modelo leve de sentiment analysis em português self.model = pipeline( "text-classification", model="neuralmind/bert-base-portuguese-cased", return_all_scores=True ) # Definições básicas dos temperamentos self.temperamentos = { 'SANGUÍNEO': ['Alegre', 'Extrovertido', 'Social', 'Otimista', 'Comunicativo'], 'COLÉRICO': ['Líder', 'Determinado', 'Prático', 'Produtivo', 'Independente'], 'MELANCÓLICO': ['Perfeccionista', 'Detalhista', 'Artístico', 'Sensível', 'Idealista'], 'FLEUMÁTICO': ['Calmo', 'Pacífico', 'Objetivo', 'Diplomático', 'Organizado'] } def analisar_respostas(self, respostas_marcadas): """Analisa as respostas e retorna os percentuais de cada temperamento""" total_possiveis = {temp: len(caract) for temp, caract in self.temperamentos.items()} pontuacoes = {} for temp, caracteristicas in self.temperamentos.items(): marcadas = sum(1 for c in caracteristicas if c in respostas_marcadas) pontuacoes[temp] = (marcadas / total_possiveis[temp]) * 100 return pontuacoes def gerar_analise(self, temperamento_dominante, pontuacoes): """Gera uma análise simplificada baseada no temperamento dominante""" descricoes = { 'SANGUÍNEO': 'pessoa sociável e entusiasmada, que se relaciona facilmente', 'COLÉRICO': 'pessoa determinada e prática, com forte capacidade de liderança', 'MELANCÓLICO': 'pessoa profunda e analítica, com sensibilidade artística', 'FLEUMÁTICO': 'pessoa calma e objetiva, que mantém o equilíbrio em situações difíceis' } recomendacoes = { 'SANGUÍNEO': [ 'Desenvolver mais foco e disciplina', 'Estabelecer rotinas diárias', 'Praticar conclusão de tarefas' ], 'COLÉRICO': [ 'Cultivar mais paciência', 'Ouvir mais as pessoas', 'Desenvolver empatia' ], 'MELANCÓLICO': [ 'Ser mais flexível', 'Evitar perfeccionismo excessivo', 'Desenvolver otimismo' ], 'FLEUMÁTICO': [ 'Tomar mais iniciativa', 'Expressar mais os sentimentos', 'Estabelecer metas pessoais' ] } return { 'descricao': descricoes[temperamento_dominante], 'recomendacoes': recomendacoes[temperamento_dominante] } def criar_interface(): analisador = SimpleTemperamentAnalyzer() def processar_selecao(selecoes): # Calcula pontuações pontuacoes = analisador.analisar_respostas(selecoes) # Identifica temperamento dominante temperamento_dominante = max(pontuacoes.items(), key=lambda x: x[1])[0] # Gera análise analise = analisador.gerar_analise(temperamento_dominante, pontuacoes) # Formata resultado resultado = f""" ### Resultados da Análise de Temperamento **Pontuações:** {' '.join([f'- {temp}: {pont:.1f}%\n' for temp, pont in pontuacoes.items()])} **Temperamento Predominante:** {temperamento_dominante} **Análise:** Você demonstra ser uma {analise['descricao']}. **Recomendações para Desenvolvimento:** {"".join([f'- {rec}\n' for rec in analise['recomendacoes']])} """ return resultado # Interface Gradio with gr.Blocks(theme=gr.themes.Soft()) as interface: gr.Markdown("## Análise de Temperamento Simplificada") # Cria uma lista única com todas as características todas_caracteristicas = [] for temp, caract in analisador.temperamentos.items(): todas_caracteristicas.extend(caract) # Checkbox para seleção selecoes = gr.CheckboxGroup( choices=todas_caracteristicas, label="Selecione as características que mais combinam com você:" ) # Botão e saída btn = gr.Button("Analisar") saida = gr.Markdown() # Evento btn.click( fn=processar_selecao, inputs=selecoes, outputs=saida ) return interface # Arquivo requirements.txt simplificado """ gradio==4.19.2 transformers==4.37.2 numpy==1.26.3 torch==2.1.2 """ if __name__ == "__main__": interface = criar_interface() interface.launch()