Help_Me_3 / app /utils /translit.py
giyos1212's picture
Upload 72 files
98b6d67 verified
# 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