Пример #1
0
    def define(self, item, *items):
        from yargy_uk import rule

        if not items and is_rule(item):
            if isinstance(item, ForwardRule):
                raise ValueError('forward(forward(...)) not allowed')
            self.rule = item
        else:
            self.rule = rule(item, *items)
        return self
Пример #2
0
    ABBR,
    TITLE
).interpretation(
    Name.middle
)


#########
#
#  FI IF
#
#########


FIRST_LAST = rule(
    FIRST,
    LAST
)

LAST_FIRST = rule(
    LAST,
    FIRST
)


###########
#
#  ABBR
#
###########

Пример #3
0
    'нотариальная контора',
    'букмекерская контора',
    'авиазавод',
    'автозавод',
    'винзавод',
    'подстанция',
    'гидроэлектростанция',
])

gnc = gnc_relation()
ADJF_PREFIX = rule(
    or_(
        rule(gram('ADJF').match(gnc)),  # международное
        rule(  # историко-просветительское
            true(),
            eq('-'),
            gram('ADJF').match(gnc),
        ),
    ),
    or_(caseless('и'), eq(',')).optional(),
).repeatable()

case = case_relation()
GENT_GROUP = rule(
    gram('gent').match(case)
).repeatable().optional()

QUOTED = rule(
    TYPE,
    in_(QUOTES),
    not_(in_(QUOTES)).repeatable(),
Пример #4
0
Country = fact('Country', ['name'])
Region = fact('Region', ['name', 'type'])
Settlement = fact('Settlement', ['name', 'type'])
Street = fact('Street', ['name', 'type'])
Building = fact('Building', ['number', 'type'])
Room = fact('Room', ['number', 'type'])

DASH = eq('-')
DOT = eq('.')

ADJF = gram('ADJF')
NOUN = gram('NOUN')
INT = type('INT')
TITLE = is_title()

ANUM = rule(INT, DASH.optional(),
            in_caseless({'я', 'й', 'е', 'ое', 'ая', 'ий', 'ой'}))

#########
#
#  STRANA
#
##########

# TODO
COUNTRY_VALUE = dictionary({'россия', 'украина'})

ABBR_COUNTRY_VALUE = in_caseless({'рф'})

COUNTRY = or_(COUNTRY_VALUE, ABBR_COUNTRY_VALUE).interpretation(
    Country.name).interpretation(Country)
Пример #5
0
    'липень': 7,
    'серпень': 8,
    'вересень': 9,
    'жовтень': 10,
    'листопад': 11,
    'грудень': 12,
}

MONTH_NAME = dictionary(MONTHS).interpretation(Date.month.normalized().custom(
    MONTHS.__getitem__))

MONTH = and_(gte(1), lte(12)).interpretation(Date.month.custom(int))

DAY = and_(gte(1), lte(31)).interpretation(Date.day.custom(int))

YEAR_WORD = or_(rule('р', eq('.').optional()), rule(normalized('рік')))

YEAR = and_(gte(1000), lte(2100)).interpretation(Date.year.custom(int))

YEAR_SHORT = and_(length_eq(2), gte(0), lte(99)).interpretation(
    Date.year.custom(lambda _: 1900 + int(_)))

ERA_YEAR = and_(gte(1), lte(100000)).interpretation(Date.year.custom(int))

ERA_WORD = rule(
    eq('до'),
    or_(rule('н', eq('.'), 'е',
             eq('.').optional()),
        rule(normalized('наша'),
             normalized('ера')))).interpretation(Date.current_era.const(False))
Пример #6
0
DOT = eq('.')
INT = type('INT')

########
#
#   CURRENCY
#
##########

EURO = or_(normalized('евро'), eq('€')).interpretation(const(dsl.EURO))

DOLLARS = or_(normalized('доллар'), eq('$')).interpretation(const(dsl.DOLLARS))

RUBLES = or_(
    rule(normalized('рубль')),
    rule(or_(caseless('руб'), caseless('р'), eq('₽')),
         DOT.optional())).interpretation(const(dsl.RUBLES))

CURRENCY = or_(EURO, DOLLARS, RUBLES).interpretation(Money.currency)

KOPEIKA = or_(rule(normalized('копейка')),
              rule(or_(caseless('коп'), caseless('к')), DOT.optional()))

CENT = or_(normalized('цент'), eq('¢'))

EUROCENT = normalized('евроцент')

COINS_CURRENCY = or_(KOPEIKA, rule(CENT), rule(EUROCENT))

############
Пример #7
0
)

Location = fact(
    'Location',
    ['name'],
)

ADJECTIVE_TAG = or_(gram('ADJF'), vesum_tag('adj'))

GENITIVE_TAG = or_(gram('gent'), vesum_tag('v_rod'))

REGION = rule(
    ADJECTIVE_TAG,
    dictionary({
        'край',
        'район',
        'область',
        'губернія',
    }),
).interpretation(Location.name.inflected())

AUTONOMOUS_DISTRICT = rule(
    ADJECTIVE_TAG.repeatable(),
    or_(
        rule(
            dictionary({'автономний'}),
            dictionary({'округ'}),
        ),
        rule('АО'),
    ),
).interpretation(Location.name.inflected())
Пример #8
0
    'співпрезидент',
    'віце-президент',
    'екс-президент',
    'представник',
    'керівник',
    'директор',
    'голова',
])

GENT = or_(
    gram('gent'),
    vesum_tag('v_rod')
)

WHERE = or_(
    rule(GENT),
    rule(GENT, GENT),
    rule(GENT, GENT, GENT),
    rule(GENT, GENT, GENT, GENT),
    rule(GENT, GENT, GENT, GENT, GENT),
)

POSITION = or_(
    POSITION,
    rule(POSITION, WHERE)
).interpretation(
    Person.position
)

NAME = NAME.interpretation(
    Person.name