Wat is stampen?
Stemming is een soort normalisatie van woorden. Normalisatie is een techniek waarbij een reeks woorden in een zin wordt omgezet in een reeks om het opzoeken ervan te verkorten. De woorden die dezelfde betekenis hebben maar enige variatie hebben volgens de context of zin, worden genormaliseerd.
Met een ander woord, er is één stamwoord, maar er zijn veel variaties op dezelfde woorden. Het stamwoord is bijvoorbeeld "eten" en de variaties zijn "eet, eet, gegeten en dergelijke". Op dezelfde manier kunnen we met behulp van Stemming het stamwoord van variaties vinden.
Bijvoorbeeld
He was riding.He was taking the ride.
In de bovenstaande twee zinnen is de betekenis hetzelfde, dwz rij-activiteit in het verleden. Een mens kan gemakkelijk begrijpen dat beide betekenissen hetzelfde zijn. Maar voor machines zijn beide zinnen verschillend. Het werd dus moeilijk om het om te zetten in dezelfde gegevensrij. Als we niet dezelfde dataset leveren, kan de machine niet voorspellen. Het is dus nodig om de betekenis van elk woord te differentiëren om de dataset voor te bereiden op machine learning. En hier wordt stamgebruik gebruikt om hetzelfde type gegevens te categoriseren door het hoofdwoord ervan op te halen.
Laten we dit implementeren met een Python-programma.NLTK heeft een algoritme genaamd "PorterStemmer". Dit algoritme accepteert de lijst met getokeniseerde woorden en verwerkt deze in het hoofdwoord.
Programma om Stemming te begrijpen
from nltk.stem import PorterStemmere_words= ["wait", "waiting", "waited", "waits"]ps =PorterStemmer()for w in e_words:rootWord=ps.stem(w)print(rootWord)
Uitgang :
waitwaitwaitwait
Code Verklaring:
- Er is een stammodule in NLTk die wordt geïmporteerd. Als je de volledige module importeert, wordt het programma zwaar omdat het duizenden regels codes bevat. Dus van de hele stammodule hebben we alleen "PorterStemmer" geïmporteerd.
- We hebben een dummy-lijst gemaakt met variatiegegevens van hetzelfde woord.
- Er wordt een object gemaakt dat behoort tot de klasse nltk.stem.porter.PorterStemmer.
- Verder hebben we het een voor een doorgegeven aan PorterStemmer met behulp van de "for" -lus. Ten slotte kregen we het uitvoerhoofdwoord van elk woord dat in de lijst wordt genoemd.
Uit de bovenstaande uitleg kan ook worden geconcludeerd dat stampen wordt beschouwd als een belangrijke voorverwerkingsstap omdat het overtolligheid in de gegevens en variaties in hetzelfde woord heeft verwijderd. Als gevolg hiervan worden gegevens gefilterd, wat zal helpen bij een betere machinetraining.
Nu geven we een volledige zin door en controleren het gedrag ervan als output.
Programma:
from nltk.stem import PorterStemmerfrom nltk.tokenize import sent_tokenize, word_tokenizesentence="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)
Uitgang:
helloguru99,youhavebuildaverigoodsiteandIlovevisityoursite
Code Verklaring
- Pakket PorterStemer wordt geïmporteerd uit modulesteel
- Pakketten voor tokenisatie van zowel zinnen als woorden worden geïmporteerd
- Er wordt een zin geschreven die in de volgende stap moet worden getokeniseerd.
- Word-tokenisatie wordt in deze stap geïmplementeerd.
- Hier wordt een object voor PorterStemmer aangemaakt.
- De lus wordt uitgevoerd en de stam van elk woord wordt gedaan met behulp van het object dat is gemaakt in de coderegel 5
Gevolgtrekking:
Stemming is een module voor het voorbewerken van gegevens. De Engelse taal heeft veel variaties op een enkel woord. Deze variaties creëren dubbelzinnigheid in de training en voorspelling van machine learning. Om een succesvol model te maken, is het essentieel om dergelijke woorden te filteren en met behulp van stamgegevens om te zetten naar hetzelfde type gegevens op volgorde. Dit is ook een belangrijke techniek om rijgegevens uit een reeks zinnen te halen en overtollige gegevens te verwijderen, ook wel normalisatie genoemd.
Wat is Lemmatisering?
Lemmatisering is het algoritmische proces waarbij het lemma van een woord wordt gevonden, afhankelijk van hun betekenis. Lemmatisering verwijst meestal naar de morfologische analyse van woorden, die tot doel heeft inflectionele uitgangen te verwijderen. Het helpt bij het retourneren van de basis- of woordenboekvorm van een woord, dat bekend staat als het lemma. De NLTK-lemmatiseringsmethode is gebaseerd op de ingebouwde morph-functie van WorldNet. Tekstvoorbewerking omvat zowel stampen als lemmatisering. Veel mensen vinden de twee termen verwarrend. Sommigen behandelen deze als hetzelfde, maar er is een verschil tussen beide. Lemmatisering heeft de voorkeur boven de eerste vanwege de onderstaande reden.
Waarom is Lemmatisering beter dan Stemming?
Het stamalgoritme werkt door het achtervoegsel uit het woord te verwijderen. In bredere zin snijdt ofwel het begin ofwel het einde van het woord.
Integendeel, lemmatisering is een krachtigere operatie en houdt rekening met morfologische analyse van de woorden. Het geeft het lemma terug dat de basisvorm is van al zijn verbuigingsvormen. Diepgaande taalkennis is vereist om woordenboeken te maken en de juiste vorm van het woord te zoeken. Stammen is een algemene bewerking, terwijl lemmatisering een intelligente bewerking is waarbij de juiste vorm in het woordenboek wordt gezocht. Daarom helpt lemmatisering bij het vormen van betere machine learning-functies.
Code om onderscheid te maken tussen Lemmatisering en Stemming
Stamcode
import nltkfrom nltk.stem.porter import PorterStemmerporter_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)))
Uitgang:
Stemming for studies is studiStemming for studying is studiStemming for cries is criStemming for cry is cri
Lemmatiseringscode
import nltkfrom nltk.stem import WordNetLemmatizerwordnet_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)))
Uitgang:
Lemma for studies is studyLemma for studying is studyingLemma for cries is cryLemma for cry is cry
Bespreking van de output:
Als je stamt voor studies en studeren, de output is hetzelfde (studi) maar Lemmatizer biedt verschillende lemma's voor zowel tokens voor studie als voor studeren voor studeren. Dus als we functies moeten instellen om de machine te trainen, zou het geweldig zijn als lemmatisering de voorkeur heeft.
Gebruikscasus van Lemmatizer:
Lemmatizer minimaliseert de dubbelzinnigheid van de tekst. Voorbeeldwoorden zoals fiets of fietsen worden omgezet in het basiswoord fiets. In principe converteert het alle woorden met dezelfde betekenis maar met een verschillende weergave naar hun basisvorm. Het vermindert de woorddichtheid in de gegeven tekst en helpt bij het voorbereiden van de nauwkeurige functies voor de trainingsmachine. Schoner de gegevens, hoe intelligenter en nauwkeuriger uw machine learning-model zal zijn. Lemmatizerwill bespaart ook geheugen en rekenkosten.
Realtime voorbeeld dat het gebruik van Wordnet-lemmatisering en POS-tagging in Python laat zien
from nltk.corpus import wordnet as wnfrom nltk.stem.wordnet import WordNetLemmatizerfrom nltk import word_tokenize, pos_tagfrom collections import defaultdicttag_map = defaultdict(lambda : wn.NOUN)tag_map['J'] = wn.ADJtag_map['V'] = wn.VERBtag_map['R'] = wn.ADVtext = "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)
Code Verklaring
- Ten eerste wordt de corpuslezer wordnet geïmporteerd.
- WordNetLemmatizer wordt geïmporteerd vanuit wordnet
- Zowel woordtokenize als delen van spraak-tag worden geïmporteerd uit nltk
- Standaardwoordenboek wordt geïmporteerd uit verzamelingen
- Woordenboek wordt gemaakt waarbij pos_tag (eerste letter) de sleutelwaarden zijn waarvan de waarden zijn toegewezen aan de waarde uit het wordnet-woordenboek. We hebben de enige eerste letter genomen, omdat we deze later in de lus zullen gebruiken.
- Tekst is geschreven en getokeniseerd.
- Object lemma_function wordt gemaakt dat binnen de lus zal worden gebruikt
- Loop wordt uitgevoerd en lemmatize heeft twee argumenten, de ene is token en de andere is een mapping van pos_tag met wordnet-waarde.
Uitgang:
guru99 => guru99is => betotally => totallynew => newkind => kindof => oflearning => learnexperience => experience. => .
Lemmatisering heeft een nauwe relatie met het wordnet-woordenboek, dus het is essentieel om dit onderwerp te bestuderen, dus we houden dit als het volgende onderwerp