# Importar librerías necesarias import streamlit as st from transformers import AutoTokenizer, AutoModelForSequenceClassification import torch import numpy as np # Cargar el modelo BERT preentrenado y el tokenizador MODEL_NAME = "bert-base-uncased" tokenizer = AutoTokenizer.from_pretrained(MODEL_NAME) model = AutoModelForSequenceClassification.from_pretrained(MODEL_NAME, num_labels=3) # Diccionario de palabras clave con sentimientos asociados palabras_clave = { "Positivo": ["feliz", "alegre", "contento", "genial", "maravilloso"], "Negativo": ["triste", "deprimido", "mal", "horrible", "terrible"], "Ambiguo": ["no sé", "confuso", "indeciso", "raro"] } # Función para predecir el sentimiento del modelo def predecir_sentimiento(texto): """ Toma un texto de entrada y devuelve la clasificación del sentimiento usando el modelo BERT. Sentimientos posibles: Negativo, Neutral, Positivo. """ entradas = tokenizer(texto, return_tensors="pt", truncation=True, padding=True, max_length=128) with torch.no_grad(): salidas = model(**entradas) prediccion = np.argmax(salidas.logits.numpy(), axis=1) etiquetas = ["Negativo", "Neutral", "Positivo"] return etiquetas[prediccion[0]] # Función para ajustar el sentimiento con palabras clave def ajustar_sentimiento(texto, sentimiento_modelo): """ Ajusta el sentimiento clasificado por el modelo si se encuentran palabras clave en el texto. """ texto = texto.lower() for palabra in palabras_clave["Positivo"]: if palabra in texto: return "Positivo" for palabra in palabras_clave["Negativo"]: if palabra in texto: return "Negativo" for palabra in palabras_clave["Ambiguo"]: if palabra in texto: return "Ambiguo" return sentimiento_modelo # Estilos personalizados con CSS st.markdown(""" """, unsafe_allow_html=True) # Título de la aplicación st.markdown("""

¿Confundido con tus sentimientos?
Identifiquémoslo juntos.

""", unsafe_allow_html=True) # Descripción de la aplicación st.write(""" Esta aplicación utiliza un modelo preentrenado de **BERT** para clasificar el sentimiento de un texto en **Positivo**, **Neutral** o **Negativo**.\n\n Escribe cualquier comentario, pensamiento o frase y te ayudaré a entender su tono general. 😊 """) # Entrada del usuario texto_usuario = st.text_area("¿Qué te gustaría compartir hoy?", placeholder="Cuéntame cómo te sientes...") # Botón para analizar el sentimiento if st.button("Analizar Sentimiento"): if texto_usuario.strip(): # Predecir el sentimiento usando el modelo sentimiento_modelo = predecir_sentimiento(texto_usuario) # Ajustar el sentimiento si se detectan palabras clave sentimiento_final = ajustar_sentimiento(texto_usuario, sentimiento_modelo) # Mostrar el resultado al usuario st.subheader(f"El sentimiento del texto es: {sentimiento_final}") # Respuestas empáticas según el sentimiento if sentimiento_final == "Negativo": st.write("Parece que no estás del todo contento con esto, y está bien no saber cómo sentirse a veces. 😊") elif sentimiento_final == "Neutral": st.write("Hmm, el tono del texto parece neutro. Si necesitas hablar más sobre esto, ¡aquí estoy para escuchar! 🤗") elif sentimiento_final == "Positivo": st.write("¡Qué bien que te sientes positivo! 🌟 Sigue disfrutando esa energía.") else: st.warning("Por favor ingresa un texto válido para analizar.") # Pie de página personalizado st.markdown("---") st.markdown("""

Desarrollado por Grupo 7 - Procesamiento de datos con AI - Especialización en Inteligencia Artificial UAO | Proyecto del Taller Final - Módulo 2 🚀

""", unsafe_allow_html=True)