|
|
| softletters=set(u"яёюиье") |
| startsyl=set(u"#ъьаяоёуюэеиы-") |
| others = set(["#", "+", "-", u"ь", u"ъ"]) |
|
|
| softhard_cons = { |
| u"б" : u"b", |
| u"в" : u"v", |
| u"г" : u"g", |
| u"Г" : u"g", |
| u"д" : u"d", |
| u"з" : u"z", |
| u"к" : u"k", |
| u"л" : u"l", |
| u"м" : u"m", |
| u"н" : u"n", |
| u"п" : u"p", |
| u"р" : u"r", |
| u"с" : u"s", |
| u"т" : u"t", |
| u"ф" : u"f", |
| u"х" : u"h" |
| } |
|
|
| other_cons = { |
| u"ж" : u"zh", |
| u"ц" : u"c", |
| u"ч" : u"ch", |
| u"ш" : u"sh", |
| u"щ" : u"sch", |
| u"й" : u"j" |
| } |
|
|
| vowels = { |
| u"а" : u"a", |
| u"я" : u"a", |
| u"у" : u"u", |
| u"ю" : u"u", |
| u"о" : u"o", |
| u"ё" : u"o", |
| u"э" : u"e", |
| u"е" : u"e", |
| u"и" : u"i", |
| u"ы" : u"y", |
| } |
|
|
| def pallatize(phones): |
| for i, phone in enumerate(phones[:-1]): |
| if phone[0] in softhard_cons: |
| if phones[i+1][0] in softletters: |
| phones[i] = (softhard_cons[phone[0]] + "j", 0) |
| else: |
| phones[i] = (softhard_cons[phone[0]], 0) |
| if phone[0] in other_cons: |
| phones[i] = (other_cons[phone[0]], 0) |
|
|
| def convert_vowels(phones): |
| new_phones = [] |
| prev = "" |
| for phone in phones: |
| if prev in startsyl: |
| if phone[0] in set(u"яюеё"): |
| new_phones.append("j") |
| if phone[0] in vowels: |
| new_phones.append(vowels[phone[0]] + str(phone[1])) |
| else: |
| new_phones.append(phone[0]) |
| prev = phone[0] |
|
|
| return new_phones |
|
|
| def convert(stressword): |
| phones = ("#" + stressword + "#") |
|
|
|
|
| |
| stress_phones = [] |
| stress = 0 |
| for phone in phones: |
| if phone == "+": |
| stress = 1 |
| else: |
| stress_phones.append((phone, stress)) |
| stress = 0 |
|
|
| |
| pallatize(stress_phones) |
|
|
| |
| phones = convert_vowels(stress_phones) |
|
|
| |
| phones = [x for x in phones if x not in others] |
| return " ".join(phones) |
|
|