velvet-api / models /tradutor_local.py
Grilocas77's picture
Upload 25 files
e679b32 verified
# 📁 Ficheiro: tradutor_local.py
# 👤 Autor: Duarte Grilo – 2201320
# 🧠 Projeto Final – Engenharia Informática
# 🔤 Função: Tradução automática local entre Português e Inglês (PT ⇄ EN)
# Utiliza modelos MarianMT da HuggingFace para tradução bidirecional sem necessidade de acesso externo.
from config import TRADUTOR_MODELOS
# === Funções de Tradução ===
def traduzir_pt_para_en(texto: str) -> str:
"""
Traduz uma frase do Português para o Inglês usando modelo MarianMT.
Args:
texto (str): Frase ou parágrafo em português.
Returns:
str: Tradução em inglês.
"""
tokenizer = TRADUTOR_MODELOS["pt-en"]["tokenizer"]
model = TRADUTOR_MODELOS["pt-en"]["model"]
inputs = tokenizer([texto], return_tensors="pt", padding=True)
translated = model.generate(**inputs)
return tokenizer.decode(translated[0], skip_special_tokens=True)
def traduzir_en_para_pt(texto: str) -> str:
"""
Traduz uma frase do Inglês para o Português usando modelo MarianMT.
Args:
texto (str): Frase ou parágrafo em inglês.
Returns:
str: Tradução em português.
"""
tokenizer = TRADUTOR_MODELOS["en-pt"]["tokenizer"]
model = TRADUTOR_MODELOS["en-pt"]["model"]
inputs = tokenizer([texto], return_tensors="pt", padding=True)
translated = model.generate(**inputs)
return tokenizer.decode(translated[0], skip_special_tokens=True)
def traduzir(texto: str, origem: str = "pt", destino: str = "en") -> str:
"""
Função genérica para traduzir entre Português e Inglês, com autodetecção de direção.
Args:
texto (str): Texto a traduzir.
origem (str): Código do idioma de origem ('pt' ou 'en').
destino (str): Código do idioma de destino ('pt' ou 'en').
Returns:
str: Texto traduzido no idioma desejado.
Raises:
ValueError: Se a combinação de idiomas for inválida.
"""
if origem == "pt" and destino == "en":
return traduzir_pt_para_en(texto)
elif origem == "en" and destino == "pt":
return traduzir_en_para_pt(texto)
else:
raise ValueError(f"Tradução não suportada: '{origem}' -> '{destino}'. Use 'pt' ou 'en'.")