Stemming en lemmatisering in Python NLTK met voorbeelden

⚡ Slimme samenvatting

Stemming en lemmatisatie zijn tekstnormalisatietechnieken in Python NLTK reduceert woordvariaties tot een gemeenschappelijke basis, waarbij stemming snel achtervoegsels verwijdert zonder context en lemmatisatie een echt woordenboekwoord oplevert met behulp van de betekenis.

  • ???? Afstamming: De PorterStemmer verwijdert achtervoegsels om tot een stam te komen die mogelijk geen echt woord is.
  • 📚 Lemmatisering: De WordNetLemmatizer retourneert de basisvorm van het woordenboek, de zogenaamde lemma.
  • Verschil: Stemming is sneller, lemmatisatie is langzamer maar nauwkeuriger en houdt rekening met de context.
  • 🔤 Normalisatie: Beide methoden verkleinen de woorddichtheid, waardoor machines varianten als één kenmerk behandelen.
  • ???? ️ POS-tags: Door een woordsoortlabel mee te geven, wordt de lemmatizer veel preciezer.
  • 🤖 Voordelen van AI: Schonere, genormaliseerde tekst levert krachtigere machine learning-functies en -modellen op.

Stemming en lemmatisering in Python NLTK

Wat houdt stemming en lemmatisering in? Python NLTK?

Stemming en lemmatisering in Python NLTK staat voor tekstnormalisatietechnieken voor natuurlijke taalverwerking. Deze technieken worden veel gebruikt voor tekstvoorverwerking. Het verschil tussen stemming en lemmatisatie is dat stemming sneller is omdat het woorden verwijdert zonder de context te kennen, terwijl lemmatisatie langzamer is omdat het de context van woorden al kent voordat het verwerkt wordt.

Wat is stammen?

stammend is een methode om woorden te normaliseren in Natural Language ProcessingHet is een techniek waarbij een reeks woorden in een zin wordt omgezet in een reeks om het opzoeken te verkorten. Bij deze methode worden woorden met dezelfde betekenis, maar met variaties afhankelijk van de context of zin, genormaliseerd. Met andere woorden, er is één stamwoord, maar er zijn veel variaties van dat woord. Bijvoorbeeld, het stamwoord is "eten" en de variaties zijn "eet, etend, gegeten, enzovoort". Op dezelfde manier kan met behulp van stemming... PythonZo kunnen we het grondwoord van elke variant vinden.

Bijvoorbeeld:

He was riding.
He was taking the ride.

In de twee bovenstaande zinnen is de betekenis hetzelfde, namelijk een rijactiviteit uit het verleden. Een mens begrijpt gemakkelijk dat beide betekenissen hetzelfde zijn. Maar voor machines zijn beide zinnen verschillend. Daardoor wordt het lastig om ze om te zetten naar dezelfde datarij. Als we niet dezelfde dataset aanleveren, kan de machine geen voorspellingen doen. Het is dus noodzakelijk om de betekenis van elk woord te onderscheiden om de dataset voor machine learning voor te bereiden. Hier wordt stemming gebruikt om hetzelfde type data te categoriseren door het stamwoord te achterhalen.

Laten we dit implementeren met een Python programma. NLTK heeft een algoritme genaamd PorterStemmerDit algoritme accepteert een lijst met getokeniseerde woorden en zet deze om in stamwoorden.

Programma voor het begrijpen van 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)

Output:

wait
wait
wait
wait

Code Uitleg:

  • NLTK bevat een module genaamd "Stem", die geïmporteerd wordt. Het importeren van de volledige module zou het programma echter erg zwaar maken, omdat het duizenden regels code zou bevatten. Daarom hebben we uit de complete "Stem"-module alleen "PorterStemmer" geïmporteerd.
  • We hebben een dummylijst met variatiegegevens van hetzelfde woord opgesteld.
  • Er wordt een object aangemaakt dat behoort tot de klasse nltk.stem.porter.PorterStemmer.
  • We gaven de woorden één voor één door aan PorterStemmer met behulp van een "for"-lus. Uiteindelijk kregen we het grondwoord van elk woord in de lijst als resultaat.

Uit het bovenstaande blijkt dat stemming een belangrijke voorverwerkingsstap is, omdat het redundantie en variaties binnen hetzelfde woord verwijdert. Hierdoor worden de gegevens gefilterd, wat de training van de machine ten goede komt. Nu voeren we een volledige zin in en controleren we de uitvoer.

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)

Output:

hello
guru99
,
you
have
build
a
veri
good
site
and
I
love
visit
your
site

Code Uitleg:

  • Het pakket PorterStemmer wordt geïmporteerd vanuit de module stem.
  • Pakketten voor het tokeniseren van zinnen en woorden worden geïmporteerd.
  • Er wordt een zin geschreven die in de volgende stap moet worden getokeniseerd.
  • Hier wordt een object voor PorterStemmer gemaakt.
  • Er wordt een lus uitgevoerd en de stam van elk woord wordt bepaald met behulp van het object dat in regel 5 van de code is aangemaakt.

Kort gezegd is stemming een module voor data-voorverwerking. De Engelse taal kent veel variaties op één woord, wat ambiguïteit creëert bij het trainen en voorspellen van machine learning-modellen. Om een ​​succesvol model te bouwen, is het essentieel om dergelijke woorden te filteren en ze in dezelfde volgorde te plaatsen met behulp van stemming. Dit wordt ook wel normalisatie genoemd.

Wat is lemmatisering?

Lemmatisering In NLTK is lemmatisatie het algoritmische proces om het lemma van een woord te vinden op basis van de betekenis en context. Lemmatisatie verwijst meestal naar de morfologische analyse van woorden, die tot doel heeft de buigingsuitgangen te verwijderen. Het helpt bij het teruggeven van de basisvorm of woordenboekvorm van een woord, bekend als het lemma. De NLTK-lemmatisatiemethode is gebaseerd op de ingebouwde morph-functie van WordNet. Tekstvoorverwerking omvat zowel stemming als lemmatisatie. Veel mensen vinden de twee termen verwarrend. Sommigen beschouwen ze als hetzelfde, maar er is een verschil tussen stemming en lemmatisatie. Lemmatisatie heeft de voorkeur boven stemming om de volgende reden.

Waarom is lemmatisering beter dan stemming?

Het stamalgoritme werkt door het achtervoegsel van een woord te verwijderen. In bredere zin verwijdert het ofwel het begin ofwel het einde van het woord. Lemmatisatie daarentegen is een krachtigere bewerking die rekening houdt met de morfologische analyse van woorden. Het levert het lemma op, de basisvorm van al zijn verbuigingsvormen. Diepgaande taalkundige kennis is vereist om woordenboeken te maken en de juiste vorm van een woord te vinden. Stammen is een algemene bewerking, terwijl lemmatisatie een intelligente bewerking is waarbij de juiste vorm in het woordenboek wordt opgezocht. Lemmatisatie helpt dus bij het vormen van betere woordenboeken. machine learning kenmerken.

Code om onderscheid te maken tussen lemmatisatie en stamvorming.

stammend 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)))

Output:

Stemming for studies is studi
Stemming for studying is studi
Stemming for cries is cri
Stemming for cry is cri

Lemmatisering 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)))

Output:

Lemma for studies is study
Lemma for studying is studying
Lemma for cries is cry
Lemma for cry is cry

Bespreking van de output

Als je kijkt naar stemming voor studies en studying, is de output hetzelfde (studi), maar de NLTK-lemmatizer geeft een ander lemma voor beide tokens: study voor studies en studying voor studying. Dus wanneer we een feature set moeten maken om een ​​machine te trainen, zou het geweldig zijn als lemmatisatie de voorkeur krijgt.

Gebruiksvoorbeeld van Lemmatizer

