Open abaula opened 5 years ago
FPerson = fact( 'Person', ['first', 'last'] ) GName = gram('Name') GSurn = gram('Surn') RLastName = and_(GSurn, is_single()).interpretation( FPerson.last.inflected() ) RFirstName = and_(GName, is_single()).interpretation( FPerson.first.inflected() ) RPerson = rule(or_( RFirstName, RLastName #RLastName, RFirstName )).interpretation( FPerson ) show_matches(RPerson, ["Иванов", "Иван"])
имеем:
Person(first='иванов', last=None) Person(first='иван', last=None)
если взглянуть на морфер, то видно, что "Иванов" не имеет единственного числа для gram('Name'), тем не менее правило RFirstName срабатывает.
list(tokenizer("Иванов Иван"))
[MorphToken('Иванов', [0, 6), 'RU', [Form('иванов', Grams(NOUN,Sgtm,Surn,anim,masc,nomn,sing)), Form('иванов', Grams(ADJF,Poss,masc,nomn,sing)), Form('иванов', Grams(ADJF,Poss,accs,inan,masc,sing)), Form('иван', Grams(NOUN,Name,anim,gent,masc,plur)), Form('иван', Grams(NOUN,Name,accs,anim,masc,plur))]), MorphToken('Иван', [7, 11), 'RU', [Form('иван', Grams(NOUN,Name,anim,masc,nomn,sing))])]
имеем:
если взглянуть на морфер, то видно, что "Иванов" не имеет единственного числа для gram('Name'), тем не менее правило RFirstName срабатывает.
list(tokenizer("Иванов Иван"))
[MorphToken('Иванов', [0, 6), 'RU', [Form('иванов', Grams(NOUN,Sgtm,Surn,anim,masc,nomn,sing)), Form('иванов', Grams(ADJF,Poss,masc,nomn,sing)), Form('иванов', Grams(ADJF,Poss,accs,inan,masc,sing)), Form('иван', Grams(NOUN,Name,anim,gent,masc,plur)), Form('иван', Grams(NOUN,Name,accs,anim,masc,plur))]), MorphToken('Иван', [7, 11), 'RU', [Form('иван', Grams(NOUN,Name,anim,masc,nomn,sing))])]