def ismethoddescriptor(object):
    return (hasattr(object, "__get__")
            and not hasattr(object, "__set__") # else it's a data descriptor
            and not ismethod(object)           # mutual exclusion
            and not isfunction(object)
            and not isclass(object))
This is the word rank alignment algorithm described in the paper to produce
dataset/ETHPy150Open azoft-dev-team/imagrium/env/Lib/inspect.py/ismethoddescriptor--crossover with--dataset/ETHPy150Open nltk/nltk/nltk/translate/ribes_score.py/word_rank_alignment