[Stove AI] Машинное обучение 035-NLP Stemming
(Библиотеки Python и номера версий, используемые в этой статье: Python 3.6, Numpy 1.14, scikit-learn 0.19, matplotlib 2.2, NLTK 3.3)
В английском часто бывает много словоизменений слов.Помню,когда преподаватели английского языка читали лекции,они говорили о словоизменениях глаголов.Есть прошедшее время,будущее время,настоящее продолженное время и т.д.В разных случаях глаголы нужно менять в соответствующие формы.При обращении к существительным также упоминаются понятия единственного и множественного числа.Для исчисляемых существительных прибавлять s в конце слова и т.д. Так как же НЛП обрабатывает эти искаженные слова? Один из методов – извлечь основы этих слов, так называемое «все неотделимо от секты».
В этой статье объясняется, как использовать НЛП для извлечения основ слов и захвата «зонг» этих слов.
1. Основы НЛП
Цель извлечения основы состоит в том, чтобы превратить слова различной морфологии в их первоначальные формы.Стемминг использует методы эвристической обработки для перехвата хвоста слов для извлечения исходной формы слов.
НЛП в основном имеет такой метод определения основы: алгоритм определения основы на основе Портера, алгоритм определения основы на основе Ланкастера и алгоритм определения основы на основе Снежного кома. Следующие методы используются для извлечения основ различных слов.
words = ['table', 'probably', 'wolves', 'playing', 'is',
'dog', 'the', 'beaches', 'grounded', 'dreamt', 'envision']
# 要提取的单词
# 三种不同的词干提取器
stemmers = ['PORTER', 'LANCASTER', 'SNOWBALL']
stemmer_porter = PorterStemmer()
stemmer_lancaster = LancasterStemmer()
stemmer_snowball = SnowballStemmer('english')
formatted_row = '{:>16}' * (len(stemmers) + 1)
print(formatted_row.format('WORD',*stemmers)) # 打印表头
for word in words: # 每个单词逐一提取
stem=[stemmer_porter.stem(word),
stemmer_lancaster.stem(word), stemmer_snowball.stem(word)]
print(formatted_row.format(word,*stem)) # 对提取后的stem进行拆包
-------------------------- потерять --------- выход ------
WORD PORTER LANCASTER SNOWBALL
table tabl tabl tabl
probably probabl prob probabl
wolves wolv wolv wolv
playing play play play
is is is is
dog dog dog dog
the the the the
beaches beach beach beach
grounded ground ground ground
dreamt dreamt dreamt dreamt
envision envis envid envis
----------------------Заканчивать--------------------------- -
########################резюме########################## ######
Видно, что все алгоритмы выделения корней могут извлекать основы, но результаты извлечения различаются. Это в основном связано с тем, что строгость извлечения трех алгоритмов различна. При простом сравнении у Ланкастера самое строгое извлечение, а у Портера самое свободное извлечение. . Поэтому стебли, полученные Ланкастером, часто расплывчаты и трудны для понимания, но скорость его извлечения очень высока. Обычно выбирают стеммер Snowball.
#################################################################
Примечание. Эта часть кода была загружена в (мой гитхаб), добро пожаловать на скачивание.
Использованная литература:
1. Классические примеры машинного обучения Python, Пратик Джоши, перевод Тао Цзюньцзе и Чена Сяоли.