File size: 1,665 Bytes
e0c267d
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
import streamlit as st
from transformers import MarianMTModel, MarianTokenizer

# Define supported language pairs (source-target)
LANGUAGES = {
    "en": "English",
    "fr": "French",
    "de": "German",
    "es": "Spanish",
    "it": "Italian",
    "pt": "Portuguese",
    "ru": "Russian",
    "zh": "Chinese",
}

def get_model_and_tokenizer(src_lang: str, tgt_lang: str):
    model_name = f"Helsinki-NLP/opus-mt-{src_lang}-{tgt_lang}"
    model = MarianMTModel.from_pretrained(model_name)
    tokenizer = MarianTokenizer.from_pretrained(model_name)
    return model, tokenizer

def translate_text(text: str, source_lang: str, target_lang: str):
    model, tokenizer = get_model_and_tokenizer(source_lang, target_lang)
    translated = model.generate(**tokenizer(text, return_tensors="pt", padding=True))
    translated_text = tokenizer.decode(translated[0], skip_special_tokens=True)
    return translated_text

# Streamlit app
st.title("Text Translation App")

st.write("Translate text from one language to another using a Hugging Face model.")

source_lang = st.selectbox("Select the source language", list(LANGUAGES.keys()), format_func=lambda x: LANGUAGES[x])
target_lang = st.selectbox("Select the target language", list(LANGUAGES.keys()), format_func=lambda x: LANGUAGES[x])

text = st.text_area("Enter the text you want to translate")

if st.button("Translate"):
    if source_lang == target_lang:
        st.warning("Source and target languages are the same. Please select different languages.")
    else:
        translated_text = translate_text(text, source_lang, target_lang)
        st.write("**Translated Text:**")
        st.write(translated_text)