yargy

Форк
0
/
test_person.py 
66 строк · 1.4 Кб
1

2
from yargy import Parser, rule, and_, not_
3
from yargy.interpretation import fact
4
from yargy.predicates import gram
5
from yargy.relations import gnc_relation
6
from yargy.pipelines import morph_pipeline
7

8

9
def test_person():
10
    Name = fact(
11
        'Name',
12
        ['first', 'last'],
13
    )
14
    Person = fact(
15
        'Person',
16
        ['position', 'name']
17
    )
18

19
    LAST = and_(
20
        gram('Surn'),
21
        not_(gram('Abbr')),
22
    )
23
    FIRST = and_(
24
        gram('Name'),
25
        not_(gram('Abbr')),
26
    )
27

28
    POSITION = morph_pipeline([
29
        'управляющий директор',
30
        'вице-мэр'
31
    ])
32

33
    gnc = gnc_relation()
34
    NAME = rule(
35
        FIRST.interpretation(
36
            Name.first
37
        ).match(gnc),
38
        LAST.interpretation(
39
            Name.last
40
        ).match(gnc)
41
    ).interpretation(
42
        Name
43
    )
44

45
    PERSON = rule(
46
        POSITION.interpretation(
47
            Person.position
48
        ).match(gnc),
49
        NAME.interpretation(
50
            Person.name
51
        )
52
    ).interpretation(
53
        Person
54
    )
55

56
    parser = Parser(PERSON)
57

58
    match = parser.match('управляющий директор Иван Ульянов')
59
    assert match
60

61
    assert match.fact == Person(
62
        position='управляющий директор',
63
        name=Name(
64
            first='Иван',
65
            last='Ульянов'
66
        )
67
    )
68

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.