Стихиране и лематизация в 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
Обяснение на кода:
- В 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
Обяснение на кода:
- Пакетът 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)
Обяснение на кода
- Първо се импортира 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 речник, така че е от съществено значение да изучаваме тази тема, затова я запазваме като следваща тема.



