Стемминг и лемматизация в Python НЛТК с примерами
⚡ Умное резюме
Стемминг и лемматизация — это методы нормализации текста. Python NLTK, которые сводят вариации слов к общей основе, где стемминг быстро обрабатывает суффиксы без контекста, а лемматизация возвращает истинное словарное слово, используя его значение.

Что такое стемминг и лемматизация в Python НЛТК?
Стемминг и лемматизация in Python NLTK — это методы нормализации текста для обработки естественного языка. Эти методы широко используются для предварительной обработки текста. Разница между стеммингом и лемматизацией заключается в том, что стемминг быстрее, поскольку он отсекает слова, не зная контекста, в то время как лемматизация медленнее, поскольку контекст слов известен до начала обработки.
Что такое Стемминг?
Морфологический это метод нормализации слов в Обработка естественного языкаЭто метод, при котором набор слов в предложении преобразуется в последовательность для сокращения поиска. В этом методе слова, имеющие одинаковое значение, но с некоторыми вариациями в зависимости от контекста или предложения, нормализуются. Другими словами, существует одно корневое слово, но много вариантов этого слова. Например, корневое слово — «eat», а его варианты — «eats, eating, eaten и так далее». Аналогичным образом, с помощью стемминга в PythonТаким образом, мы можем найти корневое слово для любого варианта.
Например:
He was riding. He was taking the ride.
В приведенных выше двух предложениях смысл один и тот же: верховая езда в прошлом. Человек легко поймет, что оба значения одинаковы. Но для машин эти предложения разные. Поэтому их сложно преобразовать в одну и ту же строку данных. Если мы не предоставим один и тот же набор данных, машина не сможет сделать предсказание. Поэтому необходимо различать значения каждого слова, чтобы подготовить набор данных для машинного обучения. Здесь для классификации данных одного типа используется стемминг путем получения корневого слова.
Давайте реализуем это с помощью Python Программа. В NLTK есть алгоритм под названием ПортерЭтот алгоритм принимает список токенизированных слов и преобразует их в корневые слова.
Программа для понимания стемминга
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
Code Объяснение:
- В NLTK есть модуль STEM, который импортируется. Если импортировать весь модуль целиком, программа станет ресурсоемкой, так как будет содержать тысячи строк кода. Поэтому из всего модуля 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
Code Объяснение:
- Пакет PorterStemmer импортируется из модуля stem.
- Импортированы пакеты для токенизации предложений, а также отдельных слов.
- Написано предложение, которое должно быть токенизировано на следующем этапе.
- Здесь создается объект для PorterStemmer.
- Запускается цикл, и для каждого слова выполняется стемминг с использованием объекта, созданного в строке кода 5.
Вкратце, стемминг — это модуль предварительной обработки данных. В английском языке существует множество вариантов одного и того же слова, что создает неоднозначность при обучении и прогнозировании в машинном обучении. Для построения успешной модели крайне важно отфильтровать такие слова и привести их к единой последовательности данных с помощью стемминга. Это также известно как нормализация.
Что такое лемматизация?
лемматизации В NLTK лемматизация — это алгоритмический процесс поиска леммы слова в зависимости от его значения и контекста. Обычно под лемматизацией подразумевается морфологический анализ слов, целью которого является удаление словоизменительных окончаний. Она помогает получить базовую или словарную форму слова, известную как лемма. Метод лемматизации NLTK основан на встроенной функции морфинга WordNet. Предварительная обработка текста включает в себя как стемминг, так и лемматизацию. Многие люди путают эти два термина. Некоторые считают их одним и тем же, но между стеммингом и лемматизацией есть разница. Лемматизация предпочтительнее по следующей причине.
Почему лемматизация лучше стемминга?
Алгоритм стемминга работает путем удаления суффикса из слова. В более широком смысле, он удаляет либо начало, либо конец слова. Напротив, лемматизация — это более мощная операция, которая учитывает морфологический анализ слов. Она возвращает лемму, которая является базовой формой всех ее словоизменительных форм. Для создания словарей и поиска правильной формы слова требуются глубокие лингвистические знания. Стемминг — это общая операция, в то время как лемматизация — это интеллектуальная операция, в которой правильная форма ищется в словаре. Следовательно, лемматизация помогает формировать более правильные слова. машинного обучения или особенности.
Code различать лемматизацию и стемминг
Морфологический Code:
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
лемматизации Code:
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
Обсуждение результатов
Если сравнить стемминг слов studies и studying, результат будет одинаковым (studi), но лемматизатор NLTK предоставляет разные леммы для обоих токенов: study для studies и studying для studying. Поэтому, когда нам нужно создать набор признаков для обучения машины, было бы здорово, если бы предпочтение отдавалось лемматизации.
Вариант использования лемматизатора
Лемматизатор минимизирует неоднозначность текста. Слова типа bicycle или bicycles преобразуются в базовое слово bicycle. Он преобразует все слова с одинаковым значением, но разным представлением, в их базовую форму, уменьшая плотность слов и сложность.ping Подготовьте точные признаки для обучения машины. Чем чище данные, тем точнее будет ваша модель машинного обучения. Лемматизатор NLTK также экономит память и вычислительные ресурсы.
Пример в реальном времени, демонстрирующий использование лемматизации WordNet и разметки частей речи. 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)
Выход:
guru99 => guru99 is => be totally => totally new => new kind => kind of => of learning => learn experience => experience . => .
Code Объяснение:
- Импортируется программа для чтения корпусов WordNet, а из WordNet импортируется WordNetLemmatizer.
- Функции токенизации слов и тегирования частей речи импортируются из библиотеки nltk, а словарь по умолчанию — из коллекции.
- Создается словарь, где первая буква pos_tag является ключом, сопоставленным со значением из словаря WordNet.
- Текст написан и разложен на токены, а затем создан объект lemma_function для использования внутри цикла.
- Цикл выполняется, и функция lemmatize принимает два аргумента: токен и карту.ping значением pos_tag со значением wordnet.
Python Лемматизация тесно связана с Словарь WordNetПоэтому крайне важно изучить эту тему далее.
