Uzyskiwane wyniki są (ogólnie) spodziewane w przypadku łodyg w języku angielskim. Mówisz, że próbowałeś "wszystkich metod nltk", ale kiedy próbuję twoich przykładów, nie wydaje się, żeby tak było.
Oto kilka przykładów z wykorzystaniem PorterStemmer
import nltk
ps = nltk.stemmer.PorterStemmer()
ps.stem('grows')
'grow'
ps.stem('leaves')
'leav'
ps.stem('fairly')
'fairli'
Wyniki są „rośnie”, „leav” oraz „fairli”, która, nawet jeśli są to, czego chciał, są wynikała wersje oryginalnego wyrazu.
Po przejściu na szalkę śnieżki musimy podać język jako parametr.
import nltk
sno = nltk.stem.SnowballStemmer('english')
sno.stem('grows')
'grow'
sno.stem('leaves')
'leav'
sno.stem('fairly')
'fair'
Wyniki są jak wcześniej dla „rośnie” i „liście”, ale „dość” jest łodygach do „fair”
Tak więc w obu przypadkach (a jest ich więcej niż dwa stemmery dostępny w NLTK) słowa, które, jak mówisz, nie są wywodzone, w rzeczywistości są. LancasterStemmer zwróci "łatwe", gdy otrzyma "łatwo" lub "łatwo" jako dane wejściowe.
Może naprawdę chciałeś lematyzatora? To przywróci "artykuł" i "pudel" w niezmienionej postaci.
import nltk
lemma = nltk..wordnet.WordNetLemmatizer()
lemma.lemmatize('article')
'article'
lemma..lemmatize('leaves')
'leaf'
wyniki te nie są dziwne, ponieważ 'stemming' to proces zmniejszania odmieniane (lub czasami pochodzą) słów do ich macierzystych, zasady lub korzenia form-ogólnie pisemnej formie tekstu. Aby uzyskać więcej informacji, sprawdź [tutaj] (http: //en.wikipedia.org/wiki/Stemming) – eliasah
btw NLTK jest najlepszą platformą do budowania programów w języku Python do pracy z danymi w języku ludzkim. – eliasah