def declension_table(stem1, stem2, suffices, tags): # assert(len(suffices) == 10): stems = [stem1, stem1, stem2, stem2, stem2, stem2, stem2, stem2, stem2, stem2, stem2, stem2] if suffices[0] == suffices[2]: # Acc = Nom (= Voc) stems[2] = stems[0] if len(suffices) == 14: stems = stems[0:6] + [stem2] + stems[6:12] + [stem2] return util.variate(stems, tags, suffices, case_tags_7x2) # with locative else: return util.variate(stems, tags, suffices, case_tags_6x2)
def decline_noun(type, nom_sg, gen_sg, gender, ja): if type == '1': decliner = decline_noun_type1 if gen_sg is None: gen_sg = nom_sg + u'e' elif type == '2': decliner = decline_noun_type2 if gen_sg is None: if nom_sg[-2:] in [u'us', u'um']: gen_sg = nom_sg[:-2] + u'ī' else: # 'er', 'ir' print "(", nom_sg, ")" return None elif type == '3-ium': decliner = decline_noun_type3_ium elif type == '3-um': decliner = decline_noun_type3_um elif type == '4': decliner = decline_noun_type4 elif type == '5': decliner = decline_noun_type5 elif type == '*': # forms = [[g.decode('utf-8') for g in f.split(',')] for f in fs[1].split(':')] forms = [f.split(',') for f in nom_sg.split(':')] if len(forms) == 5: forms = forms[0:1] + forms[0:1] + forms[1:5] case_tags = case_tags_6x2[0:6] elif len(forms) == 6: case_tags = case_tags_6x2[0:6] elif len(forms) == 10: forms = forms[0:1] + forms[0:1] + forms[1:5] \ + forms[5:6] + forms[5:6] + forms[6:10] case_tags = case_tags_6x2 else: case_tags = case_tags_6x2 # util.pp(forms) tags = {'pos':'noun', 'type':'*', 'base':forms[0][0], 'gen_sg':forms[2][0], 'gender':gender, 'ja':ja } table = util.variate(['']*len(forms), tags, forms, case_tags) # util.pp(table) return table # items = util.aggregate_cases(table) # return items else: return None tags = {'pos':'noun', 'type':type, 'base':nom_sg, 'gen_sg':gen_sg, 'gender':gender, 'ja':ja } # util.pp( tags ) table = decliner(nom_sg, gen_sg, gender, ja, tags) return table
def conjugate(stem, common_tags, suffices, suffices_tags=persons_and_numbers): return util.variate(stem, common_tags, suffices, suffices_tags)
def decline(common_prefix, common_tags, suffices, suffices_tags, extra_tags={}): return util.variate(common_prefix, util.aggregate_dicts(common_tags, extra_tags), suffices, suffices_tags)