Example #1
0
def equals_cross_reference(sense):
    xr = sense.equals_crossreference()
    target_senses, sense_count = tdb.cross_reference_target(lemma=xr.lemma,
        refentry=xr.refentry, refid=xr.refid, wordclass=sense.wordclass)

    if target_senses:
        hiscores = [t for t in target_senses
            if t.rating() == target_senses[0].rating()]
        hiscores.sort(key=lambda i: i.node_size(), reverse=True)
        if hiscores[0].thesclass is not None:
            match = hiscores[0].thesclass
            match.reason_text = 'Equivalent to %s' % hiscores[0].lemma
            match.reason_code = 'eqxr'
            return match
    return None
Example #2
0
def cf_cross_reference(sense):
    """
    If the current sense has 'cf'-type cross-reference, the classification
    of the target sense is taken as a good guide to the classification
    of the current sense.

    If the target sense and the current sense are in the same wordclass and
    have the same end word-ending, we assume that the current sense should
    go in the target sense's class (similar to how 'equals'-type xrefs are
    treated.

    Otherwise, we put the current sense at the top of the equivalent
    wordclass-level branch.
    """
    xr = sense.cf_crossreference()
    # Nb don't specify a wordclass here, since the target wordclass may well
    #  be different from the current sense's wordclass
    target_senses, sense_count = tdb.cross_reference_target(lemma=xr.lemma,
        refentry=xr.refentry, refid=xr.refid)

    # Don't attempt if the target is too ambiguous (too many possible senses)
    if target_senses and sense_count <= 3:
        high_scores = [t for t in target_senses
            if t.rating() == target_senses[0].rating()]
        high_scores.sort(key=lambda i: i.node_size(), reverse=True)
        if high_scores[0].thesclass is not None:
            target = high_scores[0]
            if (target.wordclass == sense.wordclass and
                target.lemma[-2:] == sense.lemma[-2:]):
                match = target.thesclass
            elif target.wordclass == sense.wordclass:
                match = target.wordclass_parent()
            else:
                match = tdb.equivalent_class(target.thesclass, sense.wordclass)
            if match is not None:
                match.reason_text = 'Analogy with target of cf-type xref ("%s")' % target.lemma
                match.reason_code = 'cfxr'
            return match

    return None