def make_stemmer(stem=None, min_len=3):
    """Build a nltk.stem.StemmerI instance from regex, named stemmer ('Lancaster', 'Porter', None), or function

    Arguments:
      min (int): Dont stem anything short than this. e.g. for min=4 don't stem token "I'm" to "I"

    >>> make_stemmer()
    <Stemmer object at ...>
    >>> make_stemmer(str_lower)
    <function str_lower at ...>
    >>> make_stemmer('str_lower')
    <function str_lower at ...>
    >>> make_stemmer('Lancaster')
    <Stemmer object at ...>
    >>> make_stemmer('WordNet')
    <Stemmer object at ...>
    >>> make_stemmer('ing$|s$')
    <Stemmer object at ...>
    """
    if not stem or stem == 'passthrough':
        stem = Stemmer()
        # FIXME: this is unnecessary?! and will make the object less picklable?
        stem.stem = passthrough
        return stem
    if isinstance(stem, basestring):
        stem = globals().get(stem, None) or locals().get(stem, stem)
    # in case stem is a compiled stemmer regex, make it a string so it can be compiled by the nltk.RegexStemmer
    if hasattr(stem, 'pattern'):
        stem = Stemmer(nltk.stem.RegexpStemmer(stem, min=min_len))
    if isinstance(stem, basestring):
        # strip nonascii and whitespace, and only consider first letter, case-insentively
        name = stringify(stem).lower().strip() or 'porter'
        if name in STEMMER_TYPES:
            dataset = STEMMER_DATASETS.get(name, None)
            if dataset is not None:
                nltk_download(dataset)
            stem = STEMMER_TYPES.get(name, stem)
        else:
            stem = Stemmer(nltk.stem.RegexpStemmer(stem, min=min_len))
    if isinstance(stem, type):
        stem = stem()
    if (hasattr(stem, 'stem') and callable(stem.stem)) or (hasattr(stem, 'lemmatize') and callable(stem.lemmatize) or stem is True):
        return Stemmer(stem)
    elif callable(stem):
        return stem
    raise(ValueError("Unable to make {} into a stemmer. ".format(stem) +
                     "Try 'porter', 'lancaster', None, a regular expression, a callable function, " +
                     "or an object with a stem method."))
def make_stemmer ( stem = None , min_len = 3 ) : if not stem or stem == 'passthrough' : stem = Stemmer ( ) stem . stem = passthrough return stem if isinstance ( stem , basestring ) : stem = globals ( ) . get ( stem , None ) or locals ( ) . get ( stem , stem ) if hasattr ( stem , 'pattern' ) : stem = Stemmer ( nltk . stem . RegexpStemmer ( stem , min = min_len ) ) if isinstance ( stem , basestring ) : name = stringify ( stem ) . lower ( ) . strip ( ) or 'porter' if name in STEMMER_TYPES : dataset = STEMMER_DATASETS . get ( name , None ) if dataset is not None : nltk_download ( dataset ) stem = STEMMER_TYPES . get ( name , stem ) else : stem = Stemmer ( nltk . stem . RegexpStemmer ( stem , min = min_len ) ) if isinstance ( stem , type ) : stem = stem ( ) if ( hasattr ( stem , 'stem' ) and callable ( stem . stem ) ) or ( hasattr ( stem , 'lemmatize' ) and callable ( stem . lemmatize ) or stem is True ) : return Stemmer ( stem ) elif callable ( stem ) : return stem raise ( ValueError ( "Unable to make {} into a stemmer. " . format ( stem ) + "Try 'porter', 'lancaster', None, a regular expression, a callable function, " + "or an object with a stem method." ) )
Build a nltk.stem.StemmerI instance from regex, named stemmer ('Lancaster', 'Porter', None), or function

    Arguments:
      min (int): Dont stem anything short than this. e.g. for min=4 don't stem token "I'm" to "I"

    >>> make_stemmer()
    <Stemmer object at ...>
    >>> make_stemmer(str_lower)
    <function str_lower at ...>
    >>> make_stemmer('str_lower')
    <function str_lower at ...>
    >>> make_stemmer('Lancaster')
    <Stemmer object at ...>
    >>> make_stemmer('WordNet')
    <Stemmer object at ...>
    >>> make_stemmer('ing$|s$')
    <Stemmer object at ...>