В области обработки естественного языка мы сталкиваемся с ситуацией, когда два или более слова имеют общий корень. Например, три слова — «согласен», «согласен» и «согласен» имеют одно и то же корневое слово «согласен». Поиск, включающий любое из этих слов, должен рассматривать их как то же самое слово, которое является корневым словом. Таким образом, становится необходимым связать все слова в свое корневое слово. В библиотеке NLTK есть методы для выполнения этой связи и выдачи вывода, показывающего корневое слово.
В nltk есть три наиболее часто используемых алгоритма Они дают немного другой результат. В приведенном ниже примере показано использование всех трех алгоритмов stemming и их результат.
import nltk from nltk.stem.porter import PorterStemmer from nltk.stem.lancaster import LancasterStemmer from nltk.stem import SnowballStemmer porter_stemmer = PorterStemmer() lanca_stemmer = LancasterStemmer() sb_stemmer = SnowballStemmer("english",) word_data = "Aging head of famous crime family decides to transfer his position to one of his subalterns" # First Word tokenization nltk_tokens = nltk.word_tokenize(word_data) #Next find the roots of the word print '***PorterStemmer****\n' for w_port in nltk_tokens: print "Actual: %s || Stem: %s" % (w_port,porter_stemmer.stem(w_port)) print '\n***LancasterStemmer****\n' for w_lanca in nltk_tokens: print "Actual: %s || Stem: %s" % (w_lanca,lanca_stemmer.stem(w_lanca)) print '\n***SnowballStemmer****\n' for w_snow in nltk_tokens: print "Actual: %s || Stem: %s" % (w_snow,sb_stemmer.stem(w_snow))
Когда мы запускаем вышеуказанную программу, мы получаем следующий вывод: