Стемминг и лемматизация в Python NLTK с примерами

Что такое стемминг и лемматизация в Python NLTK?

Стемминг и лемматизация в Python NLTK — это методы нормализации текста для обработки естественного языка. Эти методы широко используются для предварительной обработки текста. Разница между стеммингом и лемматизацией заключается в том, что стемминг происходит быстрее, поскольку он режет слова без знания.wing контекст, тогда как лемматизация выполняется медленнее, поскольку перед обработкой известен контекст слов.

Что такое Стемминг?

Морфологический это метод нормализации слов в Обработка естественного языка. Это метод, при котором набор слов в предложении преобразуется в последовательность, чтобы сократить поиск. В этом методе нормализуются слова, имеющие одинаковое значение, но имеющие некоторые вариации в зависимости от контекста или предложения.

Другими словами, корень одного слова, но существует множество вариаций одного и того же слова. Например, корневое слово — «есть», а его варианты — «ест, ест, ест и тому подобное». Таким же образом с помощью Стемминга в Питон, мы можем найти корень слова в любых вариациях.

Например

He was riding.	
He was taking the ride.

В двух приведенных выше предложениях смысл один и тот же: верховая езда в прошлом. Человек легко может понять, что оба значения одинаковы. Но для машин оба предложения разные. Таким образом, стало сложно преобразовать его в ту же строку данных. Если мы не предоставим тот же набор данных, машина не сможет предсказать. Поэтому необходимо дифференцировать значение каждого слова, чтобы подготовить набор данных для машинного обучения. И здесь стемминг используется для категоризации одного и того же типа данных путем получения его корневого слова.

Давайте реализуем это с помощью программы Python. В NLTK есть алгоритм под названием «PorterStemmer». Этот алгоритм принимает список токенизированных слов и объединяет его в корневое слово.

Программа для понимания стемминга

from nltk.stem import PorterStemmer
e_words= ["wait", "waiting", "waited", "waits"]
ps =PorterStemmer()
for w in e_words:
    rootWord=ps.stem(w)
    print(rootWord)

Результат:

wait	
wait	
wait	
wait 

Программа для понимания стемминга

Пояснение к коду:

  • В NLTk есть модуль Stem, который импортируется. Если вы импортируете модуль целиком, программа станет тяжелой, поскольку будет содержать тысячи строк кода. Таким образом, из всего модуля стебля мы импортировали только «PorterStemmer».
  • Мы подготовили фиктивный список данных вариаций одного и того же слова.
  • Создается объект, принадлежащий классу nltk.stem.porter.PorterStemmer.
  • Далее мы передавали его в PorterStemmer один за другим с помощью цикла for. Наконец, мы получили выходное корневое слово каждого слова, упомянутого в списке.

Из приведенного выше объяснения можно также сделать вывод, что стемминг считается важным этапом предварительной обработки, поскольку он устраняет избыточность данных и вариации в одном и том же слове. В результате данные фильтруются, что помогает улучшить обучение машин.

Теперь мы передаем полное предложение и проверяем его поведение на выходе.

Программа:

from nltk.stem import PorterStemmer
from nltk.tokenize import sent_tokenize, word_tokenize
sentence="Hello Guru99, You have to build a very good site and I love visiting your site."
words = word_tokenize(sentence)
ps = PorterStemmer()
for w in words:
	rootWord=ps.stem(w)
	print(rootWord)

Вывод:

hello	
guru99	
,	
you	
have	
build	
a	
veri	
good	
site	
and	
I	
love	
visit	
your	
site	 

Программа для понимания стемминга

Пояснение к коду:

  • Пакет PorterStemer импортируется из основы модуля.
  • Импортируются пакеты для токенизации предложений, а также слов.
  • Написано предложение, которое должно быть токенизировано на следующем этапе.
  • На этом этапе реализуется токенизация слов, связанная с лемматизацией.
  • Здесь создается объект для PorterStemmer.
  • Запускается цикл, и каждое слово выполняется с использованием объекта, созданного в строке кода 5.

Вывод:

Stemming — это модуль предварительной обработки данных. В английском языке существует множество вариантов одного и того же слова. Эти различия создают неоднозначность в обучении и прогнозировании машинного обучения. Чтобы создать успешную модель, крайне важно фильтровать такие слова и преобразовывать их в однотипные секвенированные данные с помощью стемминга. Кроме того, это важный метод получения данных строк из набора предложений и удаления избыточных данных, также известный как нормализация.

Что такое лемматизация?

лемматизации в НЛТК — это алгоритмический процесс нахождения леммы слова в зависимости от его значения и контекста. Лемматизация обычно относится к морфологическому анализу слов, целью которого является удаление флективных окончаний. Это помогает вернуть базовую или словарную форму слова, известного как лемма.

Метод лемматизации NLTK основан на встроенной функции морфинга WorldNet. Предварительная обработка текста включает в себя как стемминг, так и лемматизацию. Многие люди находят эти два термина запутанными. Некоторые считают это одним и тем же, но есть разница между стеммингом и лемматизацией. Лемматизация предпочтительнее первой по следующей причине.

Почему лемматизация лучше стемминга?

Алгоритм стемминга работает путем вырезания суффикса из слова. В более широком смысле обрезает либо начало, либо конец слова.

Напротив, лемматизация — более мощная операция, учитывающая морфологический анализ слов. Он возвращает лемму, которая является базовой формой всех ее флективных форм. Для создания словарей и поиска правильной формы слова необходимы глубокие лингвистические знания. Стемминг — это общая операция, а лемматизация — интеллектуальная операция, при которой правильная форма будет искаться в словаре. Следовательно, лемматизация помогает лучше формировать обучение с помощью машины особенности.

Код, позволяющий различать лемматизацию и стемминг

Код стемминга:

import nltk
from nltk.stem.porter import PorterStemmer
porter_stemmer  = PorterStemmer()
text = "studies studying cries cry"
tokenization = nltk.word_tokenize(text)
for w in tokenization:
print("Stemming for {} is {}".format(w,porter_stemmer.stem(w)))  

Вывод::

Stemming for studies is studi
Stemming for studying is studi
Stemming for cries is cri
Stemming for cry is cri

Код лемматизации:

import nltk
	from nltk.stem import 	WordNetLemmatizer
	wordnet_lemmatizer = WordNetLemmatizer()
	text = "studies studying cries cry"
	tokenization = nltk.word_tokenize(text)
	 for w in tokenization:
		print("Lemma for {} is {}".format(w, wordnet_lemmatizer.lemmatize(w)))  

Вывод:

Lemma for studies is study
Lemma for studying is studying
Lemma for cries is cry
Lemma for cry is cry

Обсуждение результатов

Если вы посмотрите на учебу и учебу, результат будет одинаковым (изучение), но лемматизатор NLTK предоставляет разные леммы как для токенов «учеба для учебы», так и для «учеба для учебы». Поэтому, когда нам нужно создать набор функций для обучения машины, было бы здорово, если бы предпочтительна лемматизация.

Вариант использования лемматизатора

Лемматизатор минимизирует двусмысленность текста. Примеры таких слов, как велосипед или велосипеды, преобразуются в базовое слово велосипед. По сути, он преобразует все слова, имеющие одинаковое значение, но разное представление, в их базовую форму. Это уменьшает плотность слов в данном тексте и помогает подготовить точные характеристики для обучающей машины. Чем чище данные, тем умнее и точнее будет ваша модель машинного обучения. NLTK Lemmatizer также сэкономит память и вычислительные затраты.

Пример реального времениwing использование лемматизации Wordnet и тегов POS в Python

from nltk.corpus import wordnet as wn
	from nltk.stem.wordnet import WordNetLemmatizer
	from nltk import word_tokenize, pos_tag
	from collections import defaultdict
	tag_map = defaultdict(lambda : wn.NOUN)
	tag_map['J'] = wn.ADJ
	tag_map['V'] = wn.VERB
	tag_map['R'] = wn.ADV

	text = "guru99 is a totally new kind of learning experience."
	tokens = word_tokenize(text)
	lemma_function = WordNetLemmatizer()
	for token, tag in pos_tag(tokens):
		lemma = lemma_function.lemmatize(token, tag_map[tag[0]])
		print(token, "=>", lemma)

Вариант использования лемматизатора

Код Пояснение

  • Во-первых, импортируется Wordnet для чтения корпуса.
  • WordNetLemmatizer импортируется из wordnet.
  • Токенизация слова, а также части речевого тега импортируются из nltk.
  • Словарь по умолчанию импортируется из коллекций.
  • Создается словарь, где pos_tag (первая буква) — это значения ключей, значения которых сопоставляются со значением из словаря Wordnet. Мы взяли единственную первую букву, так как будем ее использовать. later в петле.
  • Текст записывается и токенизируется.
  • Создается объект lemma_function, который будет использоваться внутри цикла.
  • Запускается цикл, и lemmatize принимает два аргумента: один — токен, а другой — сопоставление pos_tag со значением wordnet.

Результат:

guru99 => guru99				
is => be				
totally => totally				
new => new				
kind => kind				
of => of				
learning => learn				
experience => experience				
. => .				 

Лемматизация Python тесно связана с словарь WordNet, поэтому очень важно изучить эту тему, поэтому мы оставим ее следующей темой.