Учебники

Python — Алгоритмы стемминга

В области обработки естественного языка мы сталкиваемся с ситуацией, когда два или более слова имеют общий корень. Например, три слова — «согласен», «согласен» и «согласен» имеют одно и то же корневое слово «согласен». Поиск, включающий любое из этих слов, должен рассматривать их как то же самое слово, которое является корневым словом. Таким образом, становится необходимым связать все слова в свое корневое слово. В библиотеке 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))   

Когда мы запускаем вышеуказанную программу, мы получаем следующий вывод: