I risultati che si stanno ottenendo sono (generalmente) previsti per uno stemmer in inglese. Dici di aver provato "tutti i metodi nltk" ma quando provo i tuoi esempi, non sembra essere il caso.
Ecco alcuni esempi che utilizzano il PorterStemmer
import nltk
ps = nltk.stemmer.PorterStemmer()
ps.stem('grows')
'grow'
ps.stem('leaves')
'leav'
ps.stem('fairly')
'fairli'
I risultati sono 'crescere', 'leav' e 'fairli', che, anche se sono quello che volevi, sono derivava versioni della parola originale.
Se passiamo allo stelo Snowball, dobbiamo fornire la lingua come parametro.
import nltk
sno = nltk.stem.SnowballStemmer('english')
sno.stem('grows')
'grow'
sno.stem('leaves')
'leav'
sno.stem('fairly')
'fair'
I risultati sono come prima per 'cresce' e 'foglie' pero 'abbastanza' è staccato a 'equo'
Quindi, in entrambi i casi (e ci sono più di due stemmer disponibile in NLTK) le parole che dici non sono stimate, infatti, lo sono. LancasterStemmer restituirà 'easy' se fornito con 'easy' o 'easy' come input.
Forse hai davvero voluto un lemmatizzatore? Ciò restituirebbe "articolo" e "barboncino" invariato.
import nltk
lemma = nltk..wordnet.WordNetLemmatizer()
lemma.lemmatize('article')
'article'
lemma..lemmatize('leaves')
'leaf'
questi risultati non sono strano dato 'stemming' è il procedimento per ridurre incurvati (o talvolta derivato) parole per loro stelo, base o radice forma generalmente una forma parola scritta. Per maggiori dettagli, controllare [qui] (http: //en.wikipedia.org/wiki/Stemming) – eliasah
btw NLTK è la migliore piattaforma per la creazione di programmi Python per lavorare con dati in linguaggio umano. – eliasah