Kết quả bạn nhận được (thường) được mong đợi đối với người gửi bằng tiếng Anh. Bạn nói rằng bạn đã thử "tất cả các phương pháp nltk" nhưng khi tôi thử các ví dụ của bạn, điều đó dường như không đúng.
Dưới đây là một số ví dụ sử dụng PorterStemmer
import nltk
ps = nltk.stemmer.PorterStemmer()
ps.stem('grows')
'grow'
ps.stem('leaves')
'leav'
ps.stem('fairly')
'fairli'
Kết quả là 'phát triển', 'leav' và 'fairli' mà, ngay cả khi họ là những gì bạn muốn, được bắt nguồn phiên bản của từ gốc.
Nếu chúng ta chuyển sang trình tạo quả cầu tuyết, chúng ta phải cung cấp ngôn ngữ làm tham số.
import nltk
sno = nltk.stem.SnowballStemmer('english')
sno.stem('grows')
'grow'
sno.stem('leaves')
'leav'
sno.stem('fairly')
'fair'
Kết quả như trước khi cho 'mọc' và 'lá' nhưng 'khá' được bắt nguồn để 'công bằng'
Vì vậy, trong cả hai trường hợp (và có hơn hai stemmers sẵn trong NLTK) , những từ mà bạn nói không phải là bắt nguồn, thực tế là vậy. Các LancasterStemmer sẽ trở lại 'dễ dàng' khi được cung cấp với 'dễ dàng' hoặc 'dễ dàng' như đầu vào.
Có thể bạn thực sự muốn có một kẻ ngộ độc? Điều đó sẽ trả về 'article' và 'poodle' không thay đổi.
import nltk
lemma = nltk..wordnet.WordNetLemmatizer()
lemma.lemmatize('article')
'article'
lemma..lemmatize('leaves')
'leaf'
các kết quả này không lạ vì 'bắt nguồn 'là quá trình giảm từ gốc, gốc hoặc gốc - nói chung là dạng chữ viết. Để biết thêm chi tiết, hãy xem [tại đây] (http: //en.wikipedia.org/wiki/Stemming) – eliasah
btw NLTK là nền tảng tốt nhất để xây dựng các chương trình Python để làm việc với dữ liệu ngôn ngữ của con người. – eliasah