File size: 4,891 Bytes
b4f0f17
379062b
b4f0f17
379062b
b4f0f17
90fb0c4
a1ff76a
 
 
 
90fb0c4
 
379062b
90fb0c4
 
 
 
 
 
 
 
 
 
 
 
379062b
90fb0c4
379062b
 
 
 
 
 
f29a06c
379062b
 
90fb0c4
a1ff76a
74cbd86
379062b
 
 
62b7635
379062b
 
 
 
 
 
 
 
 
 
 
b4f0f17
379062b
 
 
 
 
 
 
 
f29a06c
379062b
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
import streamlit as st
import tensorflow as tf
from transformers import pipeline
import os

# Define las rutas absolutas a tus modelos
MODEL_TRANSFORMER_ENCODER_PATH = 'stacked_transformer_encoder.keras'
MODEL_TRANSFORMER_POS_PATH = 'transformer_encoder_pos.keras'
MODEL_SIMPLE_RNN_PATH = 'model_simple_rnn.keras'
MODEL_LSTM_PATH = 'model_lstm.keras'

# Cargar tus modelos de clasificaci贸n forzando la ruta absoluta
try:
    st.info(f"Intentando cargar modelo desde: {MODEL_TRANSFORMER_ENCODER_PATH}")
    model_transformer_encoder = tf.keras.models.load_model(MODEL_TRANSFORMER_ENCODER_PATH)

    st.info(f"Intentando cargar modelo desde: {MODEL_TRANSFORMER_POS_PATH}")
    model_transformer_positional_encoding = tf.keras.models.load_model(MODEL_TRANSFORMER_POS_PATH)

    st.info(f"Intentando cargar modelo desde: {MODEL_SIMPLE_RNN_PATH}")
    model_simple_rnn = tf.keras.models.load_model(MODEL_SIMPLE_RNN_PATH)

    st.info(f"Intentando cargar modelo desde: {MODEL_LSTM_PATH}")
    model_lstm = tf.keras.models.load_model(MODEL_LSTM_PATH)

    st.info("Modelos de clasificaci贸n cargados correctamente.")

except Exception as e:
    st.error(f"Error al cargar los modelos de clasificaci贸n: {e}")
    model_transformer_encoder = None
    model_transformer_positional_encoding = None
    model_simple_rnn = None
    model_lstm = None

# Cargar el pipeline de traducci贸n de Hugging Face (ingl茅s a espa帽ol)
try:
    hf_token = os.environ.get("HF_TOKEN")
    modelo_traduccion_en_es = pipeline("translation", model="Helsinki-NLP/opus-mt-en-es",token = hf_token)
    st.info("Modelo de traducci贸n (ingl茅s a espa帽ol) cargado correctamente con token.")
except Exception as e:
    st.error(f"Error al cargar el modelo de traducci贸n (ingl茅s a espa帽ol): {e}")
    translator_en_es = None

def clasificar_noticia(texto, modelo_seleccionado):
    """Funci贸n para clasificar el texto usando el modelo seleccionado."""
    modelo_a_usar = None
    if modelo_seleccionado == "Transformer Encoder Apilado" and model_transformer_encoder is not None:
        modelo_a_usar = model_transformer_encoder
    elif modelo_seleccionado == "Transformer Positional Encoding" and model_transformer_positional_encoding is not None:
        modelo_a_usar = model_transformer_positional_encoding
    elif modelo_seleccionado == "Simple RNN" and model_simple_rnn is not None:
        modelo_a_usar = model_simple_rnn
    elif modelo_seleccionado == "LSTM" and model_lstm is not None:
        modelo_a_usar = model_lstm

    if modelo_a_usar:
        # *** IMPORTANTE: Implementa aqu铆 la l贸gica de preprocesamiento del texto ***
        # para que coincida con la entrada esperada por el modelo.
        # Esto incluye tokenizaci贸n, padding, etc.
        prediction = modelo_a_usar.predict([texto])
        # *** IMPORTANTE: Interpreta la salida del modelo para obtener la clase predicha. ***
        # Esto depender谩 de c贸mo entrenaste tu modelo.
        return f"Clase predicha ({modelo_seleccionado}): {prediction}"
    else:
        return f"El modelo '{modelo_seleccionado}' no est谩 disponible."

def traducir_texto_en_es(texto_en):
    """Funci贸n para traducir texto de ingl茅s a espa帽ol."""
    if translator_en_es:
        result = translator_en_es(texto_en)[0]['translation_text']
        return result
    else:
        return "El modelo de traducci贸n (ingl茅s a espa帽ol) no est谩 disponible."

def main():
    st.title("Aplicaci贸n de Clasificaci贸n y Traducci贸n")

    tab1, tab2 = st.tabs(["Clasificaci贸n de Noticias", "Traducci贸n (Ingl茅s a Espa帽ol)"])

    with tab1:
        st.header("Clasificaci贸n de Noticias")
        input_texto_clasificacion = st.text_area("Ingresa la noticia aqu铆:")
        modelos = ["Transformer Encoder Apilado", "Transformer Positional Encoding", "Simple RNN", "LSTM"]
        modelo_seleccion = st.selectbox("Selecciona el modelo:", modelos)
        boton_clasificar = st.button("Clasificar")
        if boton_clasificar:
            if input_texto_clasificacion:
                resultado_clasificacion = clasificar_noticia(input_texto_clasificacion, modelo_seleccion)
                st.subheader("Resultado de la clasificaci贸n:")
                st.write(resultado_clasificacion)
            else:
                st.warning("Por favor, ingresa el texto de la noticia.")

    with tab2:
        st.header("Traducci贸n de Ingl茅s a Espa帽ol")
        input_texto_traduccion = st.text_area("Ingresa el texto en ingl茅s:")
        boton_traducir = st.button("Traducir")
        if boton_traducir:
            if input_texto_traduccion:
                texto_traducido = traducir_texto_en_es(input_texto_traduccion)
                st.subheader("Texto traducido al espa帽ol:")
                st.write(texto_traducido)
            else:
                st.warning("Por favor, ingresa el texto en ingl茅s.")

if __name__ == "__main__":
    main()