def _token_info_dict(idx, token_info): """ Return a dict with token information. This dict is then used in templates to render the token row. """ ambig_grammemes = token_info.grammeme_classes[ParseInfo.AMBIG] all_grammemes = set() for gr in token_info.grammeme_classes.values(): all_grammemes |= gr help_links = _help_links(token_info.token, ambig_grammemes, all_grammemes) res = { 'index': idx, 'token': token_info.token, 'same_normal_forms': token_info.all_normal_forms_are_equal(), 'tags': [ ( p.normal_form, morph.lat2cyr(p.tag), token_info.tag_probability(p.tag), p.tag, CSS_SUFFIXES[p.state], ) for p in token_info.parses ], 'grammemes': { cls: sorted([morph.lat2cyr(g) for g in gr], key=_grammemes_sort_key) for cls, gr in token_info.grammeme_classes.items() }, 'tag_is_predicted': token_info.tag_is_predicted(), 'help_links': help_links, } return res
def _help_links(token, ambig_grammemes, all_grammemes): res = {} wiktionary_grammemes = { 'ADVB', 'NPRO', 'CONJ', 'PRCL', 'PREP', 'INTJ', 'PRED', 'Apro' } if all_grammemes & wiktionary_grammemes: res['вики'] = 'http://ru.wiktionary.org/wiki/%s' % token.lower() opencorpora_instructions = [ # Снятие неоднозначности между союзами, частицами и наречиями (set(), {'PRCL', 'ADVB'}, 'http://opencorpora.org/manual.php?pool_type=48'), # Снятие неоднозначности между наречием и кратким прилагательным (set(), {'ADVB', 'ADJS'}, 'http://opencorpora.org/manual.php?pool_type=52'), # Снятие неоднозначности между полным прилагательным и местоимением-существительным (set(), {'ADJF', 'Apro', 'NPRO'}, 'http://opencorpora.org/manual.php?pool_type=40'), # Снятие неоднозначности между союзами, междометиями и частицами (set(), {'CONJ', 'INTJ'}, 'http://opencorpora.org/manual.php?pool_type=41'), (set(), {'CONJ', 'PRCL'}, 'http://opencorpora.org/manual.php?pool_type=41'), # Снятие неоднозначности между именительным и винительным падежами у существительных ({'NOUN'}, {'nomn', 'accs'}, 'http://opencorpora.org/manual.php?pool_type=7'), # Снятие неоднозначности между родительным и винительным падежом у существительных ({'NOUN'}, {'gent', 'accs'}, 'http://opencorpora.org/manual.php?pool_type=6'), # Снятие неоднозначности между падежами у прилагательных и причастий единственного числа ({'ADJF'}, {'sing'}, 'http://opencorpora.org/manual.php?pool_type=7'), ({'PRTF'}, {'sing'}, 'http://opencorpora.org/manual.php?pool_type=7'), # Прилагательные / причастия (set(), {'ADJF', 'PRTF'}, 'http://www.opencorpora.org/wiki/%D0%98%D0%BD%D1%81%D1%82%D1%80%D1%83%D0%BA%D1%86%D0%B8%D1%8F_ADJF_PRTF' ), # Существительные/прилагательные (фамилии) ({'Surn'}, {'ADJF', 'NOUN'}, 'http://www.opencorpora.org/wiki/%D0%98%D0%BD%D1%81%D1%82%D1%80%D1%83%D0%BA%D1%86%D0%B8%D1%8F_ADJF_NOUN_%28%D1%84%D0%B0%D0%BC%D0%B8%D0%BB%D0%B8%D1%8F%29' ), ] for required, ambig, link in opencorpora_instructions: if (not required or required & all_grammemes) and ambig <= ambig_grammemes: name = "/".join(morph.lat2cyr(g) for g in ambig) if required: condition = ','.join(morph.lat2cyr(g) for g in required) name = "%s:%s" % (condition, name) res[name] = link return res
def _help_links(token, ambig_grammemes, all_grammemes): res = {} wiktionary_grammemes = {'ADVB', 'NPRO', 'CONJ', 'PRCL', 'PREP', 'INTJ', 'PRED', 'Apro'} if all_grammemes & wiktionary_grammemes: res['вики'] = 'http://ru.wiktionary.org/wiki/%s' % token.lower() opencorpora_instructions = [ # Снятие неоднозначности между союзами, частицами и наречиями (set(), {'PRCL', 'ADVB'}, 'http://opencorpora.org/manual.php?pool_type=48'), # Снятие неоднозначности между наречием и кратким прилагательным (set(), {'ADVB', 'ADJS'}, 'http://opencorpora.org/manual.php?pool_type=52'), # Снятие неоднозначности между полным прилагательным и местоимением-существительным (set(), {'ADJF', 'Apro', 'NPRO'}, 'http://opencorpora.org/manual.php?pool_type=40'), # Снятие неоднозначности между союзами, междометиями и частицами (set(), {'CONJ', 'INTJ'}, 'http://opencorpora.org/manual.php?pool_type=41'), (set(), {'CONJ', 'PRCL'}, 'http://opencorpora.org/manual.php?pool_type=41'), # Снятие неоднозначности между именительным и винительным падежами у существительных ({'NOUN'}, {'nomn', 'accs'}, 'http://opencorpora.org/manual.php?pool_type=7'), # Снятие неоднозначности между родительным и винительным падежом у существительных ({'NOUN'}, {'gent', 'accs'}, 'http://opencorpora.org/manual.php?pool_type=6'), # Снятие неоднозначности между падежами у прилагательных и причастий единственного числа ({'ADJF'}, {'sing'}, 'http://opencorpora.org/manual.php?pool_type=7'), ({'PRTF'}, {'sing'}, 'http://opencorpora.org/manual.php?pool_type=7'), # Прилагательные / причастия (set(), {'ADJF', 'PRTF'}, 'http://www.opencorpora.org/wiki/%D0%98%D0%BD%D1%81%D1%82%D1%80%D1%83%D0%BA%D1%86%D0%B8%D1%8F_ADJF_PRTF'), # Существительные/прилагательные (фамилии) ({'Surn'}, {'ADJF', 'NOUN'}, 'http://www.opencorpora.org/wiki/%D0%98%D0%BD%D1%81%D1%82%D1%80%D1%83%D0%BA%D1%86%D0%B8%D1%8F_ADJF_NOUN_%28%D1%84%D0%B0%D0%BC%D0%B8%D0%BB%D0%B8%D1%8F%29'), ] for required, ambig, link in opencorpora_instructions: if (not required or required & all_grammemes) and ambig <= ambig_grammemes: name = "/".join(morph.lat2cyr(g) for g in ambig) if required: condition = ','.join(morph.lat2cyr(g) for g in required) name = "%s:%s" % (condition, name) res[name] = link return res
def _token_info_dict(idx, token_info): """ Return a dict with token information. This dict is then used in templates to render the token row. """ ambig_grammemes = token_info.grammeme_classes[ParseInfo.AMBIG] all_grammemes = set() for gr in token_info.grammeme_classes.values(): all_grammemes |= gr help_links = _help_links(token_info.token, ambig_grammemes, all_grammemes) res = { 'index': idx, 'token': token_info.token, 'same_normal_forms': token_info.all_normal_forms_are_equal(), 'tags': [( p.normal_form, morph.lat2cyr(p.tag), token_info.tag_probability(p.tag), p.tag, CSS_SUFFIXES[p.state], ) for p in token_info.parses], 'grammemes': { cls: sorted([morph.lat2cyr(g) for g in gr], key=_grammemes_sort_key) for cls, gr in token_info.grammeme_classes.items() }, 'tag_is_predicted': token_info.tag_is_predicted(), 'help_links': help_links, } return res