예제 #1
0
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
예제 #2
0
파일: views.py 프로젝트: kmike/microcorpus
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
예제 #3
0
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
예제 #4
0
파일: views.py 프로젝트: kmike/microcorpus
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