Стемминг и лемматизация
Что такое стемминг?
Основание - это метод, используемый для извлечения основной формы слов путем удаления из них аффиксов. Это похоже на срезание ветвей дерева до стеблей. Например, основа словeating, eats, eaten является eat.
Поисковые системы используют стемминг для индексации слов. Вот почему вместо того, чтобы хранить все формы слова, поисковая система может хранить только основы. Таким образом, выделение уменьшает размер индекса и повышает точность поиска.
Различные алгоритмы стемминга
В НЛТК, stemmerI, который имеет stem()method, в интерфейсе есть все стеммеры, которые мы рассмотрим далее. Давайте разберемся с этим с помощью следующей диаграммы
Алгоритм определения портера
Это один из наиболее распространенных алгоритмов выделения корней, который в основном предназначен для удаления и замены хорошо известных суффиксов английских слов.
PorterStemmer класс
НЛТК имеет PorterStemmerкласс, с помощью которого мы можем легко реализовать алгоритмы Портера Стеммера для слова, которое мы хотим остановить. Этот класс знает несколько обычных словоформ и суффиксов, с помощью которых он может преобразовать входное слово в конечную основу. Результирующая основа часто представляет собой более короткое слово, имеющее то же значение корня. Давайте посмотрим на пример -
Во-первых, нам нужно импортировать инструментарий естественного языка (nltk).
import nltk
Теперь импортируйте PorterStemmer класс для реализации алгоритма Портера Стеммера.
from nltk.stem import PorterStemmer
Затем создайте экземпляр класса Porter Stemmer следующим образом:
word_stemmer = PorterStemmer()
Теперь введите слово, которое хотите остановить.
word_stemmer.stem('writing')
Вывод
'write'
word_stemmer.stem('eating')
Вывод
'eat'
Полный пример реализации
import nltk
from nltk.stem import PorterStemmer
word_stemmer = PorterStemmer()
word_stemmer.stem('writing')
Вывод
'write'
Алгоритм выноса Ланкастера
Он был разработан в Ланкастерском университете и представляет собой еще один очень распространенный алгоритм стемминга.
LancasterStemmer класс
НЛТК имеет LancasterStemmerкласс, с помощью которого мы можем легко реализовать алгоритмы Ланкастера Стеммера для слова, которое мы хотим остановить. Давайте посмотрим на пример -
Во-первых, нам нужно импортировать инструментарий естественного языка (nltk).
import nltk
Теперь импортируйте LancasterStemmer класс для реализации алгоритма Ланкастера Стеммера
from nltk.stem import LancasterStemmer
Затем создайте экземпляр LancasterStemmer класс следующим образом -
Lanc_stemmer = LancasterStemmer()
Теперь введите слово, которое хотите остановить.
Lanc_stemmer.stem('eats')
Вывод
'eat'
Полный пример реализации
import nltk
from nltk.stem import LancatserStemmer
Lanc_stemmer = LancasterStemmer()
Lanc_stemmer.stem('eats')
Вывод
'eat'
Алгоритм выделения регулярных выражений
С помощью этого алгоритма стемминга мы можем создать собственный стеммер.
RegexpStemmer класс
НЛТК имеет RegexpStemmerкласс, с помощью которого мы можем легко реализовать алгоритмы Стеммера регулярных выражений. Обычно он принимает одно регулярное выражение и удаляет любой префикс или суффикс, соответствующий выражению. Давайте посмотрим на пример -
Во-первых, нам нужно импортировать инструментарий естественного языка (nltk).
import nltk
Теперь импортируйте RegexpStemmer для реализации алгоритма Стеммера регулярных выражений.
from nltk.stem import RegexpStemmer
Затем создайте экземпляр RegexpStemmer class и предоставляет суффикс или префикс, который вы хотите удалить из слова, следующим образом:
Reg_stemmer = RegexpStemmer(‘ing’)
Теперь введите слово, которое хотите остановить.
Reg_stemmer.stem('eating')
Вывод
'eat'
Reg_stemmer.stem('ingeat')
Вывод
'eat'
Reg_stemmer.stem('eats')
Вывод
'eat'
Полный пример реализации
import nltk
from nltk.stem import RegexpStemmer
Reg_stemmer = RegexpStemmer()
Reg_stemmer.stem('ingeat')
Вывод
'eat'
Алгоритм удаления снежного кома
Это еще один очень полезный алгоритм стемминга.
SnowballStemmer класс
НЛТК имеет SnowballStemmerкласс, с помощью которого мы можем легко реализовать алгоритмы Snowball Stemmer. Он поддерживает 15 неанглийских языков. Чтобы использовать этот класс обработки паром, нам нужно создать экземпляр с именем языка, который мы используем, а затем вызвать метод stem (). Давайте посмотрим на пример -
Во-первых, нам нужно импортировать инструментарий естественного языка (nltk).
import nltk
Теперь импортируйте SnowballStemmer класс для реализации алгоритма Snowball Stemmer
from nltk.stem import SnowballStemmer
Давайте посмотрим, какие языки он поддерживает -
SnowballStemmer.languages
Вывод
(
'arabic',
'danish',
'dutch',
'english',
'finnish',
'french',
'german',
'hungarian',
'italian',
'norwegian',
'porter',
'portuguese',
'romanian',
'russian',
'spanish',
'swedish'
)
Затем создайте экземпляр класса SnowballStemmer с языком, который вы хотите использовать. Здесь мы создаем стеммер для «французского» языка.
French_stemmer = SnowballStemmer(‘french’)
Теперь вызовите метод stem () и введите слово, которое хотите остановить.
French_stemmer.stem (‘Bonjoura’)
Вывод
'bonjour'
Полный пример реализации
import nltk
from nltk.stem import SnowballStemmer
French_stemmer = SnowballStemmer(‘french’)
French_stemmer.stem (‘Bonjoura’)
Вывод
'bonjour'
Что такое лемматизация?
Техника лемматизации похожа на стемминг. Результат, который мы получим после лемматизации, называется «лемма», которая является корневым словом, а не корневым стержнем, результатом преобразования корня. После лемматизации мы получим допустимое слово, которое означает то же самое.
НЛТК предоставляет WordNetLemmatizer класс, который представляет собой тонкую оболочку вокруг wordnetкорпус. Этот класс используетmorphy() функция для WordNet CorpusReaderкласс, чтобы найти лемму. Давайте разберемся с этим на примере -
пример
Во-первых, нам нужно импортировать инструментарий естественного языка (nltk).
import nltk
Теперь импортируйте WordNetLemmatizer класс для реализации техники лемматизации.
from nltk.stem import WordNetLemmatizer
Затем создайте экземпляр WordNetLemmatizer класс.
lemmatizer = WordNetLemmatizer()
Теперь вызовите метод lemmatize () и введите слово, по которому вы хотите найти лемму.
lemmatizer.lemmatize('eating')
Вывод
'eating'
lemmatizer.lemmatize('books')
Вывод
'book'
Полный пример реализации
import nltk
from nltk.stem import WordNetLemmatizer
lemmatizer = WordNetLemmatizer()
lemmatizer.lemmatize('books')
Вывод
'book'
Разница между стеммингом и лемматизацией
Давайте поймем разницу между стеммингом и лемматизацией с помощью следующего примера -
import nltk
from nltk.stem import PorterStemmer
word_stemmer = PorterStemmer()
word_stemmer.stem('believes')
Вывод
believ
import nltk
from nltk.stem import WordNetLemmatizer
lemmatizer = WordNetLemmatizer()
lemmatizer.lemmatize(' believes ')
Вывод
believ
Результат обеих программ показывает основную разницу между стеммингом и лемматизацией. PorterStemmerкласс отрезает от слова «эс». С другой стороны,WordNetLemmatizerкласс находит допустимое слово. Проще говоря, техника стемминга смотрит только на форму слова, тогда как техника лемматизации смотрит на значение слова. Это означает, что после применения лемматизации мы всегда получим верное слово.