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

В какво се състои стеминирането и лематизацията Python NLTK?

Стимулиране и лематизация in Python NLTK са техники за нормализиране на текст за обработка на естествен език. Тези техники се използват широко за предварителна обработка на текст. Разликата между корена и лематизацията е, че коренът е по-бърз, тъй като изрязва думите, без да знае контекста, докато лематизацията е по-бавна, тъй като познава контекста на думите преди обработката.

Какво е Stemming?

Изхождайки е метод за нормализиране на думите в Natural Language Processing. Това е техника, при която набор от думи в изречение се преобразува в последователност, за да се съкрати търсенето. При този метод се нормализират думите с еднакво значение, но с някои вариации според контекста или изречението.

С друга дума, има една коренна дума, но има много вариации на едни и същи думи. Например, коренът на думата е „яж“, а нейните варианти са „яде, яде, яде и така“. По същия начин, с помощта на Stemming in Python, можем да намерим корена на всяка вариация.

Например

He was riding.	
He was taking the ride.

В горните две изречения значението е едно и също, т.е. дейност по езда в миналото. Човек може лесно да разбере, че и двете значения са еднакви. Но за машините и двете изречения са различни. Така стана трудно да се преобразува в същия ред с данни. В случай, че не предоставим същия набор от данни, машината не успява да предвиди. Така че е необходимо да се разграничи значението на всяка дума, за да се подготви наборът от данни за машинно обучение. И тук произтичането се използва за категоризиране на същия тип данни чрез получаване на коренната им дума.

Нека приложим това с a Python program.NLTK има алгоритъм, наречен „PorterStemmer“. Този алгоритъм приема списъка с токенизирани думи и го поставя в коренна дума.

Програма за разбиране на Stemming

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 

Програма за разбиране на Stemming

Обяснение на кода:

  • В 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	 

Програма за разбиране на Stemming

Обяснение на кода:

  • Пакетът PorterStemer се импортира от стеблото на модула
  • Импортират се пакети за токенизиране на изречение, както и на думи
  • Написано е изречение, което трябва да бъде токенизирано в следващата стъпка.
  • В тази стъпка се изпълнява токенизация на думи, произтичаща от лематизация.
  • Тук се създава обект за PorterStemmer.
  • Цикълът се изпълнява и произтичането на всяка дума се извършва с помощта на обекта, създаден в кодовия ред 5

Заключение:

Stemming е модул за предварителна обработка на данни. Английският език има много вариации на една дума. Тези вариации създават неяснота в обучението и прогнозите за машинно обучение. За да създадете успешен модел, е жизненоважно да филтрирате такива думи и да ги конвертирате в същия тип последователни данни, като използвате произволни думи. Също така, това е важна техника за получаване на данни за редове от набор от изречения и премахване на излишни данни, известни също като нормализация.

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

Лематизация в NLTK е алгоритмичният процес за намиране на лемата на дума в зависимост от нейното значение и контекст. Лематизацията обикновено се отнася до морфологичния анализ на думите, който има за цел да премахне флективните окончания. Помага при връщането на основната или речникова форма на дума, известна като лема.

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

Защо лематизацията е по-добра от Stemming?

Алгоритъмът за произтичане работи чрез изрязване на наставката от думата. В по-широк смисъл отрязва началото или края на думата.

Напротив, лематизацията е по-мощна операция и взема предвид морфологичния анализ на думите. Връща лемата, която е основната форма на всичките й флективни форми. Необходими са задълбочени лингвистични познания, за да създавате речници и да търсите правилната форма на думата. Стихирането е обща операция, докато лематизацията е интелигентна операция, при която правилната форма ще се търси в речника. Следователно лематизацията помага за по-добро формиране машинно обучение характеристики.

Код за разграничаване между лематизация и корен

Произходен код:

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

Обсъждане на изхода

Ако търсите произтичащи за проучвания и изучаване, изходът е един и същ (studi), но NLTK lemmatizer предоставя различна лема както за токените проучване за проучвания, така и за изучаване за изучаване. Така че, когато трябва да направим набор от функции за обучение на машина, би било чудесно, ако се предпочита лематизацията.

Използване на Lemmatizer

Lemmatizer минимизира неяснотата на текста. Примерни думи като велосипед или велосипеди се преобразуват в основна дума велосипед. По принцип той ще преобразува всички думи с еднакво значение, но различно представяне в основната им форма. Намалява плътността на думите в дадения текст и помага при подготовката на точните характеристики за тренировъчна машина. По-чисти са данните, толкова по-интелигентен и точен ще бъде вашият модел на машинно обучение. NLTK Lemmatizer също ще спести памет, както и изчислителни разходи.

Пример в реално време, показващ използването на Wordnet Lemmatization и 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)

Използване на Lemmatizer

Обяснение на кода

  • Първо се импортира wordnet за четене на корпуси.
  • WordNetLemmatizer се импортира от wordnet.
  • Токенизирането на думи, както и етикетът за части от речта се импортират от nltk.
  • Речникът по подразбиране се импортира от колекции.
  • Създава се речник, където pos_tag (първата буква) са ключовите стойности, чиито стойности са съпоставени със стойността от речника на wordnet. Взехме единствената първа буква, тъй като ще я използваме по-късно в цикъла.
  • Текстът е написан и е токенизиран.
  • Създава се обект lemma_function, който ще се използва вътре в цикъла.
  • Цикълът се изпълнява и lemmatize ще приеме два аргумента, единият е токен, а другият е съпоставяне на pos_tag с wordnet стойност.

Продукция:

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

Python Лематизацията има тясна връзка с wordnet речник, така че е от съществено значение да изучаваме тази тема, затова я запазваме като следваща тема.

Обобщете тази публикация с: