Рубрики
Без рубрики

Stemming и лемматизация в Python

В области обработки натурального языка stemming и Lemmatization – это методы нормализации текста, используемые для приготовления текстов, документов для дальнейшего

Автор оригинала: Pankaj Kumar.

Stemming и лемматизация в Python

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

Понимание stemming и лемматизации

Работая с языковыми данными, нам нужно признать тот факт, что слова, такие как «уход» и «забота», имеют одинаковое значение, но используемое в разных формах времен. Здесь мы используем stemming и лемматизацию, чтобы уменьшить слово к его базовой форме.

В этой статье мы будем выполнять stemming и Lemmatization с использованием библиотеки NLTK и библиотеки SPAcy.

Что stemming?

Компьютерная программа или подпрограмма, которую произошло слово, можно назвать программой stemming, stemming алгоритмом или stemmer. ( Wikipedia )

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

NLTK предоставляет классы, чтобы выполнить stemming на словах. Наиболее широко используемые алгоритмы stemming – Porterstemmer , Snowballstemmer и т.п.

Создание stemmer с Porterstemmer

Давайте попробуем портрермермер для стеблевых слов.

#Importing required modules
from nltk.stem.porter import PorterStemmer

#Creating the class object
stemmer = PorterStemmer()

#words to stem
words = ['rain','raining','faith','faithful','are','is','care','caring']

#Stemming the words
for word in words:
    print(word+' -> '+ stemmer.stem(word))

Выход:

rain --> rain
raining --> rain
faith --> faith
faithful --> faith
are --> are
is --> is
care --> care
caring --> care

У класса Porterstemmer есть .stem Метод, который принимает слово в качестве входного аргумента и возвращает слово, уменьшается до его корневой формы.

Создание стеммера со снежным углом

Он также известен как алгоритм Porter2 stemming, поскольку он имеет тенденцию исправлять несколько недостатков в Porter stemmer. Давайте посмотрим, как его использовать.

#Importing the class
from nltk.stem.snowball import SnowballStemmer

#words to stem
words = ['rain','raining','faith','faithful','are','is','care','caring']

#Creating the Class object
snow_stemmer = SnowballStemmer(language='english')

#Stemming the words
for word in words:
    print(word+' -> '+snow_stemmer.stem(word))

Выход:

rain --> rain
raining --> rain
faith --> faith
faithful --> faith
are --> are
is --> is
care --> care
caring --> care

Выходы с обеих stemmer выглядят аналогичны, потому что мы использовали ограниченный текстовый корпус для демонстрации. Не стесняйтесь экспериментировать с разными словами и сравнить результаты двух.

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

Лемматизация – это алгоритмический процесс нахождения леммы слова – это означает, что в отличие от stemming, что может привести к неправильному снижению слова, лемматизация всегда уменьшает слово в зависимости от его значения.

Это помогает в возвращении основания или словарной формы слова, которое известно как лемма.

При первом stemming и лемматизации могут выглядеть одинаково, но они на самом деле очень отличаются в следующем разделе, мы увидим разницу между ними.

Теперь давайте посмотрим, как выполнить лемматизацию на текстовых данных.

Создание лемматизатора с Python Spacy

Примечание: Python -M Spacy Скачать EN_CORE_WEB_SM

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

#Importing required modules
import spacy

#Loading the Lemmatization dictionary
nlp = spacy.load('en_core_web_sm')

#Applying lemmatization
doc = nlp("Apples and oranges are similar. Boots and hippos aren't.")

#Getting the output
for token in doc:
    print(str(token) + ' --> '+ str(token.lemma_))

Выход:

Apples --> apple
and --> and
oranges --> orange
are --> be
similar --> similar
. --> .
Boots --> boot
and --> and
hippos --> hippos
are --> be
n't --> not
. --> .

Приведенный выше код возвращает итератор Spacy.doc Тип объекта, который является лемматизированной формой входных слов. Мы можем получить доступ к лемматизированному слову, используя .LEMMA_ атрибут.

Посмотрите, как он автоматически тоненяет предложение для нас.

Создание лемматизатора с Python NLTK

NLTK использует WordNet. Метод NLTK Lemmatization основан на встроенной морской функции Worldnet.

Давайте посмотрим, как его использовать.

import nltk
nltk.download('wordnet') #First download the required data
#Importing the module
from nltk.stem import WordNetLemmatizer 

#Create the class object
lemmatizer = WordNetLemmatizer()


# Define the sentence to be lemmatized
sentence = "Apples and oranges are similar. Boots and hippos aren't."

# Tokenize the sentence
word_list = nltk.word_tokenize(sentence)
print(word_list)


# Lemmatize list of words and join
lemmatized_output = ' '.join([lemmatizer.lemmatize(w) for w in word_list])
print(lemmatized_output)

Выход:

['Apples', 'and', 'oranges', 'are', 'similar', '.', 'Boots', 'and', 'hippos', 'are', "n't", '.']
Apples and orange are similar . Boots and hippo are n't .

Лемматизация против stemming

Я понимаю. Сначала он может быть запутанным на выбирать между stemming и лемматизацией, но лемматизация, безусловно, более эффективна, чем stemming.

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

Stemming против лемматизации? Это вопрос компромисса между скоростью и деталями. Stemming обычно быстрее, чем лемматизация, но он может быть неточности. Принимая во внимание, что если нам нужна наша модель, чтобы быть как можно более подробной и как можно точнее, то лемматизация должна быть предпочтительной.

Заключение

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

Мы также сравниваем лемматизацию с stemming, чтобы расслабиться различиями между оба процессами. Счастливое обучение! 🙂.