Spaces:
No application file
No application file
| from tensorflow.keras.models import load_model | |
| from tensorflow.keras.preprocessing.text import Tokenizer | |
| from tensorflow.keras.preprocessing.sequence import pad_sequences | |
| import numpy as np | |
| import pickle # Si deseas guardar/cargar el tokenizer | |
| import re | |
| import os | |
| # Carga el modelo entrenado | |
| model_path = os.path.join(os.path.dirname(__file__),'model_2_texto.h5') # Cambia el número de versión si es necesario | |
| model = load_model(model_path) | |
| # Etiquetas de emociones (asegúrate de que coincidan con las usadas en el entrenamiento) | |
| EMOTION_LABELS = { | |
| 0: 'sadness', | |
| 1: 'joy', | |
| 2: 'love', | |
| 3: 'anger', | |
| 4: 'fear', | |
| 5: 'surprise', | |
| } | |
| # Carga el tokenizer (suponiendo que lo guardaste en un archivo) | |
| tokenizer_path = os.path.join(os.path.dirname(__file__),'tokenizer.pickle') # Cambia el nombre si usaste otro | |
| with open(tokenizer_path, 'rb') as handle: | |
| tokenizer = pickle.load(handle) | |
| # Configuración del padding | |
| MAX_LEN = 100 # Debe coincidir con el valor usado en el entrenamiento | |
| # Función para limpiar el texto | |
| def clean_text(text): | |
| if isinstance(text, str): | |
| text = re.sub(r'http\S+|www\S+|https\S+', '', text) | |
| text = re.sub(r'@\w+|#\w+', '', text) | |
| text = re.sub(r'[^a-zA-Z0-9\s!?.,]', '', text) | |
| text = text.lower().strip() | |
| return text | |
| return "" | |
| # Función para predecir la emoción principal | |
| def predict_text(text): | |
| sequence = tokenizer.texts_to_sequences(text) | |
| padded = pad_sequences(sequence, maxlen=MAX_LEN) | |
| prediction = model.predict(padded)[0] | |
| max_index = np.argmax(prediction) | |
| main_emotion = EMOTION_LABELS[max_index] | |
| return str(main_emotion) | |
| # Ejemplo de predicción7 | |
| sample_text = 'I hate my stupid dog' | |
| emotion = predict_text(sample_text) | |
| print(f"La emoción principal es: {emotion}") |