예제 #1
0
파일: latin_noun.py 프로젝트: naoyat/latin
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)
예제 #2
0
파일: latin_noun.py 프로젝트: naoyat/latin
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
예제 #3
0
def conjugate(stem, common_tags, suffices, suffices_tags=persons_and_numbers):
    return util.variate(stem, common_tags, suffices, suffices_tags)
예제 #4
0
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)