Spaces:
Paused
Paused
| # 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 |