try_my_rag / uz_translit.py
fitlemon's picture
Upload uz_translit.py
1e1c454 verified
# -*- coding: utf-8 -*-
import re
import sys
LATIN_TO_CYRILLIC = {
"a": "а",
"A": "А",
"b": "б",
"B": "Б",
"d": "д",
"D": "Д",
"e": "е",
"E": "Е",
"f": "ф",
"F": "Ф",
"g": "г",
"G": "Г",
"h": "ҳ",
"H": "Ҳ",
"i": "и",
"I": "И",
"j": "ж",
"J": "Ж",
"k": "к",
"K": "К",
"l": "л",
"L": "Л",
"m": "м",
"M": "М",
"n": "н",
"N": "Н",
"o": "о",
"O": "О",
"p": "п",
"P": "П",
"q": "қ",
"Q": "Қ",
"r": "р",
"R": "Р",
"s": "с",
"S": "С",
"t": "т",
"T": "Т",
"u": "у",
"U": "У",
"v": "в",
"V": "В",
"x": "х",
"X": "Х",
"y": "й",
"Y": "Й",
"z": "з",
"Z": "З",
"ʼ": "ъ", # TODO: case?
}
LATIN_VOWELS = ("a", "A", "e", "E", "i", "I", "o", "O", "u", "U", "o‘", "O‘")
# These words cannot be reliably converted to cyrillic because of the lossy
# nature of the to_latin converter.
TS_WORDS = {
"aberra(ts)ion": "аберрацион",
"aberra(ts)iya": "аберрация",
"abza(ts)": "абзац",
"aboli(ts)iya": "аболиция",
"absorb(s)iya": "абсорбция",
"abstrak(s)ionizm": "абстракционизм",
"abstrak(s)ionist": "абстракционист",
"abstrak(s)iya": "абстракция",
"abs(s)ess": "абсцесс",
"avianose(ts)": "авианосец",
"avia(ts)iya": "авиация",
"avtoinspek(s)iya": "автоинспекция",
"avtopr(s)ep": "автопрцеп",
"avtostan(s)iya": "автостанция",
"agglyutina(ts)iya": "агглютинация",
"agita(ts)ion": "агитацион",
"agita(ts)iya": "агитация",
"aglomera(ts)iya": "агломерация",
"agnosti(ts)izm": "агностицизм",
"agromeliora(ts)iya": "агромелиорация",
"adapta(ts)iya": "адаптация",
"administra(ts)iya": "администрация",
"adsorb(s)iya": "адсорбция",
"aka(ts)iya": "акация",
"akklimatiza(ts)iya": "акклиматизация",
"akkomoda(ts)iya": "аккомодация",
"akkredita(ts)iya": "аккредитация",
"ak(s)ent": "акцент",
"ak(s)iz": "акциз",
"ak(s)ioner": "акционер",
"ak(s)ionerlik": "акционерлик",
"ak(s)iya": "акция",
"ak(s)iyadorlik": "акциядорлик",
"allitera(ts)iya": "аллитерация",
"amortiza(ts)iya": "амортизация",
"amputa(ts)iya": "ампутация",
"annota(ts)iya": "аннотация",
"annulya(ts)iya": "аннуляция",
"anti(ts)iklon": "антициклон",
"antra(ts)it": "антрацит",
"apellya(ts)iya": "апелляция",
"appendi(ts)it": "аппендицит",
"applika(ts)iya": "аппликация",
"aproba(ts)iya": "апробация",
"argumenta(ts)iya": "аргументация",
"assimilya(ts)iya": "ассимиляция",
"asso(ts)ia(ts)iya": "ассоциация",
"attesta(ts)ion": "аттестацион",
"attesta(ts)iya": "аттестация",
"attrak(s)ion": "аттракцион",
"auk(s)ion": "аукцион",
"a(ts)etilen": "ацетилен",
"a(ts)eton": "ацетон",
"aeronaviga(ts)iya": "аэронавигация",
"bakteri(ts)id": "бактерицид",
"ba(ts)illar": "бациллар",
"bioloka(ts)iya": "биолокация",
"biolyumines(s)en(s)iya": "биолюминесценция",
"bo(ts)man": "боцман",
"bronenose(ts)": "броненосец",
"bru(ts)ellyoz": "бруцеллёз",
"vak(s)ina": "вакцина",
"valva(ts)iya": "вальвация",
"vegeta(ts)ion": "вегетацион",
"vegeta(ts)iya": "вегетация",
"venepunk(s)iya": "венепункция",
"ventilya(ts)ion": "вентиляцион",
"ventilya(ts)iya": "вентиляция",
"vibra(ts)iya": "вибрация",
"vibroizolya(ts)iya": "виброизоляция",
"vi(ts)e-": "вице-",
"vi(ts)e-admiral": "вице-адмирал",
"vi(ts)e-prezident": "вице-президент",
"vulkaniza(ts)iya": "вулканизация",
"galli(ts)izm": "галлицизм",
"gallyu(ts)ina(ts)iya": "галлюцинация",
"galvaniza(ts)iya": "гальванизация",
"gastrol-kon(s)ert": "гастроль-концерт",
"gaubi(ts)a": "гаубица",
"gelio(ts)entrik": "гелиоцентрик",
"geno(ts)id": "геноцид",
"geo(ts)entrik": "геоцентрик",
"gerbi(ts)idlar": "гербицидлар",
"ger(s)": "герц",
"ger(s)og": "герцог",
"gia(ts)int": "гиацинт",
"gidromeliora(ts)iya": "гидромелиорация",
"gidromexaniza(ts)iya": "гидромеханизация",
"gidrostan(s)iya": "гидростанция",
"gidroelektrostan(s)iya": "гидроэлектростанция",
"giperinflya(ts)iya": "гиперинфляция",
"gipo(ts)entr": "гипоцентр",
"gli(ts)erin": "глицерин",
"glya(ts)iolog": "гляциолог",
"glya(ts)iologiya": "гляциология",
"gorchi(ts)a": "горчица",
"gravita(ts)iya": "гравитация",
"grada(ts)iya": "градация",
"guseni(ts)a": "гусеница",
"devalva(ts)iya": "девальвация",
"degaza(ts)iya": "дегазация",
"degenera(ts)iya": "дегенерация",
"degustat(s)iya": "дегустатция",
"deduk(s)iya": "дедукция",
"dezaktiva(ts)iya": "дезактивация",
"dezinsek(s)iya": "дезинсекция",
"dezinfek(s)iya": "дезинфекция",
"dezinfek(s)iyalamoq": "дезинфекцияламоқ",
"deklama(ts)iya": "декламация",
"deklama(ts)iyachi": "декламациячи",
"deklara(ts)iya": "декларация",
"dekora(ts)iya": "декорация",
"delega(ts)iya": "делегация",
"delimita(ts)iya": "делимитация",
"demarka(ts)iya": "демаркация",
"demilitariza(ts)iya": "демилитаризация",
"demobiliza(ts)iya": "демобилизация",
"denaturaliza(ts)iya": "денатурализация",
"denomina(ts)iya": "деноминация",
"denonsa(ts)iya": "денонсация",
"depilya(ts)iya": "депиляция",
"deporta(ts)iya": "депортация",
"deratiza(ts)iya": "дератизация",
"deriva(ts)ion": "деривацион",
"deriva(ts)iya": "деривация",
"desika(ts)iya": "десикация",
"detona(ts)iya": "детонация",
"defini(ts)iya": "дефиниция",
"defi(ts)it": "дефицит",
"deflya(ts)iya": "дефляция",
"defolia(ts)iya": "дефолиация",
"deforma(ts)iya": "деформация",
"de(ts)igramm": "дециграмм",
"de(ts)ilitr": "децилитр",
"de(ts)imetr": "дециметр",
"dik(s)iya": "дикция",
"direk(s)iya": "дирекция",
"diskvalifika(ts)iya": "дисквалификация",
"diskrimina(ts)iya": "дискриминация",
"disloka(ts)iya": "дислокация",
"dispropor(s)iya": "диспропорция",
"disserta(ts)iya": "диссертация",
"dissimilya(ts)iya": "диссимиляция",
"disso(ts)ia(ts)iya": "диссоциация",
"distan(s)ion": "дистанцион",
"distan(s)iya": "дистанция",
"distillya(ts)iya": "дистилляция",
"differen(s)ial": "дифференциал",
"differen(s)ia(ts)iya": "дифференциация",
"differen(s)iyalamoq": "дифференцияламоқ",
"dota(ts)iya": "дотация",
"do(ts)ent": "доцент",
"jinoiy-pro(ts)essual": "жиноий-процессуал",
"identifika(ts)iya": "идентификация",
"izolya(ts)ion": "изоляцион",
"izolya(ts)iya": "изоляция",
"izolya(ts)iyalamoq": "изоляцияламоқ",
"illyumina(ts)iya": "иллюминация",
"illyustra(ts)iya": "иллюстрация",
"immigra(ts)iya": "иммиграция",
"immobiliza(ts)iya": "иммобилизация",
"impoten(s)iya": "импотенция",
"improviza(ts)iya": "импровизация",
"inaugura(ts)iya": "инаугурация",
"inventariza(ts)iya": "инвентаризация",
"investi(ts)iya": "инвестиция",
"ingalya(ts)iya": "ингаляция",
"indeksa(ts)iya": "индексация",
"induk(s)ion": "индукцион",
"induk(s)iya": "индукция",
"iner(s)iya": "инерция",
"iner(s)iyali": "инерцияли",
"inkvizi(ts)iya": "инквизиция",
"inkorpora(ts)iya": "инкорпорация",
"inkuba(ts)iya": "инкубация",
"innova(ts)iya": "инновация",
"inspek(s)iya": "инспекция",
"instar(s)iya": "инстарция",
"instruk(s)iya": "инструкция",
"ins(s)enirovka": "инсценировка",
"integra(ts)iya": "интеграция",
"intelligen(s)iya": "интеллигенция",
"interven(s)iya": "интервенция",
"interven(s)iyachi": "интервенциячи",
"interna(ts)ional": "интернационал",
"interna(ts)ionalizm": "интернационализм",
"interna(ts)ionalist": "интернационалист",
"intoksika(ts)iya": "интоксикация",
"intona(ts)ion": "интонацион",
"intona(ts)iya": "интонация",
"intui(ts)iya": "интуиция",
"infek(s)ion": "инфекцион",
"infek(s)iya": "инфекция",
"inflya(ts)iya": "инфляция",
"informa(ts)ion": "информацион",
"informa(ts)iya": "информация",
"inʼek(s)iya": "инъекция",
"irra(ts)ional": "иррационал",
"irriga(ts)ion": "ирригацион",
"irriga(ts)iya": "ирригация",
"kalkulya(ts)iya": "калькуляция",
"kal(s)iy": "кальций",
"kanaliza(ts)iya": "канализация",
"kan(s)eliyariya": "канцелиярия",
"kan(s)erogen": "канцероген",
"kan(s)ler": "канцлер",
"kapitaliza(ts)iya": "капитализация",
"kapitulya(ts)iya": "капитуляция",
"kassa(ts)iya": "кассация",
"katol(s)izm": "католцизм",
"kvalifika(ts)iya": "квалификация",
"kvar(s)": "кварц",
"kvar(s)it": "кварцит",
"kvitan(s)iya": "квитанция",
"kinokon(s)ert": "киноконцерт",
"kinos(s)enariy": "киносценарий",
"klassifika(ts)iya": "классификация",
"klassi(ts)izm": "классицизм",
"koali(ts)ion": "коалицион",
"koali(ts)iya": "коалиция",
"kodifika(ts)iya": "кодификация",
"kollek(s)ioner": "коллекционер",
"kollek(s)iya": "коллекция",
"kollek(s)iyachchi": "коллекцияччи",
"kolon(s)ifra": "колонцифра",
"kombina(ts)iya": "комбинация",
"kommer(s)iya": "коммерция",
"kommunika(ts)iya": "коммуникация",
"kommuta(ts)iya": "коммутация",
"kompensa(ts)iya": "компенсация",
"kompeten(s)iya": "компетенция",
"kompilya(ts)iya": "компиляция",
"kompozi(ts)ion": "композицион",
"kompozi(ts)iya": "композиция",
"konvek(s)iya": "конвекция",
"konven(s)iya": "конвенция",
"konverta(ts)iya": "конвертация",
"kondensa(ts)iya": "конденсация",
"kondi(ts)iya": "кондиция",
"kondi(ts)ioner": "кондиционер",
"konkuren(s)iya": "конкуренция",
"konserva(ts)iya": "консервация",
"konsigna(ts)iya": "консигнация",
"konsolida(ts)iya": "консолидация",
"konsor(s)ium": "консорциум",
"konspira(ts)iya": "конспирация",
"konstitu(ts)ion": "конституцион",
"konstitu(ts)iya": "конституция",
"konstitu(ts)iyaviy": "конституциявий",
"konstruk(s)iya": "конструкция",
"konsulta(ts)iya": "консультация",
"kontrakta(ts)iya": "контрактация",
"kontribu(ts)iya": "контрибуция",
"kontrrevolyu(ts)ion": "контрреволюцион",
"kontrrevolyu(ts)ioner": "контрреволюционер",
"kontrrevolyu(ts)iya": "контрреволюция",
"konfedera(ts)iya": "конфедерация",
"konferen(s)-zal": "конференц-зал",
"konferen(s)iya": "конференция",
"konfiska(ts)iya": "конфискация",
"konfronta(ts)iya": "конфронтация",
"konfu(ts)iylik": "конфуцийлик",
"konfu(ts)iychilik": "конфуцийчилик",
"kon(s)entrat": "концентрат",
"kon(s)entratli": "концентратли",
"kon(s)entra(ts)ion": "концентрацион",
"kon(s)entra(ts)iya": "концентрация",
"kon(s)entra(ts)iyalashmoq": "концентрациялашмоқ",
"kon(s)entrik": "концентрик",
"kon(s)ep(s)iya": "концепция",
"kon(s)ern": "концерн",
"kon(s)ert": "концерт",
"kon(s)ertmeyster": "концертмейстер",
"kon(s)essiya": "концессия",
"kon(s)lager": "концлагерь",
"koopera(ts)iya": "кооперация",
"koopta(ts)iya": "кооптация",
"koordina(ts)ion": "координацион",
"koordina(ts)iya": "координация",
"korpora(ts)iya": "корпорация",
"korrelya(ts)iya": "корреляция",
"korresponden(s)iya": "корреспонденция",
"korrup(s)iya": "коррупция",
"koeffi(ts)iyent": "коэффициент",
"krema(ts)iya": "кремация",
"kristalliza(ts)iya": "кристаллизация",
"kulmina(ts)ion": "кульминацион",
"kulmina(ts)iya": "кульминация",
"kultiva(ts)iya": "культивация",
"lakta(ts)iya": "лактация",
"lamina(ts)iya": "ламинация",
"lan(s)et": "ланцет",
"levomi(ts)etin": "левомицетин",
"legitima(ts)iya": "легитимация",
"leyko(ts)itlar": "лейкоцитлар",
"leyko(ts)itoz": "лейкоцитоз",
"lek(s)iya": "лекция",
"liberaliza(ts)iya": "либерализация",
"li(ts)ey": "лицей",
"li(ts)enziya": "лицензия",
"lokaliza(ts)iya": "локализация",
"loka(ts)iya": "локация",
"lo(ts)man": "лоцман",
"lyumenis(s)en(s)iya": "люменисценция",
"lyute(ts)iy": "лютеций",
"manipulya(ts)iya": "манипуляция",
"margane(ts)": "марганец",
"matri(ts)a": "матрица",
"medi(ts)ina": "медицина",
"meliora(ts)iya": "мелиорация",
"menstrua(ts)iya": "менструация",
"metalliza(ts)iya": "металлизация",
"metiza(ts)iya": "метизация",
"mexaniza(ts)iya": "механизация",
"mexaniza(ts)iyalash": "механизациялаш",
"mexaniza(ts)iyalashmoq": "механизациялашмоқ",
"mexani(ts)izm": "механицизм",
"migra(ts)iya": "миграция",
"mizans(s)ena": "мизансцена",
"militariza(ts)iya": "милитаризация",
"mili(ts)ioner": "милиционер",
"mili(ts)iya": "милиция",
"mili(ts)iyaxona": "милицияхона",
"mineraliza(ts)iya": "минерализация",
"minonose(ts)": "миноносец",
"misti(ts)izm": "мистицизм",
"mobiliza(ts)iya": "мобилизация",
"moderniza(ts)iya": "модернизация",
"moderniza(ts)iyalamoq": "модернизацияламоқ",
"modifika(ts)iya": "модификация",
"moto(ts)ikl": "мотоцикл",
"moto(ts)iklet": "мотоциклет",
"moto(ts)ikletchi": "мотоциклетчи",
"moto(ts)iklli": "мотоциклли",
"moto(ts)iklchi": "мотоциклчи",
"multiplika(ts)ion": "мультипликацион",
"multiplika(ts)iya": "мультипликация",
"muni(ts)ipaliza(ts)iya": "муниципализация",
"muni(ts)ipalitet": "муниципалитет",
"naviga(ts)iya": "навигация",
"naturaliza(ts)iya": "натурализация",
"na(ts)ionaliza(ts)iya": "национализация",
"nene(ts)": "ненец",
"nene(ts)lar": "ненецлар",
"nitrogli(ts)erin": "нитроглицерин",
"nomina(ts)iya": "номинация",
"nostrifika(ts)iya": "нострификация",
"nullifika(ts)iya": "нуллификация",
"obliga(ts)iya": "облигация",
"obroga(ts)iya": "оброгация",
"observa(ts)iya": "обсервация",
"okkupa(ts)ion": "оккупацион",
"okkupa(ts)iya": "оккупация",
"okkupa(ts)iyachi": "оккупациячи",
"opera(ts)iya": "операция",
"opera(ts)iyaviy": "операциявий",
"oppozo(ts)ion": "оппозоцион",
"oppozi(ts)iya": "оппозиция",
"oppozi(ts)iyachi": "оппозициячи",
"op(s)ion": "опцион",
"ordinare(ts)": "ординарец",
"oriyenta(ts)iya": "ориентация",
"osteomalya(ts)iya": "остеомаляция",
"ofi(ts)er": "офицер",
"ofi(ts)iant": "официант",
"ofi(ts)iantka": "официантка",
"palpa(ts)iya": "пальпация",
"pa(ts)iyent": "пациент",
"pa(ts)ifizm": "пацифизм",
"pa(ts)ifist": "пацифист",
"peni(ts)(s)ilin": "пениццилин",
"pesti(ts)idlar": "пестицидлар",
"peti(ts)iya": "петиция",
"petli(ts)a": "петлица",
"pigmenta(ts)iya": "пигментация",
"pin(s)et": "пинцет",
"pi(ts)(s)a": "пицца",
"planta(ts)iya": "плантация",
"pla(ts)darm": "плацдарм",
"pla(ts)kart": "плацкарт",
"pla(ts)karta": "плацкарта",
"pla(ts)kartali": "плацкартали",
"plebis(s)it": "плебисцит",
"podstan(s)iya": "подстанция",
"pozi(ts)ion": "позицион",
"pozi(ts)iya": "позиция",
"poli(ts)iya": "полиция",
"poli(ts)iyachi": "полициячи",
"poli(ts)meyster": "полицмейстер",
"pollyu(ts)iya": "поллюция",
"populya(ts)iya": "популяция",
"por(s)iya": "порция",
"poten(s)ial": "потенциал",
"prezenta(ts)iya": "презентация",
"press-konferen(s)iya": "пресс-конференция",
"preferen(s)iya": "преференция",
"privatiza(ts)iya": "приватизация",
"prin(s)ip": "принцип",
"prin(s)ipial": "принципиал",
"prin(s)ipiallik": "принципиаллик",
"prin(s)ipli": "принципли",
"prin(s)ipsiz": "принципсиз",
"pri(ts)ep": "прицеп",
"provin(s)ializm": "провинциализм",
"provin(s)iya": "провинция",
"provoka(ts)iya": "провокация",
"proyek(s)iya": "проекция",
"proyek(s)iyalamoq": "проекцияламоқ",
"proklama(ts)iya": "прокламация",
"prolonga(ts)iya": "пролонгация",
"propor(s)ional": "пропорционал",
"propor(s)ionallik": "пропорционаллик",
"propor(s)iya": "пропорция",
"protek(s)ionizm": "протекционизм",
"pro(ts)ent": "процент",
"pro(ts)entli": "процентли",
"pro(ts)entchi": "процентчи",
"pro(ts)ess": "процесс",
"pro(ts)essor": "процессор",
"pro(ts)essual": "процессуал",
"publi(ts)ist": "публицист",
"publi(ts)istik": "публицистик",
"publi(ts)istika": "публицистика",
"punktua(ts)ion": "пунктуацион",
"punktua(ts)iya": "пунктуация",
"punk(s)iya": "пункция",
"radia(ts)ion": "радиацион",
"radia(ts)iya": "радиация",
"radioloka(ts)iya": "радиолокация",
"radionaviga(ts)iya": "радионавигация",
"radiostan(s)iya": "радиостанция",
"rane(ts)": "ранец",
"ratifika(ts)iya": "ратификация",
"rafina(ts)iya": "рафинация",
"rafina(ts)iyalash": "рафинациялаш",
"ra(ts)ion": "рацион",
"ra(ts)ional": "рационал",
"ra(ts)ionalizator": "рационализатор",
"ra(ts)ionalizatorlik": "рационализаторлик",
"ra(ts)ionaliza(ts)iya": "рационализация",
"ra(ts)ionalizm": "рационализм",
"ra(ts)ionalist": "рационалист",
"ra(ts)ionlallashmoq": "рационлаллашмоқ",
"ra(ts)iya": "рация",
"reabilita(ts)iya": "реабилитация",
"reak(s)ion": "реакцион",
"reak(s)ioner": "реакционер",
"reak(s)iya": "реакция",
"reak(s)iyachi": "реакциячи",
"realiza(ts)iya": "реализация",
"reanima(ts)iya": "реанимация",
"revalva(ts)iya": "ревальвация",
"revolyu(ts)ion": "революцион",
"revolyu(ts)ioner": "революционер",
"revolyu(ts)iya": "революция",
"regenera(ts)iya": "регенерация",
"registra(ts)iya": "регистрация",
"redak(s)ion": "редакцион",
"redak(s)iya": "редакция",
"reduk(s)iya": "редукция",
"reduplika(ts)iya": "редупликация",
"rezek(s)iya": "резекция",
"reziden(s)iya": "резиденция",
"rezolyu(ts)iya": "резолюция",
"reinvesti(ts)iya": "реинвестиция",
"rekvizi(ts)iya": "реквизиция",
"reklama(ts)iya": "рекламация",
"rekognos(s)irovka": "рекогносцировка",
"rekomenda(ts)iya": "рекомендация",
"rekonstruk(s)iya": "реконструкция",
"rekonstruk(s)iyalamoq": "реконструкцияламоқ",
"remilitariza(ts)iya": "ремилитаризация",
"repara(ts)iya": "репарация",
"repatri(ts)iya": "репатриция",
"repeti(ts)iya": "репетиция",
"reprivatiza(ts)iya": "реприватизация",
"reproduk(s)iya": "репродукция",
"restavra(ts)iya": "реставрация",
"retranslya(ts)iya": "ретрансляция",
"reforma(ts)iya": "реформация",
"refrak(s)iya": "рефракция",
"re(ts)enzent": "рецензент",
"re(ts)enziya": "рецензия",
"re(ts)ept": "рецепт",
"re(ts)eptorlar": "рецепторлар",
"re(ts)idiv": "рецидив",
"re(ts)idivist": "рецидивист",
"re(ts)ipiyent": "реципиент",
"reevakua(ts)iya": "реэвакуация",
"reemigra(ts)iya": "реэмиграция",
"ri(ts)arlik": "рицарлик",
"ri(ts)ar": "рицарь",
"rota(ts)ion": "ротацион",
"sana(ts)iya": "санация",
"sana(ts)iyalash": "санациялаш",
"sank(s)iya": "санкция",
"sekre(ts)iya": "секреция",
"sek(s)iya": "секция",
"selek(s)ion": "селекцион",
"selek(s)iya": "селекция",
"selek(s)iyachi": "селекциячи",
"selek(s)iyachilik": "селекциячилик",
"sensa(ts)ion": "сенсацион",
"sensa(ts)iya": "сенсация",
"signaliza(ts)iya": "сигнализация",
"sili(ts)iy": "силиций",
"situa(ts)iya": "ситуация",
"skepti(ts)izm": "скептицизм",
"slane(ts)": "сланец",
"so(ts)ial": "социал",
"so(ts)ial-demokrat": "социал-демократ",
"so(ts)ial-demokratik": "социал-демократик",
"so(ts)ial-demokratiya": "социал-демократия",
"so(ts)ializa(ts)iya": "социализация",
"so(ts)ializm": "социализм",
"so(ts)ialist": "социалист",
"so(ts)ialistik": "социалистик",
"so(ts)iolingvistika": "социолингвистика",
"so(ts)iolog": "социолог",
"so(ts)iologik": "социологик",
"so(ts)iologiya": "социология",
"spekulya(ts)iya": "спекуляция",
"spe(ts)ifik": "специфик",
"spe(ts)ifika": "специфика",
"spe(ts)ifika(ts)iya": "спецификация",
"stabiliza(ts)iya": "стабилизация",
"stan(s)iya": "станция",
"sta(ts)ionar": "стационар",
"steriliza(ts)iya": "стерилизация",
"stoi(ts)izm": "стоицизм",
"stron(s)iy": "стронций",
"substan(s)iya": "субстанция",
"s(s)enariy": "сценарий",
"s(s)enariychi": "сценарийчи",
"s(s)enarist": "сценарист",
"tabli(ts)a": "таблица",
"tan(s)a": "танца",
"teleins(s)enirovka": "телеинсценировка",
"telekommunika(ts)iya": "телекоммуникация",
"telemexaniza(ts)iya": "телемеханизация",
"tenden(s)ioz": "тенденциоз",
"tenden(s)iozlik": "тенденциозлик",
"tenden(s)iya": "тенденция",
"tepli(ts)a": "теплица",
"teploizolya(ts)iya": "теплоизоляция",
"termoizolya(ts)iya": "термоизоляция",
"ter(s)et": "терцет",
"ter(s)iya": "терция",
"texne(ts)iy": "технеций",
"tradi(ts)ion": "традицион",
"tradi(ts)iya": "традиция",
"transkrip(s)ion": "транскрипцион",
"transkrip(s)iya": "транскрипция",
"transkrip(s)iyalamoq": "транскрипцияламоқ",
"translitera(ts)iya": "транслитерация",
"translya(ts)ion": "трансляцион",
"translya(ts)iya": "трансляция",
"transplanta(ts)iya": "трансплантация",
"transforma(ts)iya": "трансформация",
"transforma(ts)iyalamoq": "трансформацияламоқ",
"trape(ts)iya": "трапеция",
"trepana(ts)iya": "трепанация",
"uborshi(ts)a": "уборшица",
"uzurpa(ts)iya": "узурпация",
"unifika(ts)iya": "унификация",
"unifika(ts)iyalashtirmoq": "унификациялаштирмоқ",
"unter-ofi(ts)er": "унтер-офицер",
"urbaniza(ts)iya": "урбанизация",
"fago(ts)it": "фагоцит",
"falsifika(ts)iya": "фальсификация",
"farma(ts)evt": "фармацевт",
"farma(ts)evtika": "фармацевтика",
"farma(ts)iya": "фармация",
"federa(ts)iya": "федерация",
"fermenta(ts)iya": "ферментация",
"film-kon(s)ert": "фильм-концерт",
"filtra(ts)iya": "фильтрация",
"fiton(s)id": "фитонцид",
"forma(ts)iya": "формация",
"frak(s)ion": "фракцион",
"frak(s)iooner": "фракциоонер",
"frak(s)iya": "фракция",
"fran(s)iya": "франция",
"fran(s)uz": "француз",
"fran(s)uzlar": "французлар",
"fran(s)uzcha": "французча",
"fri(ts)": "фриц",
"funk(s)ional": "функционал",
"funk(s)iya": "функция",
"xemosorb(s)iya": "хемосорбция",
"xole(ts)istit": "холецистит",
"(s)anga": "цанга",
"(s)apfa": "цапфа",
"(s)edra": "цедра",
"(s)eziy": "цезий",
"(s)eytnot": "цейтнот",
"(s)ellofan": "целлофан",
"(s)elluloid": "целлулоид",
"(s)ellyuloza": "целлюлоза",
"(s)elsiy": "цельсий",
"(s)ement": "цемент",
"(s)ementlamoq": "цементламоқ",
"(s)enz": "ценз",
"(s)enzor": "цензор",
"(s)enzura": "цензура",
"(s)ent": "цент",
"(s)entner": "центнер",
"(s)entnerli": "центнерли",
"(s)entnerchi": "центнерчи",
"(s)entralizm": "централизм",
"(s)entrizm": "центризм",
"(s)entrist": "центрист",
"(s)entrifuga": "центрифуга",
"(s)eriy": "церий",
"(s)esarka": "цесарка",
"(s)ex": "цех",
"(s)ian": "циан",
"(s)ianli": "цианли",
"(s)iviliza(ts)iya": "цивилизация",
"(s)igara": "цигара",
"(s)ikl": "цикл",
"(s)iklik": "циклик",
"(s)ikllashtirmoq": "цикллаштирмоқ",
"(s)iklli": "циклли",
"(s)iklon": "циклон",
"(s)iklotron": "циклотрон",
"(s)ilindr": "цилиндр",
"(s)ilindrik": "цилиндрик",
"(s)ilindrli": "цилиндрли",
"(s)inga": "цинга",
"(s)ink": "цинк",
"(s)inkograf": "цинкограф",
"(s)inkografiya": "цинкография",
"(s)irk": "цирк",
"(s)irkoniy": "цирконий",
"(s)irkul": "циркуль",
"(s)irkulyar": "циркуляр",
"(s)irkchi": "циркчи",
"(s)irroz": "цирроз",
"(s)isterna": "цистерна",
"(s)isternali": "цистернали",
"(s)istit": "цистит",
"(s)itata": "цитата",
"(s)itatabozlik": "цитатабозлик",
"(s)ito-": "цито-",
"(s)itodiagnostika": "цитодиагностика",
"(s)itokimyo": "цитокимё",
"(s)itoliz": "цитолиз",
"(s)itologiya": "цитология",
"(s)itrus": "цитрус",
"(s)iferblat": "циферблат",
"(s)iferblatli": "циферблатли",
"(s)okol": "цоколь",
"(s)unami": "цунами",
"cherepi(ts)a": "черепица",
"shvey(s)ar": "швейцар",
"shmu(ts)titul": "шмуцтитул",
"shni(ts)el": "шницель",
"shpri(ts)": "шприц",
"shtangen(s)irkul": "штангенциркуль",
"evakua(ts)iya": "эвакуация",
"evolyu(ts)ion": "эволюцион",
"evolyu(ts)iya": "эволюция",
"ego(ts)entrizm": "эгоцентризм",
"eksguma(ts)iya": "эксгумация",
"ekspedi(ts)ion": "экспедицион",
"ekspedi(ts)iya": "экспедиция",
"ekspedi(ts)iyachi": "экспедициячи",
"ekspluata(ts)iya": "эксплуатация",
"ekspluata(ts)iyachi": "эксплуатациячи",
"ekspozi(ts)iya": "экспозиция",
"ekspropria(ts)iya": "экспроприация",
"ekstradi(ts)iya": "экстрадиция",
"ekstrak(s)iya": "экстракция",
"elektrifika(ts)iya": "электрификация",
"elektrostan(s)iya": "электростанция",
"emansipa(ts)iya": "эмансипация",
"emigra(ts)iya": "эмиграция",
"emo(ts)ional": "эмоционал",
"emo(ts)ionallik": "эмоционаллик",
"emo(ts)iya": "эмоция",
"empiriokriti(ts)izm": "эмпириокритицизм",
"en(s)efalit": "энцефалит",
"en(s)efalogramma": "энцефалограмма",
"en(s)iklopedik": "энциклопедик",
"en(s)iklopedist": "энциклопедист",
"en(s)iklopediya": "энциклопедия",
"en(s)iklopediyachi": "энциклопедиячи",
"epi(ts)entr": "эпицентр",
"eritro(ts)itlar": "эритроцитлар",
"erudi(ts)iya": "эрудиция",
"eskala(ts)iya": "эскалация",
"esmine(ts)": "эсминец",
"essen(s)iya": "эссенция",
"yurisdik(s)iya": "юрисдикция",
"yurispruden(s)iya": "юриспруденция",
"yusti(ts)iya": "юстиция",
}
# These words cannot be reliably transliterated into cyrillic
E_WORDS = {
"bel(e)taj": "бельэтаж",
"bugun-(e)rta": "бугун-эрта",
"diqqat-(e)ʼtibor": "диққат-эътибор",
"ich-(e)t": "ич-эт",
"karat(e)": "каратэ",
"m(e)r": "мэр",
"obroʻ-(e)ʼtiborli": "обрў-эътиборли",
"omon-(e)son": "омон-эсон",
"r(e)ket": "рэкет",
"sut(e)mizuvchilar": "сутэмизувчилар",
"upa-(e)lik": "упа-элик",
"xayr-(e)hson": "хайр-эҳсон",
"qayn(e)gachi": "қайнэгачи",
}
# Not to confuse with ш
SH_WORDS = {"a(sh)ob": "асҳоб", "mu(sh)af": "мусҳаф"}
# Not to confuse with ё
YO_WORDS = {
"general-ma(yo)r": "генерал-майор",
"(yo)g": "йог",
"(yo)ga": "йога",
"(yo)gurt": "йогурт",
"(yo)d": "йод",
"(yo)dlamoq": "йодламоқ",
"(yo)dli": "йодли",
"ma(yo)nez": "майонез",
"mikrorayon": "микрорайон",
"ma(yo)r": "майор",
"ra(yo)n": "район",
}
YU_WORDS = {"mo(yu)pa": "мойупа", "po(yu)stun": "пойустун"}
YA_WORDS = {
"po(ya)bzal": "пойабзал",
"po(ya)ndoz": "пойандоз",
"po(ya)fzal": "пойафзал",
}
YE_WORDS = {
"i(ye)": "ийе",
"konve(ye)r": "конвейер",
"ple(ye)r": "плейер",
"sta(ye)r": "стайер",
"fo(ye)": "фойе",
}
SOFT_SIGN_WORDS = {
"aviamodel": "авиамодель",
"avtomagistralavtomat": "автомагистральавтомат",
"avtomobil": "автомобиль",
"akvarel": "акварель",
"alkogol": "алкоголь",
"albatros": "альбатрос",
"albom": "альбом",
"alpinizm": "альпинизм",
"alpinist": "альпинист",
"alt": "альт",
"alternativ": "альтернатив",
"alternativa": "альтернатива",
"altimetr": "альтиметр",
"altchi": "альтчи",
"alfa": "альфа",
"alfa-zarralar": "альфа-зарралар",
"alma-terapiya": "альма-терапия",
"alyans": "альянс",
"amalgama": "амальгама",
"ansambl": "ансамбль",
"apelsin": "апельсин",
"aprel": "апрель",
"artel": "артель",
"artikl": "артикль",
"arergard": "арьергард",
"asfalt": "асфальт",
"asfaltlamoq": "асфальтламоқ",
"asfaltli": "асфальтли",
"atele": "ателье",
"bazalt": "базальт",
"balzam": "бальзам",
"balzamlash": "бальзамлаш",
"balneolog": "бальнеолог",
"balneologik": "бальнеологик",
"balneologiya": "бальнеология",
"balneoterapiya": "бальнеотерапия",
"balneotexnika": "бальнеотехника",
"banderol": "бандероль",
"barelef": "барельеф",
"barrel": "баррель",
"barer": "барьер",
"batalon": "батальон",
"belveder": "бельведер",
"belgiyalik": "бельгиялик",
"belting": "бельтинг",
"beletaj": "бельэтаж",
"bilyard": "бильярд",
"binokl": "бинокль",
"biofiltr": "биофильтр",
"bolonya": "болонья",
"bolshevizm": "большевизм",
"bolshevik": "большевик",
"brakonerlik": "браконьерлик",
"broneavtomobil": "бронеавтомобиль",
"bron": "бронь",
"budilnik": "будильник",
"bulvar": "бульвар",
"buldenej": "бульденеж",
"buldog": "бульдог",
"buldozer": "бульдозер",
"buldozerchi": "бульдозерчи",
"bulon": "бульон",
"byulleten": "бюллетень",
"valeryanka": "валерьянка",
"valvatsiya": "вальвация",
"vals": "вальс",
"vanil": "ваниль",
"varete": "варьете",
"vedomost": "ведомость",
"veksel": "вексель",
"ventil": "вентиль",
"vermishel": "вермишель",
"verner": "верньер",
"verf": "верфь",
"vestibyul": "вестибюль",
"videofilm": "видеофильм",
"viklyuchatel": "виключатель",
"vinetka": "виньетка",
"violonchel": "виолончель",
"vklyuchatel": "включатель",
"vodevil": "водевиль",
"volost": "волость",
"volt": "вольт",
"volta": "вольта",
"voltli": "вольтли",
"voltmetr": "вольтметр",
"volfram": "вольфрам",
"vulgar": "вульгар",
"vulgarizm": "вульгаризм",
"vulgarlashtirmoq": "вульгарлаштирмоқ",
"gavan": "гавань",
"galvanizatsiya": "гальванизация",
"galvanik": "гальваник",
"galvanometr": "гальванометр",
"gantel": "гантель",
"garmon": "гармонь",
"gastrol": "гастроль",
"gastrol-konsert": "гастроль-концерт",
"gelmint": "гельминт",
"gelmintoz": "гельминтоз",
"gelmintologiya": "гельминтология",
"geraldika": "геральдика",
"gilza": "гильза",
"giposulfit": "гипосульфит",
"golf": "гольф",
"gorelef": "горельеф",
"gorizontal": "горизонталь",
"gospital": "госпиталь",
"grifel": "грифель",
"guash": "гуашь",
"daltonizm": "дальтонизм",
"dvigatel": "двигатель",
"devalvatsiya": "девальвация",
"dekabr": "декабрь",
"delta": "дельта",
"delfin": "дельфин",
"delfinariy": "дельфинарий",
"delfinsimonlar": "дельфинсимонлар",
"detal": "деталь",
"diagonal": "диагональ",
"diafilm": "диафильм",
"dizel": "дизель",
"dizel-motor": "дизель-мотор",
"dirijabl": "дирижабль",
"drel": "дрель",
"duel": "дуэль",
"jenshen": "женьшень",
"impuls": "импульс",
"inventar": "инвентарь",
"insult": "инсульт",
"intervyu": "интервью",
"interer": "интерьер",
"italyan": "итальян",
"italyanlar": "итальянлар",
"italyancha": "итальянча",
"iyul": "июль",
"iyun": "июнь",
"kabel": "кабель",
"kalendar": "календарь",
"kalka": "калька",
"kalkalamoq": "калькаламоқ",
"kalkulyator": "калькулятор",
"kalkulyatsiya": "калькуляция",
"kalsiy": "кальций",
"kanifol": "канифоль",
"kapelmeyster": "капельмейстер",
"kapsyul": "капсюль",
"karamel": "карамель",
"kartel": "картель",
"kartech": "картечь",
"karusel": "карусель",
"karer": "карьер",
"kastryul": "кастрюль",
"kastryulka": "кастрюлька",
"katapulta": "катапульта",
"kafel": "кафель",
"kinofestival": "кинофестиваль",
"kinofilm": "кинофильм",
"kisel": "кисель",
"kitel": "китель",
"knyaz": "князь",
"kobalt": "кобальт",
"kokil": "кокиль",
"kokteyl": "коктейль",
"kompyuter": "компьютер",
"kompyuterlashtirmoq": "компьютерлаштирмоқ",
"konsultant": "консультант",
"konsultativ": "консультатив",
"konsultatsiya": "консультация",
"kontrol": "контроль",
"konferanse": "конферансье",
"konslager": "концлагерь",
"kon": "конь",
"konki": "коньки",
"konkichi": "конькичи",
"konyunktiva": "коньюнктива",
"konyunktivit": "коньюнктивит",
"konyunktura": "коньюнктура",
"konyak": "коньяк",
"korol": "король",
"kreml": "кремль",
"krovat": "кровать",
"kulminatsion": "кульминацион",
"kulminatsiya": "кульминация",
"kultivator": "культиватор",
"kultivatsiya": "культивация",
"kulturizm": "культуризм",
"kurer": "курьер",
"kyat": "кьят",
"lager": "лагерь",
"latun": "латунь",
"losos": "лосось",
"loson": "лосьон",
"magistral": "магистраль",
"marseleza": "марсельеза",
"mebel": "мебель",
"medal": "медаль",
"medalon": "медальон",
"melxior": "мельхиор",
"menshevizm": "меньшевизм",
"menshevik": "меньшевик",
"migren": "мигрень",
"mikroinsult": "микроинсульт",
"mikrofilm": "микрофильм",
"model": "модель",
"modeler": "модельер",
"molbert": "мольберт",
"monastir": "монастирь",
"monokultoura": "монокультоура",
"motel": "мотель",
"multi-": "мульти-",
"multimediya": "мультимедия",
"multimillioner": "мультимиллионер",
"multiplikatsion": "мультипликацион",
"multiplikator": "мультипликатор",
"multiplikatsiya": "мультипликация",
"neft": "нефть",
"nikel": "никель",
"nimpalto": "нимпальто",
"nippel": "ниппель",
"nol": "ноль",
"normal": "нормаль",
"noyabr": "ноябрь",
"oblast": "область",
"okkultizm": "оккультизм",
"oktabr": "октябрь",
"otel": "отель",
"oftalmologiya": "офтальмология",
"ochered": "очередь",
"pavilon": "павильон",
"palma": "пальма",
"palmazor": "пальмазор",
"palpatsiya": "пальпация",
"palto": "пальто",
"paltobop": "пальтобоп",
"paltolik": "пальтолик",
"panel": "панель",
"parallel": "параллель",
"parol": "пароль",
"patrul": "патруль",
"pedal": "педаль",
"penalti": "пенальти",
"pechat": "печать",
"pechene": "печенье",
"pech": "печь",
"plastir": "пластирь",
"povest": "повесть",
"polka": "полька",
"portfel": "портфель",
"porshen": "поршень",
"pochtalon": "почтальон",
"predoxranitel": "предохранитель",
"premera": "премьера",
"premer-ministr": "премьер-министр",
"press-pape": "пресс-папье",
"press-sekretar": "пресс-секретарь",
"pristan": "пристань",
"profil": "профиль",
"pulverizator": "пульверизатор",
"pulmonologiya": "пульмонология",
"pulpa": "пульпа",
"pulpit": "пульпит",
"puls": "пульс",
"pult": "пульт",
"pesa": "пьеса",
"radiospektakl": "радиоспектакль",
"rante": "рантье",
"revalvatsiya": "ревальвация",
"revolver": "револьвер",
"rezba": "резьба",
"rezbali": "резьбали",
"relef": "рельеф",
"rels": "рельс",
"relsli": "рельсли",
"relssiz": "рельссиз",
"retush": "ретушь",
"riyel": "риель",
"ritsar": "рицарь",
"rol": "роль",
"royal": "рояль",
"rubilnik": "рубильник",
"rubl": "рубль",
"rul": "руль",
"saldo": "сальдо",
"salto": "сальто",
"sekretar": "секретарь",
"selderey": "сельдерей",
"seld": "сельдь",
"sentabr": "сентябрь",
"senor": "сеньор",
"senora": "сеньора",
"sinka": "синька",
"sinkalamoq": "синькаламоқ",
"siren": "сирень",
"skalpel": "скальпель",
"slesar": "слесарь",
"sobol": "соболь",
"sol": "соль",
"spektakl": "спектакль",
"spiral": "спираль",
"statya": "статья",
"stelka": "стелька",
"sterjen": "стержень",
"stil": "стиль",
"sudya": "судья",
"sudyalik": "судьялик",
"sulfat": "сульфат",
"sulfatlar": "сульфатлар",
"tabel": "табель",
"talk": "тальк",
"tekstil": "текстиль",
"telefilm": "телефильм",
"tigel": "тигель",
"tokar": "токарь",
"tol": "толь",
"tonnel": "тоннель",
"tunnel": "туннель",
"tush": "тушь",
"tyulen": "тюлень",
"tyul": "тюль",
"ultimatum": "ультиматум",
"ultra-": "ультра-",
"ultrabinafsha": "ультрабинафша",
"ultramikroskop": "ультрамикроскоп",
"ultratovush": "ультратовуш",
"ultraqisqa": "ультрақисқа",
"umivalnik": "умивальник",
"util": "утиль",
"fakultativ": "факультатив",
"fakultet": "факультет",
"fakultetlalaro": "факультетлаларо",
"falsifikator": "фальсификатор",
"falsifikatsiya": "фальсификация",
"fevral": "февраль",
"feldmarshal": "фельдмаршал",
"feldsher": "фельдшер",
"feldʼeger": "фельдъегерь",
"feleton": "фельетон",
"feletonchi": "фельетончи",
"festival": "фестиваль",
"fizkultura": "физкультура",
"fizkulturachi": "физкультурачи",
"film": "фильм",
"film-konsert": "фильм-концерт",
"filmoskop": "фильмоскоп",
"filmoteka": "фильмотека",
"filtr": "фильтр",
"filtratsiya": "фильтрация",
"filtrlamoq": "фильтрламоқ",
"filtrli": "фильтрли",
"folga": "фольга",
"folklor": "фольклор",
"folklorist": "фольклорист",
"folkloristika": "фольклористика",
"folklorchi": "фольклорчи",
"folklorshunos": "фольклоршунос",
"folklorshunoslik": "фольклоршунослик",
"fonar": "фонарь",
"fortepyano": "фортепьяно",
"xolodilnik": "холодильник",
"xrustal": "хрусталь",
"selsiy": "цельсий",
"sirkul": "циркуль",
"sokol": "цоколь",
"chizel": "чизель",
"shagren": "шагрень",
"shampun": "шампунь",
"sherst": "шерсть",
"shinel": "шинель",
"shifoner": "шифоньер",
"shnitsel": "шницель",
"shpatel": "шпатель",
"shpilka": "шпилька",
"shpindel": "шпиндель",
"shtangensirkul": "штангенциркуль",
"shtapel": "штапель",
"shtempel": "штемпель",
"emal": "эмаль",
"emulsiya": "эмульсия",
"endshpil": "эндшпиль",
"eskadrilya": "эскадрилья",
"yuan": "юань",
"yuriskonsult": "юрисконсульт",
"yakor": "якорь",
"yanvar": "январь",
}
CYRILLIC_TO_LATIN = {
"а": "a",
"А": "A",
"б": "b",
"Б": "B",
"в": "v",
"В": "V",
"г": "g",
"Г": "G",
"д": "d",
"Д": "D",
"е": "e",
"Е": "E",
"ё": "yo",
"Ё": "Yo",
"ж": "j",
"Ж": "J",
"з": "z",
"З": "Z",
"и": "i",
"И": "I",
"й": "y",
"Й": "Y",
"к": "k",
"К": "K",
"л": "l",
"Л": "L",
"м": "m",
"М": "M",
"н": "n",
"Н": "N",
"о": "o",
"О": "O",
"п": "p",
"П": "P",
"р": "r",
"Р": "R",
"с": "s",
"С": "S",
"т": "t",
"Т": "T",
"у": "u",
"У": "U",
"ф": "f",
"Ф": "F",
"х": "x",
"Х": "X",
"ц": "s",
"Ц": "S",
"ч": "ch",
"Ч": "Ch",
"ш": "sh",
"Ш": "Sh",
"ъ": "ʼ",
"Ъ": "ʼ",
"ь": "",
"Ь": "",
"э": "e",
"Э": "E",
"ю": "yu",
"Ю": "Yu",
"я": "ya",
"Я": "Ya",
"ў": "oʻ",
"Ў": "Oʻ",
"қ": "q",
"Қ": "Q",
"ғ": "gʻ",
"Ғ": "Gʻ",
"ҳ": "h",
"Ҳ": "H",
}
CYRILLIC_VOWELS = (
"а",
"А",
"е",
"Е",
"ё",
"Ё",
"и",
"И",
"о",
"О",
"у",
"У",
"э",
"Э",
"ю",
"Ю",
"я",
"Я",
"ў",
"Ў",
)
def to_cyrillic(text):
"""Transliterate latin text to cyrillic using the following rules:
1. ye = е in the beginning of a word or after a vowel
2. e = э in the beginning of a word or after a vowel
3. ц exception words
4. э exception words
"""
# These compounds must be converted before other letters
compounds_first = {
"ch": "ч",
"Ch": "Ч",
"CH": "Ч",
# this line must come before 's' because it has an 'h'
"sh": "ш",
"Sh": "Ш",
"SH": "Ш",
# This line must come before 'yo' because of it's apostrophe
"yo‘": "йў",
"Yo‘": "Йў",
"YO‘": "ЙЎ",
}
compounds_second = {
"yo": "ё",
"Yo": "Ё",
"YO": "Ё",
# 'ts': 'ц', 'Ts': 'Ц', 'TS': 'Ц', # No need for this, see TS_WORDS
"yu": "ю",
"Yu": "Ю",
"YU": "Ю",
"ya": "я",
"Ya": "Я",
"YA": "Я",
"ye": "е",
"Ye": "Е",
"YE": "Е",
# different kinds of apostrophes
"o‘": "ў",
"O‘": "Ў",
"oʻ": "ў",
"Oʻ": "Ў",
"g‘": "ғ",
"G‘": "Ғ",
"gʻ": "ғ",
"Gʻ": "Ғ",
}
beginning_rules = {
"ye": "е",
"Ye": "Е",
"YE": "Е",
"e": "э",
"E": "Э",
}
after_vowel_rules = {
"ye": "е",
"Ye": "Е",
"YE": "Е",
"e": "э",
"E": "Э",
}
exception_words_rules = {
"s": "ц",
"S": "Ц",
"ts": "ц",
"Ts": "Ц",
"TS": "Ц", # but not tS
"e": "э",
"E": "э",
"sh": "сҳ",
"Sh": "Сҳ",
"SH": "СҲ",
"yo": "йо",
"Yo": "Йо",
"YO": "ЙО",
"yu": "йу",
"Yu": "Йу",
"YU": "ЙУ",
"ya": "йа",
"Ya": "Йа",
"YA": "ЙА",
}
# standardize some characters
# the first one is the windows string, the second one is the mac string
text = text.replace("ʻ", "‘")
def replace_soft_sign_words(m):
word = m.group(1)
if word.isupper():
result = SOFT_SIGN_WORDS[word.lower()].upper()
elif word[0].isupper():
result = SOFT_SIGN_WORDS[word.lower()]
result = result[0].upper() + result[1:]
else:
result = SOFT_SIGN_WORDS[word.lower()]
return result
for word in SOFT_SIGN_WORDS:
text = re.sub(r"\b(%s)" % word, replace_soft_sign_words, text, flags=re.U)
def replace_exception_words(m):
"""Replace ц (or э) only leaving other characters unchanged"""
return "%s%s%s" % (
m.group(1)[: m.start(2)],
exception_words_rules[m.group(2)],
m.group(1)[m.end(2) :],
)
# loop because of python's limit of 100 named groups
for word in list(TS_WORDS.keys()) + list(E_WORDS.keys()):
text = re.sub(r"\b(%s)" % word, replace_exception_words, text, flags=re.U)
# compounds
text = re.sub(
r"(%s)" % "|".join(compounds_first.keys()),
lambda x: compounds_first[x.group(1)],
text,
flags=re.U,
)
text = re.sub(
r"(%s)" % "|".join(compounds_second.keys()),
lambda x: compounds_second[x.group(1)],
text,
flags=re.U,
)
text = re.sub(
r"\b(%s)" % "|".join(beginning_rules.keys()),
lambda x: beginning_rules[x.group(1)],
text,
flags=re.U,
)
text = re.sub(
r"(%s)(%s)" % ("|".join(LATIN_VOWELS), "|".join(after_vowel_rules.keys())),
lambda x: "%s%s" % (x.group(1), after_vowel_rules[x.group(2)]),
text,
flags=re.U,
)
text = re.sub(
r"(%s)" % "|".join(LATIN_TO_CYRILLIC.keys()),
lambda x: LATIN_TO_CYRILLIC[x.group(1)],
text,
flags=re.U,
)
return text
def to_latin(text):
"""Transliterate cyrillic text to latin using the following rules:
1. ц = s at the beginning of a word.
ц = ts in the middle of a word after a vowel.
ц = s in the middle of a word after consonant (DEFAULT in CYRILLIC_TO_LATIN)
цирк = sirk
цех = sex
федерация = federatsiya
функция = funksiya
2. е = ye at the beginning of a word or after a vowel.
е = e in the middle of a word after a consonant (DEFAULT).
3. Сентябр = Sentabr, Октябр = Oktabr
"""
beginning_rules = {"ц": "s", "Ц": "S", "е": "ye", "Е": "Ye"}
after_vowel_rules = {"ц": "ts", "Ц": "Ts", "е": "ye", "Е": "Ye"}
text = re.sub(
r"(сент|окт)([яЯ])(бр)",
lambda x: "%s%s%s"
% (x.group(1), "a" if x.group(2) == "я" else "A", x.group(3)),
text,
flags=re.IGNORECASE | re.U,
)
text = re.sub(
r"\b(%s)" % "|".join(beginning_rules.keys()),
lambda x: beginning_rules[x.group(1)],
text,
flags=re.U,
)
text = re.sub(
r"(%s)(%s)" % ("|".join(CYRILLIC_VOWELS), "|".join(after_vowel_rules.keys())),
lambda x: "%s%s" % (x.group(1), after_vowel_rules[x.group(2)]),
text,
flags=re.U,
)
text = re.sub(
r"(%s)" % "|".join(CYRILLIC_TO_LATIN.keys()),
lambda x: CYRILLIC_TO_LATIN[x.group(1)],
text,
flags=re.U,
)
return text
def transliterate(text, to_variant):
if to_variant == "cyrillic":
text = to_cyrillic(text)
elif to_variant == "latin":
text = to_latin(text)
return text
if __name__ == "__main__":
"""cat input_in_lat.txt | python transliterate.py > output_in_cyr.txt"""
for line in sys.stdin:
sys.stdout.write(transliterate(line, "cyrillic"))