def generate_komektes_septik(word_and_tags: tuple) -> list: """Функция, генерирующая көмектес септік (instrumental case). Гласные и м, н, ң, р, л -мен ж, з -бен Глухие и б, в, г, д -пен """ word, tags = word_and_tags result = [] new_word = "" if (word[-1] in vowels) \ or (word[-1] in ['м', 'н', 'ң', 'р', 'л']): new_word = add_affix_with_harmony(word, affix="мен") elif (word[-1] in ['ж', 'з']): new_word = add_affix_with_harmony(word, affix="бен") elif (word[-1] in voiceless_consonant) \ or (word[-1] in ['б', 'в', 'г', 'д']): new_word = add_affix_with_harmony(word, affix="пен") new_tags = tags.copy() new_tags["case"] = "<ins>" result.append((new_word, new_tags)) return result
def generate_reflexive_verb(word_and_tags: tuple) -> list: """функция, генерирующая возвратный залог глагола. Основа + -н/-ын/-ін """ word, tags = word_and_tags result = [] if word[-1] in vowels: new_word = add_affix_with_harmony(word, affix='н') else: new_word = add_affix_choosing_hard_or_soft(word, hard_affix='ын', soft_affix='ін') new_tags = tags.copy() new_tags["reflexivity"] = "<ref>" result.append((new_word, new_tags)) return result
def generate_all_buryngy_otken_shaq_3(word_and_tags: tuple) -> list: """функция, генерирующая бұрынғы өткен шақ 3 во всех лицах Основа глагола + -п/-ып/-іп + личные окончания гласные -п согласные -ып/-іп """ word, tags = word_and_tags result = [] if word[-1] in vowels: new_word = add_affix_with_harmony(word, affix='п') else: new_word = add_affix_choosing_hard_or_soft(word, hard_affix="ып", soft_affix="іп") new_tags = tags.copy() new_tags["tense"] = "<past><buryngy-otken-3>" # Добавляем все личные окончания result += generate_all_long_personals_with_3p((new_word, new_tags)) return result
def generate_all_bolzhaldy_keler_shaq(word_and_tags: tuple) -> list: """функция, генерирующая болжалды келер шақ во всех лицах. Основа глагола + -ар/-ер/-р + личные окончания (длинные без 3 лица) ар – в твёрдых словах ер – в мягких словах р – после гласных """ word, tags = word_and_tags result = [] if word[-1] in vowels: new_word = add_affix_with_harmony(word, affix='р') else: new_word = add_affix_choosing_hard_or_soft(word, hard_affix='ар', soft_affix='ер') new_tags = tags.copy() new_tags["tense"] = "<future><bolzhaldy-keler>" # Добавляем все личные окончания result += generate_all_long_personals_without_3p((new_word, new_tags)) return result
def generate_all_auyspaly_osy_keler_shaq(word_and_tags: tuple) -> list: """функция, генерирующая ауыспалы осы/келер шақ во всех лицах. Основа глагола + -а/-е/-й + личные окончания (длинные с 3 лицом) а – в твёрдых словах е – в мягких словах й – после гласных """ word, tags = word_and_tags result = [] if word[-1] in vowels: new_word = add_affix_with_harmony(word, affix='й') else: new_word = add_affix_choosing_hard_or_soft(word, hard_affix='а', soft_affix='е') new_tags = tags.copy() new_tags["tense"] = "<pres><future>" # Добавляем все личные окончания result += generate_all_long_personals_with_3p((new_word, new_tags)) return result
def generate_tabys_septik(word_and_tags: tuple) -> list: """Функция, генерирующая табыс септік (accusative case). После аффиксов 3-го лица -н Гласные -ны, -нi Сонорные и з, ж -ды, -дi Глухие и б, в, г, д -ты, -тi """ word, tags = word_and_tags result = [] new_word = "" if "<px3sp>" in tags.values(): new_word = add_affix_with_harmony(word, affix='н') elif (word[-1] in vowels): new_word = add_affix_choosing_hard_or_soft(word, hard_affix="ны", soft_affix="нi") elif (word[-1] in sonorous_consonants) \ or (word[-1] in ['з', 'ж']): new_word = add_affix_choosing_hard_or_soft(word, hard_affix="ды", soft_affix="дi") elif (word[-1] in voiceless_consonant) \ or (word[-1] in ['б', 'в', 'г', 'д']): new_word = add_affix_choosing_hard_or_soft(word, hard_affix="ты", soft_affix="тi") new_tags = tags.copy() new_tags["case"] = "<acc>" result.append((new_word, new_tags)) return result
def generate_all_short_personals(word_and_tags: tuple) -> list: # region """Функция, генерирующая личную форму (жіктік). Краткие личные окончания. Окончаний нет в третьем лице. (Применяются в очевидно-прошедшими времени и условном наклонении глагола) 1 лицо ед.числа -м -ым, -ім 2 лицо ед.числа -ң -ың, -ің 2 лицо ед.числа (вежливое) -ңыз/-ңіз -ыңыз/-іңіз 1 лицо мн.числа -қ -ық, -ік 2 лицо мн.числа -ңдар/-ңдер -ыңдар/іңдер 2 лицо мн.числа (вежливое) -ңыздар/-ңіздер -ыңыздар/-іңіздер 3 лицо ед. и мн. числа - """ # endregion word, tags = word_and_tags result = [] # ед.число if ("plurality" not in tags) or (tags["plurality"] != "<pl>"): # 1 лицо ед.числа # -м # -ым, -ім if (word[-1] in vowels): new_word = add_affix_with_harmony(word, affix='м') else: new_word = add_affix_choosing_hard_or_soft(word, hard_affix="ым", soft_affix="ім") new_tags = tags.copy() new_tags["person"] = "<p1>" new_tags["plurality"] = "<sg>" result.append((new_word, new_tags)) # 2 лицо ед.числа # -ң # -ың, -ің if (word[-1] in vowels): new_word = add_affix_with_harmony(word, affix='ң') else: new_word = add_affix_choosing_hard_or_soft(word, hard_affix="ың", soft_affix="ің") new_tags = tags.copy() new_tags["person"] = "<p2>" new_tags["plurality"] = "<sg>" result.append((new_word, new_tags)) # 2 лицо ед.числа (вежливое) # -ңыз/-ңіз # -ыңыз/-іңіз if (word[-1] in vowels): new_word = add_affix_choosing_hard_or_soft(word, hard_affix="ңыз", soft_affix="ңіз") else: new_word = add_affix_choosing_hard_or_soft(word, hard_affix="ыңыз", soft_affix="іңіз") new_tags = tags.copy() new_tags["person"] = "<p2_2>" new_tags["plurality"] = "<sg>" result.append((new_word, new_tags)) # мн.число # 1 лицо мн.числа # -қ # -ық, -ік if (word[-1] in vowels): new_word = add_affix_choosing_hard_or_soft(word, hard_affix="қ", soft_affix="к") else: new_word = add_affix_choosing_hard_or_soft(word, hard_affix="ық", soft_affix="ік") new_tags = tags.copy() new_tags["person"] = "<p1>" new_tags["plurality"] = "<pl>" result.append((new_word, new_tags)) # 2 лицо мн.числа # -ңдар/-ңдер # -ыңдар/іңдер if (word[-1] in vowels): new_word = add_affix_choosing_hard_or_soft(word, hard_affix="ңдар", soft_affix="ңдер") else: new_word = add_affix_choosing_hard_or_soft(word, hard_affix="ыңдар", soft_affix="іңдер") new_tags = tags.copy() new_tags["person"] = "<p2>" new_tags["plurality"] = "<pl>" result.append((new_word, new_tags)) # 2 лицо мн.числа (вежливое) # -ңыздар/-ңіздер # -ыңыздар/-іңіздер if (word[-1] in vowels): new_word = add_affix_choosing_hard_or_soft(word, hard_affix="ңыздар", soft_affix="ңіздер") else: new_word = add_affix_choosing_hard_or_soft(word, hard_affix="ыңыздар", soft_affix="іңіздер") new_tags = tags.copy() new_tags["person"] = "<p2_2>" new_tags["plurality"] = "<pl>" result.append((new_word, new_tags)) # 3 лицо ед. и мн. числа # - new_word = word new_tags = tags.copy() new_tags["person"] = "<p3>" new_tags["plurality"] = "<sp>" result.append((new_word, new_tags)) return result
def generate_all_possessives(word_and_tags: tuple) -> list: # region """Функция, генерирующая притяжательную форму (тәуiлдiк). 1 лицо ед.числа После гласных -м После согласных -ым, -iм 1 лицо мн.числа После гласных -мыз, -мiз После согласных -ымыз, -iмiз 2 лицо ед. и мн.числа После гласных -ң После согласных -ың, -iң 2 лицо ед. и мн.числа (вежливое) После гласных -ңыз, -ңыз После согласных -ыңыз, -iңiз 3 лицо ед. и мн. числа После гласных -сы, -сi После согласных -ы, -i """ # endregion word, tags = word_and_tags result = [] # 1 лицо ед.числа # После гласных # -м # После согласных # -ым, -iм if (word[-1] in vowels): new_word = add_affix_with_harmony(word, affix='м') # elif (word[-1] in consonants): else: new_word = add_affix_choosing_hard_or_soft(word, hard_affix="ым", soft_affix="ім") new_tags = tags.copy() new_tags["person"] = "<p1>" new_tags["possession"] = "<px1sg>" result.append((new_word, new_tags)) # 1 лицо мн.числа # После гласных # -мыз, -мiз # После согласных # -ымыз, -iмiз if (word[-1] in vowels): new_word = add_affix_choosing_hard_or_soft(word, hard_affix="мыз", soft_affix="мiз") elif (word[-1] in consonants): new_word = add_affix_choosing_hard_or_soft(word, hard_affix="ымыз", soft_affix="iмiз") new_tags = tags.copy() new_tags["person"] = "<p1>" new_tags["possession"] = "<px1pl>" result.append((new_word, new_tags)) # 2 лицо ед. и мн.числа # После гласных # -ң # После согласных # -ың, -iң if (word[-1] in vowels): new_word = add_affix_with_harmony(word, affix='ң') elif (word[-1] in consonants): new_word = add_affix_choosing_hard_or_soft(word, hard_affix="ың", soft_affix="iң") # тут подходят px2sg и px2pl, пока ставится "объединенный вариант" new_tags = tags.copy() new_tags["person"] = "<p2>" new_tags["possession"] = "<px2sp>" result.append((new_word, new_tags)) # 2 лицо ед. и мн.числа (вежливое) # После гласных # -ңыз, -ңiз # После согласных # -ыңыз, -iңiз if (word[-1] in vowels): new_word = add_affix_choosing_hard_or_soft(word, hard_affix="ңыз", soft_affix="ңiз") elif (word[-1] in consonants): new_word = add_affix_choosing_hard_or_soft(word, hard_affix="ыңыз", soft_affix="iңiз") # тут подходят px2sg и px2pl, пока ставится "объединенный вариант" # TODO придумать тег для вежлифой формы new_tags = tags.copy() new_tags["person"] = "<p2_2>" new_tags["possession"] = "<px2sp_2>" result.append((new_word, new_tags)) # 3 лицо ед. и мн. числа # После гласных # -сы, -сi # После согласных # -ы, -i if (word[-1] in vowels): new_word = add_affix_choosing_hard_or_soft(word, hard_affix="сы", soft_affix="сi") elif (word[-1] in consonants): new_word = add_affix_choosing_hard_or_soft(word, hard_affix="ы", soft_affix="i") new_tags = tags.copy() new_tags["person"] = "<p3>" new_tags["possession"] = "<px3sp>" result.append((new_word, new_tags)) return result