Задать вопрос

Как сделать слияние арабицы при переводе?

Привет, я написал переводчик татарских текстов с кириллицы на арабицу. Но есть одна проблема: буквы не соединяются между собой, как это можно исправить? Или вообще есть какой нибудь API бесплатый для этого и я зря писал кучу if"оф?

Прилагаю правильный перевод:
Ул Һогвартсны шундый сагына иде ки, гүя бертуктаусыз эч авыртуы кебек иде бу хис. Ул серле сукмаклы, өрәкләр белән тулган Һогвартс сараен сагына иде; дәресләрен сагына иде (хәер, мөгаен, Снейпның төнәтмә дәресеннән башка), ябалаклар китереп торган почтаны, Олы Залдагы бөек табыннарны, манаралы йокы бүлмәләрендәге япмалы караватында йоклауны, Тыелган урман янында кечкенә алачыгында яшәүче ачкычлар хуҗасы Һагрид янына хәл белергә керүләрен һәм, аеруча, квиддичны (алты капка, дүрт оча торган туп һәм себеркегә атланган ундүрт уенчылы), тылсым дөньясының иң мәшһүр уенынын, сагына иде.

Transliterated Text:
وл هوگوارتسني شونديي صاگينا ايدي كي, گويا بيرتوكتاوسيز اچ اويرتوي كيبيك ايدي بو خيس. ول سيرلي سوكماقلي, وراكلار بيلان تولغان هوگوارتس صاراين صاگينا ايدي; دارسلارن صاگينا ايدي (خير, موگاين, صنيپنيڭ توناتما دارسننن باشقا), يابالاقلار قيتيريپ تورغان پوچتاني, اولي زالداگي بويك تابيننارني, منارالي يوكي بولمالارنداگي يابمالي قاراواتيندا يوقلاوني, تيلغان ورمان يانيندا كيچكنا الاچيغيندا ياشاوچي اچقيچلار خوجاسي هاگريد يانينا خال بيلرگا كيرولارن هام, ايرۇچا, قويدديچني (التي قابقا, دورت وچا تورغان توپ هام سيبركگا اتلانغان وندورت وينچيلي), تيلسيم دونياسينيڭ ايڭ ماشحور وينينن, صاگينا ايدي.

И вот что у меня получается:
.داي انغاص ,ننناو ﺭوهشەم ڭاي ڭنصیەЬنود مصلط ,)لچناو طﺭودناو ناغنالتآ ەگكﺭب مەه پوط ناغﺭوط اچاو تﺭود ,اقپاق یطلا( ینچيدديو ,اچوﺭآ ,مەه نﺭەلوﺭك ەگﺭلب لەخ اننیا ديﺭغاه یصاجوخ ﺭالچقچآ یچوەشیە ادنغچالآ ەنكچك ادننیا نامﺭاو ناغلط ,نوالقوز ادنطاواﺭاق یلامپیا یگەدنﺭەلەملوب یقوز یلاﺭانام ,نﺭاننباط كوب یغادلاز یلاو ,ناطچوپ ناغﺭوط پﺭتيك ﺭالقالابیا ,)اقشاب نەننﺭەد ەمتەنوت ڭنپزن ,ناغوم ,ﺭەخ( یداي انغاص نﺭەلﺭەد ;داي انغاص ناﺭاص طﺭاوغوه ناغلوط نەلب ﺭەلكەﺭئو ,لقامقوص یلﺭ لاو .ﺱيخ وب یداي كبك یوطﺭوآ چا زصواطقوطﺭب وگ ,يك یداي انغاص زدنوش ینطﺭاوغوه لاو .داي لگوت ەد ينﺭب لاو ادناغﺭطشغاچ نەلب ینەگﺭچيك ﺭەلين ڭنيﺭﺭاه ,ﺭالاصاملوب تاش انوطزاق انﺭاننیا ڭنيﺭﺭاه ەككلگزەج ﺭەلЬلﺭود ﺭەگئە مەه .چمصلط ناقتزاق پﺭطوط نلي یچنﺭب ەدنبەتكەم ﺭخيﺱ مەه مصلط طﺭاوغوه انغ اڭیا یلئە .داي یچمصلط ﺭططوپ يﺭﺭاه

Вот код:
# -*- coding: utf-8 -*-

text = """Һарри Поттер тылсымчы иде. Әле яңа гына Һогвартс Тылсым һәм Сихер мәктәбендә беренче елын тутырып кайткан тылсымчы. Һәм әгәр Дурсльләр җәйгелеккә Һарриның яннарына кайтуына шат булмасалар, Һарриның ниләр кичергәне белән чагыштырганда ул берни дә түгел иде.

Ул Һогвартсны шундый сагына иде ки, гүя бертуктаусыз эч авыртуы кебек иде бу хис. Ул серле сукмаклы, өрәкләр белән тулган Һогвартс сараен сагына иде; дәресләрен сагына иде (хәер, мөгаен, Снейпның төнәтмә дәресеннән башка), ябалаклар китереп торган почтаны, Олы Залдагы бөек табыннарны, манаралы йокы бүлмәләрендәге япмалы караватында йоклауны, Тыелган урман янында кечкенә алачыгында яшәүче ачкычлар хуҗасы Һагрид янына хәл белергә керүләрен һәм, аеруча, квиддичны (алты капка, дүрт оча торган туп һәм себеркегә атланган ундүрт уенчылы), тылсым дөньясының иң мәшһүр уенынын, сагына иде.

"""
translated_text = ""
words = text.split()
for word in words:
    translated_word = ""
    for index, letter in enumerate(list(word)):
        translated_letter = ""
        letter = letter.upper()
        is_first = index == 0
        is_last = (index + 1) == len(word)
        previous_letter = "" if is_first else word[index - 1].lower()
        next_letter = "" if is_last else word[index + 1].lower()

        if letter == "А":
            translated_letter = "آ" if is_first else "ا"
        elif letter == "Ә":
            translated_letter = "ئە" if is_first else "ە"
        elif letter == "Б":
            translated_letter = "ب"
        elif letter == "В":
            translated_letter = "و"

# тут ещё куча условий должно было быть, но для вас я их убрал)
        elif letter == "Ч":
            translated_letter = "چ"
        elif letter == "Ш":
            translated_letter = "ش"
        elif letter == "Щ":
            translated_letter = "چ"
        elif letter == "Ы":
            if is_first:
                translated_letter = "ا"
            elif is_last:
                translated_letter = "ی"
        elif letter == "Э":
            translated_letter = "ا" if is_first else "ي"
        elif letter == "Я":
            is_letter_in_word1 = any(let in ["а", "у", "о", "ы"
                                             ] for let in word)
            is_letter_in_word2 = any(let in ["ә", "ү", "ө", "е", "и"
                                             ] for let in word)
            if (is_first and is_letter_in_word1
                ) or previous_letter.upper() == "Ъ":
                translated_letter = "یا"
            elif (is_first and is_letter_in_word2
                  ) or previous_letter.upper() == "Ь":
                translated_letter = "یە"
        elif letter == "М":
            translated_letter = "م"
        else:
            translated_letter = letter
        translated_word = translated_letter.strip() + translated_word
    translated_text = f"{translated_word} {translated_text}".strip()
print(translated_text)
  • Вопрос задан
  • 139 просмотров
Подписаться 2 Простой Комментировать
Пригласить эксперта
Ответы на вопрос 1
chupasaurus
@chupasaurus
Сею рефлекторное, злое, временное
У вас кажется проблема посерьёзней: вывод в обратном порядке.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы