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
ABBR, TITLE ).interpretation( Name.middle ) ######### # # FI IF # ######### FIRST_LAST = rule( FIRST, LAST ) LAST_FIRST = rule( LAST, FIRST ) ########### # # ABBR # ###########
'нотариальная контора', 'букмекерская контора', 'авиазавод', 'автозавод', 'винзавод', 'подстанция', 'гидроэлектростанция', ]) 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(),
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)
'липень': 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))
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)) ############
) 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())
'співпрезидент', 'віце-президент', 'екс-президент', 'представник', 'керівник', 'директор', 'голова', ]) 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