De lemmatizer minimaliseert tekstambiguïteit. Woorden zoals 'fiets' of 'fietsen' worden omgezet naar het basiswoord 'fiets'. Het zet alle woorden met dezelfde betekenis maar een verschillende weergave om naar hun basisvorm, waardoor de woorddichtheid wordt verminderd en de leesbaarheid verbetert.ping Bereid nauwkeurige kenmerken voor om een ​​machine te trainen. Hoe schoner de data, hoe nauwkeuriger uw machine learning-model zal zijn. De NLTK Lemmatizer bespaart bovendien geheugen en rekenkracht.

Een praktijkvoorbeeld dat het gebruik van WordNet-lemmatisatie en POS-tagging demonstreert. 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)

Output:

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

Code Uitleg:

  • De corpuslezer wordnet wordt geïmporteerd, en WordNetLemmatizer wordt geïmporteerd vanuit wordnet.
  • Woordtokenisatie en woordsoortlabels worden geïmporteerd vanuit NLTK, en het standaardwoordenboek vanuit collecties.
  • Er wordt een woordenboek aangemaakt waarin de eerste letter van pos_tag de sleutel is, gekoppeld aan de waarde uit het wordnet-woordenboek.
  • De tekst wordt geschreven en getokeniseerd, en het object lemma_function wordt aangemaakt voor gebruik binnen de lus.
  • De lus wordt uitgevoerd en de functie lemmatize neemt twee argumenten: het token en een map.ping van pos_tag met de wordnet-waarde.

Python Lemmatisering heeft een nauwe relatie met de WordNet-woordenboekHet is daarom essentieel om dat onderwerp vervolgens te bestuderen.

Veelgestelde vragen

De Porter-stemmer is de PorterStemmer-klasse van NLTK. Deze past suffix-strip toe.ping Regels uit het algoritme van Martin Porter uit 1980 om Engelse woorden te reduceren tot hun stam, zodat “waiting”, “waited” en “waits” allemaal “wait” worden.

Gebruik stemming wanneer snelheid en eenvoud belangrijker zijn dan leesbaarheid, zoals bij zoekmachine-indexering, grootschalige sentimentanalyse of het reduceren van kenmerken. Kies voor lemmatisatie wanneer de output een geldig, voor mensen leesbaar woord moet zijn.

Tekstnormalisatie zet verschillende vormen van een woord om in één gemeenschappelijke representatie. Stemming en lemmatisatie zijn twee normalisatietechnieken die de woorddichtheid verlagen, zodat een model varianten zoals 'study' en 'studies' als één enkel kenmerk behandelt.

NLTK biedt PorterStemmer (en andere stemmers zoals Snowball) voor het stammen van woorden, en WordNetLemmatizer voor lemmatisatie. De lemmatizer gebruikt het WordNet-woordenboek om de juiste basisvorm van elk woord te bepalen.

Ze verwijderen overbodige woordvarianten, waardoor een machine learning-model schonere, minder-dimensionale kenmerken ziet. Minder dubbele tokens betekenen minder ambiguïteit tijdens de training en nauwkeurigere voorspellingen op onbekende tekst.

Moderne AI-modellen leiden automatisch context af, maar NLTK's WordNetLemmatizer heeft een woordsoortlabel nodig om ambiguïteit te voorkomen. Door dat label toe te voegen, kan het de juiste lemma kiezen, bijvoorbeeld door "leren" om te zetten in "leren" wanneer het als werkwoord is gelabeld.

Een woord kan een zelfstandig naamwoord of een werkwoord zijn, afhankelijk van het type lemma. Zonder een woordsoortlabel gaat WordNetLemmatizer ervan uit dat het een zelfstandig naamwoord is. Door het juiste label, zoals 'werkwoord' of 'bijvoeglijk naamwoord', mee te geven, wordt de juiste basisvorm verkregen.

Nee. Stemming verandert alleen achtervoegsels, dus "studies" wordt "studi" en "cries" wordt "cri", wat geen geldige woorden zijn. Lemmatisatie daarentegen levert altijd een echt woordenboekwoord op, zoals "study".

Vat dit bericht samen met: