# app/utils/translit.py def lotin_to_kirill(text: str) -> str: """ Lotin alifbosidagi matnni Kirill alifbosiga o'giradigan funksiya. Bu funksiya hech qanday tashqi kutubxonaga bog'liq emas. """ # Almashtirish qoidalari. # Ikki belgili harflar bir belgili harflardan OLDIN turishi juda muhim! rules = [ ("sh", "ш"), ("ch", "ч"), ("o'", "ў"), ("g'", "ғ"), ("Sh", "Ш"), ("Ch", "Ч"), ("O'", "Ў"), ("G'", "Ғ"), ('ts', 'ц'), ('Ts', 'Ц'), ('ye', 'е'), ('Ye', 'Е'), ('yo', 'ё'), ('Yo', 'Ё'), ('yu', 'ю'), ('Yu', 'Ю'), ('ya', 'я'), ('Ya', 'Я'), # Oddiy harflar ('a', 'а'), ('b', 'б'), ('d', 'д'), ('e', 'е'), ('f', 'ф'), ('g', 'г'), ('h', 'ҳ'), ('i', 'и'), ('j', 'ж'), ('k', 'к'), ('l', 'л'), ('m', 'м'), ('n', 'н'), ('o', 'о'), ('p', 'п'), ('q', 'қ'), ('r', 'р'), ('s', 'с'), ('t', 'т'), ('u', 'у'), ('v', 'в'), ('x', 'х'), ('y', 'й'), ('z', 'з'), ("'", "ъ"), # Bosh harflar ('A', 'А'), ('B', 'Б'), ('D', 'Д'), ('E', 'Е'), ('F', 'Ф'), ('G', 'Г'), ('H', 'Ҳ'), ('I', 'И'), ('J', 'Ж'), ('K', 'К'), ('L', 'Л'), ('M', 'М'), ('N', 'Н'), ('O', 'О'), ('P', 'П'), ('Q', 'Қ'), ('R', 'Р'), ('S', 'С'), ('T', 'Т'), ('U', 'У'), ('V', 'В'), ('X', 'Х'), ('Y', 'Й'), ('Z', 'З'), ] # So'z boshidagi 'E' harfini 'Э' ga almashtirish words = text.split(' ') processed_words = [] for word in words: if word.startswith('E'): word = 'Э' + word[1:] elif word.startswith('e'): word = 'э' + word[1:] processed_words.append(word) text = ' '.join(processed_words) # Qolgan barcha qoidalarni qo'llash for lotin, kirill in rules: text = text.replace(lotin, kirill) return text def clean_cyrillic_text(text: str) -> str: """ Matnni faqat o'zbek/rus kirill harflari, raqamlar va bo'sh joy qoldirib tozalaydi. TTS modeliga yuborishdan oldin ishlatiladi. YANGILANGAN: Rus va o'zbek kirill harflarini qo'llab-quvvatlaydi Args: text: Tozalanadigan matn Returns: Tozalangan matn (faqat kirill, raqamlar va tinish belgilari) """ # O'zbek va rus kirill harflarini qo'shish # O'zbek maxsus harflari: ў, қ, ғ, ҳ # Rus harflari: standard 33 ta harf (а-я) allowed_chars = "абвгдеёжзийклмнопрстуфхцчшщъыьэюяўқғҳ " allowed_chars += allowed_chars.upper() # Bosh harflarni ham qo'shamiz allowed_chars += "0123456789.,!?-:" # Tinish belgilari va raqamlar cleaned_text = "".join(filter(lambda char: char in allowed_chars, text)) return cleaned_text def russian_latin_to_cyrillic(text: str) -> str: """ RUSCHA lotin alifbosidagi matnni Kirill alifbosiga o'giradi. Misol: "u menya bolit golova" → "у меня болит голова" "privet" → "привет" "spasibo" → "спасибо" Args: text: Ruscha matn (lotin alifbosida) Returns: Ruscha matn (kirill alifbosida) """ # Ruscha lotin → kirill konvertatsiya jadvali # MUHIM: Ikki harfli kombinatsiyalar birinchi bo'lishi kerak! rules = [ # Ikki harfli kombinatsiyalar (uzun kombinatsiyalar avval) ('shch', 'щ'), ('Shch', 'Щ'), ('SHCH', 'Щ'), ('sh', 'ш'), ('Sh', 'Ш'), ('SH', 'Ш'), ('ch', 'ч'), ('Ch', 'Ч'), ('CH', 'Ч'), ('zh', 'ж'), ('Zh', 'Ж'), ('ZH', 'Ж'), ('yo', 'ё'), ('Yo', 'Ё'), ('YO', 'Ё'), ('yu', 'ю'), ('Yu', 'Ю'), ('YU', 'Ю'), ('ya', 'я'), ('Ya', 'Я'), ('YA', 'Я'), ('ts', 'ц'), ('Ts', 'Ц'), ('TS', 'Ц'), ('ye', 'е'), ('Ye', 'Е'), ('YE', 'Е'), ('kh', 'х'), ('Kh', 'Х'), ('KH', 'Х'), # Bir harfli (kichik harflar) ('a', 'а'), ('b', 'б'), ('v', 'в'), ('g', 'г'), ('d', 'д'), ('e', 'е'), ('z', 'з'), ('i', 'и'), ('j', 'й'), ('k', 'к'), ('l', 'л'), ('m', 'м'), ('n', 'н'), ('o', 'о'), ('p', 'п'), ('r', 'р'), ('s', 'с'), ('t', 'т'), ('u', 'у'), ('f', 'ф'), ('h', 'х'), ('c', 'к'), ('y', 'ы'), ('w', 'в'), # Bir harfli (bosh harflar) ('A', 'А'), ('B', 'Б'), ('V', 'В'), ('G', 'Г'), ('D', 'Д'), ('E', 'Е'), ('Z', 'З'), ('I', 'И'), ('J', 'Й'), ('K', 'К'), ('L', 'Л'), ('M', 'М'), ('N', 'Н'), ('O', 'О'), ('P', 'П'), ('R', 'Р'), ('S', 'С'), ('T', 'Т'), ('U', 'У'), ('F', 'Ф'), ('H', 'Х'), ('C', 'К'), ('Y', 'Ы'), ('W', 'В'), # Maxsus belgilar ("'", 'ь'), # Yumshatish belgisi ('"', 'ъ'), # Qattiqlik belgisi ] # Qoidalarni qo'llash (ketma-ketlik muhim!) for latin, cyrillic in rules: text = text.replace(latin, cyrillic) return text