File size: 2,870 Bytes
b8cc7cf
4d13f14
10f8e16
b8cc7cf
 
10f8e16
60503e8
 
68949f2
 
7f13aa1
60503e8
7f13aa1
 
68949f2
7f13aa1
 
68949f2
7f13aa1
4d13f14
68949f2
60503e8
 
4d13f14
68949f2
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
7f13aa1
 
 
 
 
 
 
 
 
 
 
 
 
ede4f5f
7f13aa1
60503e8
68949f2
 
b8cc7cf
 
dc71bb1
 
b8cc7cf
dc71bb1
68949f2
7f13aa1
4d13f14
 
7f13aa1
 
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
from transformers import pipeline
import gradio as gr

# Define el modelo de traducción inglés-español
modelo_traduccion = pipeline("translation", model="Helsinki-NLP/opus-mt-en-es")

# Define el modelo de clasificación de idiomas (cambiado a fasttext)
modelo_idioma = pipeline("text-classification", model="facebook/fasttext-language-identification")

def detectar_idioma(texto):
    """
    Detecta el idioma del texto utilizando el modelo fasttext.

    Args:
        texto (str): El texto del cual se quiere detectar el idioma.

    Returns:
        str: El código del idioma detectado (ej: 'en', 'es').
    """
    try:
        resultado = modelo_idioma(texto, top_k=1)[0]
        # El modelo fasttext devuelve códigos de idioma precedidos por '__label__'
        return resultado['label'].replace('__label__', '')
    except Exception as e:
        print(f"Error en la detección de idioma: {e}")
        return None

def traducir_texto(texto_en):
    """
    Traduce el texto de entrada del inglés al español, previa verificación del idioma.

    Args:
        texto_en (str): El texto en inglés que se va a traducir.

    Returns:
        str: El texto traducido al español o un mensaje de error si el idioma no es inglés.
    """
    if not texto_en.strip():
        return ""

    idioma_detectado = detectar_idioma(texto_en)

    if idioma_detectado == 'en':
        try:
            resultado = modelo_traduccion(texto_en)
            return resultado[0]['translation_text']
        except Exception as e:
            return f"Error en la traducción: {e}"
    else:
        return "Por favor, introduce texto en inglés para traducir."

def borrar_entrada(texto_entrada):
    """
    Borra el texto del cuadro de texto de entrada.

    Args:
        texto_entrada (str): El texto actual en el cuadro de texto de entrada.

    Returns:
        str: Una cadena vacía.
    """
    return ""

with gr.Blocks() as interfaz_traductor:
    """
    Define la interfaz gráfica de la aplicación de traducción de inglés a español con detección de idioma (fasttext).
    """
    gr.Markdown("# Traductor Inglés a Español")
    with gr.Row():
        with gr.Column():
            texto_entrada_en = gr.Textbox(label="Texto en inglés", placeholder="Pega aquí el texto en inglés", lines=10)
            boton_borrar = gr.Button("Borrar todo")
        with gr.Column():
            texto_salida_es = gr.Textbox(label="Traducción al español", placeholder="La traducción aparecerá aquí", interactive=False, lines=10)
            gr.Markdown("*Puedes copiar el texto traducido seleccionándolo y usando Ctrl+C (o Cmd+C en macOS).*")

    texto_entrada_en.change(traducir_texto, inputs=texto_entrada_en, outputs=texto_salida_es)
    boton_borrar.click(borrar_entrada, inputs=texto_entrada_en, outputs=texto_entrada_en)

interfaz_traductor.launch()