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

⚡ Умно обобщение

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

  • ???? Произход: PorterStemmer премахва наставките, за да достигне до корен, който може да не е истинска дума.
  • ???? Лематизация: WordNetLemmatizer връща речниковата базова форма, наречена лема.
  • Разлика: Стемингът е по-бърз, лематизацията е по-бавна, но по-точна и контекстно-съобразена.
  • 🔤 Нормализация: И двете намаляват плътността на думите, така че машините третират вариантите като една характеристика.
  • ???? ️ ПОС етикети: Предаването на таг за част на речта прави лематизатора много по-прецизен.
  • 🤖 Предимство на изкуствения интелект: По-чистият нормализиран текст създава по-добри функции и модели за машинно обучение.

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

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

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

Какво е Stemming?

Изхождайки е метод за нормализиране на думи в Natural Language ProcessingТова е техника, при която набор от думи в изречение се преобразува в поредица, за да се съкрати търсенето. При този метод думите, които имат едно и също значение, но някои вариации според контекста или изречението, се нормализират. С други думи, има една коренна дума, но има много вариации на една и съща дума. Например, коренната дума е „яде“, а нейните вариации са „яде, хранене, изяден и т.н.“. По същия начин, с помощта на Stemming in... Python, можем да намерим коренната дума на всеки вариант.

Например:

He was riding.
He was taking the ride.

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

Нека имплементираме това с Python програма. NLTK има алгоритъм, наречен ПортърСтемерТози алгоритъм приема списъка с токенизирани думи и ги превръща в коренни думи.

Програма за разбиране на 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

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. Предварителната обработка на текст включва както стеминг, така и лематизация. Много хора намират двата термина за объркващи. Някои ги третират като едно и също нещо, но има разлика между стеминг и лематизация. Лематизацията е за предпочитане пред първата поради причината по-долу.

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

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

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. Така че, когато трябва да създадем набор от функции за обучение на машина, би било чудесно, ако се предпочете лематизацията.

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

Лематизаторът минимизира двусмислието на текста. Думи като bicycle или bicycles се преобразуват в основната дума bicycle. Той преобразува всички думи с едно и също значение, но различно представяне, в основната им форма, намалявайки плътността на думите и помощната информация.ping подгответе точни характеристики за обучение на машина. Колкото по-чисти са данните, толкова по-точен ще бъде вашият модел за машинно обучение. NLTK Lemmatizer също така спестява памет и изчислителни разходи.

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

Изход:

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

Code Обяснение:

  • Корпусният четец Wordnet се импортира, а WordNetLemmatizer се импортира от Wordnet.
  • Токенизирането на думите и етикетът за части на речта се импортират от nltk, а Default Dictionary - от колекции.
  • Създава се речник, където първата буква на pos_tag е ключът, съпоставен със стойността от речника на Wordnet.
  • Текстът е написан и токенизиран, а обектът lemma_function е създаден за използване в цикъла.
  • Цикълът се изпълнява и lemmatize приема два аргумента: токена и карта (map).ping на pos_tag със стойността на wordnet.

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

Въпроси и Отговори

Стемерът на Портър е класът PorterStemmer на NLTK. Той прилага suffix-strip.ping правила от алгоритъма на Мартин Портър от 1980 г. за редуциране на английските думи до основата им, така че „waiting“, „waited“ и „waits“ всички стават „wait“.

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

Нормализирането на текста преобразува различните форми на думата в едно общо представяне. Стемингът и лематизацията са две техники за нормализиране, които намаляват плътността на думите, така че моделът третира варианти като „study“ и „studies“ като единна характеристика.

NLTK предоставя PorterStemmer (и други стемерни инструменти като Snowball) за определяне на корените, и WordNetLemmatizer за лематизация. Лематизаторът разчита на речника на WordNet, за да върне правилната базова форма на всяка дума.

Те премахват излишните вариации на думите, така че моделът за машинно обучение вижда по-чисти, по-нискоразмерни характеристики. По-малко дублирани токени означават по-малко неясноти по време на обучението и по-точни прогнози за невидим текст.

Съвременните модели с изкуствен интелект автоматично извеждат контекста, но WordNetLemmatizer на NLTK се нуждае от етикет за част на речта, за да разграничи двусмислието. Предоставянето на този етикет му позволява да избере правилната лема, например да превърне „learning“ в „learn“, когато е маркирано като глагол.

Една дума може да бъде съществително или глагол с различни леми. Без етикет за част на речта, WordNetLemmatizer приема съществително име. Подаването на правилния етикет, като например глагол или прилагателно, дава правилната основна форма.

Не. Коренирането само премахва суфиксите, така че „studies“ става „studi“, а „cries“ става „cri“, които не са валидни думи. Лематизацията, за разлика от това, винаги връща истинска речникова дума като „study“.

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