'сравн': 'comp', 'прев': 'supr', 'пвл': 'imper', } GRAMINFO_MAP = dict( itertools.chain( GENDERS.items(), CASES.items(), NUMBERS.items(), PERSONS.items(), TENSES.items(), VOICES.items(), EXTRA.items(), )) GRAMINFO_MAP_INV = invert_mapping(GRAMINFO_MAP) def from_aot(aot_tag): pos, info = aot.split_tag(aot_tag) extra_info = set() if pos in ['ПРИЧАСТИЕ', 'КР_ПРИЧАСТИЕ']: extra_info.add('partcp') else: info.discard('дст') info.discard('стр') if pos == 'ИНФИНИТИВ': extra_info.add('inf') elif pos == 'ДЕЕПРИЧАСТИЕ': extra_info.add('ger')
['106', 'V-ie', '*ие', 'отчество через -ие-', '—', None], ['107', 'V-bi', '*ьи', 'форма на -ьи', '—', None], ['108', 'Fimp', '*несов', 'деепричастие от глагола несовершенного вида', '—', None], # fixme: aot ['109', 'Prdx', 'предк?', 'может выступать в роли предикатива', '—', None], # fixme: aot ['110', 'Coun', 'счетн', 'счётная форма', '—', None], ['111', 'Coll', 'собир', 'собирательное числительное', '—', None], ['112', 'V-sh', '*ши', 'деепричастие на -ши', '—', None], ['113', 'Af-p', '*предл', 'форма после предлога', '—', None], ['114', 'Inmx', 'неодуш?', 'может использоваться как неодушевлённое', '—', None], ['115', 'Vpre', 'в_предл', 'Вариант предлога ( со, подо, ...)', '—', None], ['116', 'Anph', 'Анаф', 'Анафорическое (местоимение)', '-', None], ['117', 'Init', 'иниц', 'Инициал', '-', None], ] INTERNAL_TO_EXTERNAL = dict((item[1], item[2]) for item in GRAM_TABLE) EXTERNAL_TO_INTERNAL = invert_mapping(INTERNAL_TO_EXTERNAL) EXTERNAL_TO_AOT = dict((item[2], item[5]) for item in GRAM_TABLE if item[5] is not None) def _translate_comma_separated(tag_part, mapping): return ",".join([mapping.get(tok, tok).strip() for tok in tag_part.split(',')]) def _translate_tag(tag, mapping): return " ".join([ _translate_comma_separated(part, mapping) for part in tag.split() ]) def external_to_internal(external_tag):
GENDERS = {"мр": "m", "жр": "f", "ср": "n", "мр-жр": ""} # FIXME: ? CASES = {"им": "nom", "рд": "gen", "дт": "dat", "вн": "acc", "тв": "ins", "пр": "loc", "зв": "voc"} NUMBERS = {"ед": "sg", "мн": "pl"} PERSONS = {"1л": "1p", "2л": "2p", "3л": "3p"} VOICES = {"дст": "act", "стр": "pass"} TENSES = {"нст": "pres", "прш": "past", "буд": "pres"} EXTRA = {"сравн": "comp", "прев": "supr", "пвл": "imper"} GRAMINFO_MAP = dict( itertools.chain( GENDERS.items(), CASES.items(), NUMBERS.items(), PERSONS.items(), TENSES.items(), VOICES.items(), EXTRA.items() ) ) GRAMINFO_MAP_INV = invert_mapping(GRAMINFO_MAP) def from_aot(aot_tag): pos, info = aot.split_tag(aot_tag) extra_info = set() if pos in ["ПРИЧАСТИЕ", "КР_ПРИЧАСТИЕ"]: extra_info.add("partcp") else: info.discard("дст") info.discard("стр") if pos == "ИНФИНИТИВ": extra_info.add("inf") elif pos == "ДЕЕПРИЧАСТИЕ": extra_info.add("ger")
None], # fixme: aot ['110', 'Coun', 'счетн', 'счётная форма', '—', None], ['111', 'Coll', 'собир', 'собирательное числительное', '—', None], ['112', 'V-sh', '*ши', 'деепричастие на -ши', '—', None], ['113', 'Af-p', '*предл', 'форма после предлога', '—', None], [ '114', 'Inmx', 'неодуш?', 'может использоваться как неодушевлённое', '—', None ], ['115', 'Vpre', 'в_предл', 'Вариант предлога ( со, подо, ...)', '—', None], ['116', 'Anph', 'Анаф', 'Анафорическое (местоимение)', '-', None], ['117', 'Init', 'иниц', 'Инициал', '-', None], ] INTERNAL_TO_EXTERNAL = dict((item[1], item[2]) for item in GRAM_TABLE) EXTERNAL_TO_INTERNAL = invert_mapping(INTERNAL_TO_EXTERNAL) EXTERNAL_TO_AOT = dict( (item[2], item[5]) for item in GRAM_TABLE if item[5] is not None) def _translate_comma_separated(tag_part, mapping): return ",".join( [mapping.get(tok, tok).strip() for tok in tag_part.split(',')]) def _translate_tag(tag, mapping): return " ".join( [_translate_comma_separated(part, mapping) for part in tag.split()])
'D': 'Н', 'R': 'ПРЕДЛ', 'RF': 'ФРАЗ', 'J': 'СОЮЗ', 'I': 'МЕЖД', 'T': 'ЧАСТ', 'Z': 'ЗНАК', # non-standard } TENSES = { 'нст': 'P', 'прш': 'R', 'буд': 'F', } TENSES_INV = invert_mapping(TENSES) CASES = { 'им': '1', 'рд': '2', 'дт': '3', 'вн': '4', 'тв': '7', 'пр': '6', } CASES_INV = invert_mapping(CASES) GENDERS = { 'мр': 'M', 'жр': 'F', 'ср': 'N',