[Stove AI] Машинное обучение 035-NLP Stemming

машинное обучение искусственный интеллект алгоритм NLP

[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, Пратик Джоши, перевод Тао Цзюньцзе и Чена Сяоли.