|
|
import os |
|
|
import sys |
|
|
import codecs |
|
|
import torch |
|
|
from transformers import M2M100ForConditionalGeneration, NllbTokenizerFast |
|
|
|
|
|
def translate_text(text, model, tokenizer, src_lang, target_lang="eng_Latn"): |
|
|
""" |
|
|
Translates a single text string. |
|
|
""" |
|
|
try: |
|
|
tokenizer.src_lang = src_lang |
|
|
inputs = tokenizer(text, return_tensors="pt") |
|
|
generated_tokens = model.generate( |
|
|
**inputs, |
|
|
forced_bos_token_id=tokenizer.vocab[target_lang], |
|
|
max_length=512 |
|
|
) |
|
|
translated_text = tokenizer.batch_decode(generated_tokens, skip_special_tokens=True)[0] |
|
|
return translated_text |
|
|
except Exception as e: |
|
|
return f"An error occurred during translation: {e}" |
|
|
|
|
|
def main(): |
|
|
""" |
|
|
Main function to load the model and run a test translation. |
|
|
""" |
|
|
|
|
|
sys.stdout = codecs.getwriter('utf-8')(sys.stdout.buffer) |
|
|
|
|
|
|
|
|
script_dir = os.path.dirname(os.path.abspath(__file__)) |
|
|
nepali_model_path = os.path.join(script_dir, "models", "nllb-finetuned-nepali-en") |
|
|
|
|
|
|
|
|
print("Loading Nepali model and tokenizer...") |
|
|
try: |
|
|
device = torch.device("cuda" if torch.cuda.is_available() else "cpu") |
|
|
nepali_model = M2M100ForConditionalGeneration.from_pretrained(nepali_model_path).to(device) |
|
|
nepali_tokenizer = NllbTokenizerFast.from_pretrained(nepali_model_path) |
|
|
print("Nepali model and tokenizer loaded successfully.") |
|
|
except Exception as e: |
|
|
print(f"Error loading Nepali model or tokenizer: {e}") |
|
|
return |
|
|
|
|
|
|
|
|
nepali_sentences = [ |
|
|
"जडान बिन्दु थप्नुहोस्", |
|
|
"स्टिकी नोट आयात पूरा भयो", |
|
|
"मोनोस्पेस १२", |
|
|
"पानी जेट पम्पमा दुईवटा भित्रिने र एउटा बाहिरिने पाइप हुन्छन् र एक भित्र अर्को सिद्धान्त अनुरूप दुईवटा पाइप हुन्छन् । पानीको प्रविष्टिमा एउटा पानी जेटले केही ठूलो पाइपमा पूरा चापले टुटीबाट बाहिर फाल्दछ । यस्तो तरिकाले पानी जेटले वायू वा तरललाई दोस्रो प्रविष्टिबाट टाढा पुर्याउदछ । ड्रिफ्टिङ तरलमा ऋणात्मक चापको कारणले यस्तो हुन्छ । त्यसैले यो हाइड्रोडायनमिक विरोधाभाषको एउटा अनुप्रयोग हो । यसले ड्रिफ्टिङ तरल नजिकका वस्तु टाढा फाल्नुको साटोमा सोस्ने कुरा बताउदछ ।", |
|
|
"वस्तुको परिवर्तन बचत गर्नुहोस् ।" |
|
|
"तिमीलाई कस्तो छ" , |
|
|
"तिमी को हौ", |
|
|
"कति बज्यो" |
|
|
] |
|
|
|
|
|
print("\n--- Nepali to English Translation Analysis ---") |
|
|
for sentence in nepali_sentences: |
|
|
print(f"\nOriginal (ne): {sentence}") |
|
|
translated_text = translate_text(sentence, nepali_model, nepali_tokenizer, src_lang="nep_Npan") |
|
|
print(f"Translated (en): {translated_text}") |
|
|
|
|
|
|
|
|
|
|
|
print("\n\n--- Sinhala to English Translation Analysis ---") |
|
|
|
|
|
sinhala_sentences = [ |
|
|
"ඩෝසන්මිස් දුරකථනයෙන් ඩෝසන්මිස් කවුද සර්", |
|
|
"කවුද ඩෝසන් නැතුව ඉන්නේ ඔව් සර්", |
|
|
"ඔබ එය උත්සාහ කරන්න සර්", |
|
|
"කොහොමද වැඩේ හරිද ඔව් සර්ට ස්තුතියි", |
|
|
"ඔව්, හරි, ස්තුතියි රත්තරං", |
|
|
|
|
|
] |
|
|
|
|
|
for sentence in sinhala_sentences: |
|
|
print(f"\nOriginal (si): {sentence}") |
|
|
translated_text = translate_text(sentence, nepali_model, nepali_tokenizer, src_lang="sin_Sinh") |
|
|
print(f"Translated (en): {translated_text}") |
|
|
|
|
|
|
|
|
if __name__ == "__main__": |
|
|
main() |
|
|
|