Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Leer Lemmatizatie met POS-Tagging | Stemming en Lemmatizatie
Introductie tot NLP

bookLemmatizatie met POS-Tagging

De Engelse taal bevat veel woorden die als meerdere woordsoorten met verschillende betekenissen kunnen dienen. Bijvoorbeeld, "running" kan een werkwoord zijn ("He is running.") of een zelfstandig naamwoord ("Running is fun.").

Zoals we al hebben gezien, kan een lemmatizer een woord alleen nauwkeurig tot zijn basisvorm terugbrengen als het de woordsoort in de gegeven context kent. POS-tagging biedt deze context, waardoor lemmatisering preciezer wordt.

Lemmatisering met POS-tagging in NLTK

Aangezien we nu bekend zijn met beide technieken afzonderlijk, is het tijd om ze te combineren. Er is echter één belangrijk aspect om rekening mee te houden, namelijk het verschil in POS-tagformaten tussen pos_tag en het formaat dat de WordNet Lemmatizer verwacht.

Note
Meer leren

De pos_tag-functie van NLTK maakt gebruik van de Penn Treebank tagset, die een breed scala aan tags bevat voor gedetailleerde grammaticale categorisatie. De WordNet Lemmatizer verwacht daarentegen POS-tags in een vereenvoudigde vorm die aansluit bij de categorisatie van WordNet. Specifiek maakt deze alleen onderscheid tussen zelfstandige naamwoorden ('n'), werkwoorden ('v'), bijvoeglijke naamwoorden ('a' of 's' voor satelliet-bijvoeglijke naamwoorden) en bijwoorden ('r').

Het mappingproces omvat het omzetten van gedetailleerde Penn Treebank-tags naar bredere categorieën die door WordNet worden herkend. Bijvoorbeeld, zowel 'VBD' (verleden tijd werkwoord) als 'VBG' (gerundium of tegenwoordig deelwoord) uit Penn Treebank worden omgezet naar 'v' (werkwoord) wanneer ze worden gebruikt in de WordNet Lemmatizer.

Hier volgt een functie voor dit doel:

from nltk.corpus import wordnet as wn


def get_wordnet_pos(treebank_tag):
    if treebank_tag.startswith('J'):
        return wn.ADJ
    elif treebank_tag.startswith('V'):
        return wn.VERB
    elif treebank_tag.startswith('R'):
        return wn.ADV
    else:
        # Default to noun if no match is found or starts with 'N'
        return wn.NOUN  

Deze functie controleert eenvoudigweg de eerste letter van de Penn Treebank-tag: als deze 'J' is, retourneert het de WordNet-tag voor bijvoeglijke naamwoorden; als 'V', voor werkwoorden; als 'R', voor bijwoorden. In alle andere gevallen, inclusief wanneer de tag begint met 'N' of niet overeenkomt met een gespecificeerde voorwaarde, wordt standaard de WordNet-tag voor zelfstandige naamwoorden geretourneerd.

De constanten ADJ, VERB en andere die je in de code ziet, zijn afkomstig uit WordNet. Hun waarden zijn ADJ = 'a', ADJ_SAT = 's', ADV = 'r', NOUN = 'n', VERB = 'v'.

Met deze functie kan lemmatisatie met POS-tagging worden uitgevoerd:

123456789101112131415161718192021222324252627282930313233
from nltk.stem import WordNetLemmatizer from nltk.tokenize import word_tokenize from nltk import pos_tag from nltk.corpus import wordnet as wn import nltk nltk.download('wordnet') nltk.download('averaged_perceptron_tagger_eng') nltk.download('punkt_tab') # Initialize the lemmatizer lemmatizer = WordNetLemmatizer() # Function to map NLTK's POS tags to the format used by the WordNet lemmatizer def get_wordnet_pos(treebank_tag): if treebank_tag.startswith('J'): return wn.ADJ elif treebank_tag.startswith('V'): return wn.VERB elif treebank_tag.startswith('R'): return wn.ADV else: # Default to noun if no match is found or starts with 'N' return wn.NOUN text = "The leaves on the tree were turning a bright red, indicating that fall was leaving its mark." text = text.lower() tokens = word_tokenize(text) tagged_tokens = pos_tag(tokens) # Lemmatize each token with its POS tag lemmatized_tokens = [lemmatizer.lemmatize(token, get_wordnet_pos(tag)) for token, tag in tagged_tokens] print("Original text:", text) print("Lemmatized text:", ' '.join(lemmatized_tokens))
copy

Zoals je kunt zien, hebben we eerst POS-tagging uitgevoerd met behulp van de functie pos_tag(). Vervolgens hebben we list comprehension gebruikt om een lijst van lemmatiseerde tokens te maken door de methode lemmatize() toe te passen met het huidige token en de correct geformatteerde tag (met onze functie get_wordnet_pos(tag)) als argumenten. We hebben er bewust voor gekozen om stopwoorden niet te verwijderen om te laten zien dat de code effectief alle tokens verwerkt.

question mark

Waarom is de functie get_wordnet_pos noodzakelijk bij het lemmatiseren met NLTK's WordNetLemmatizer na POS-tagging?

Select the correct answer

Was alles duidelijk?

Hoe kunnen we het verbeteren?

Bedankt voor je feedback!

Sectie 2. Hoofdstuk 7

Vraag AI

expand

Vraag AI

ChatGPT

Vraag wat u wilt of probeer een van de voorgestelde vragen om onze chat te starten.

Awesome!

Completion rate improved to 3.45

bookLemmatizatie met POS-Tagging

Veeg om het menu te tonen

De Engelse taal bevat veel woorden die als meerdere woordsoorten met verschillende betekenissen kunnen dienen. Bijvoorbeeld, "running" kan een werkwoord zijn ("He is running.") of een zelfstandig naamwoord ("Running is fun.").

Zoals we al hebben gezien, kan een lemmatizer een woord alleen nauwkeurig tot zijn basisvorm terugbrengen als het de woordsoort in de gegeven context kent. POS-tagging biedt deze context, waardoor lemmatisering preciezer wordt.

Lemmatisering met POS-tagging in NLTK

Aangezien we nu bekend zijn met beide technieken afzonderlijk, is het tijd om ze te combineren. Er is echter één belangrijk aspect om rekening mee te houden, namelijk het verschil in POS-tagformaten tussen pos_tag en het formaat dat de WordNet Lemmatizer verwacht.

Note
Meer leren

De pos_tag-functie van NLTK maakt gebruik van de Penn Treebank tagset, die een breed scala aan tags bevat voor gedetailleerde grammaticale categorisatie. De WordNet Lemmatizer verwacht daarentegen POS-tags in een vereenvoudigde vorm die aansluit bij de categorisatie van WordNet. Specifiek maakt deze alleen onderscheid tussen zelfstandige naamwoorden ('n'), werkwoorden ('v'), bijvoeglijke naamwoorden ('a' of 's' voor satelliet-bijvoeglijke naamwoorden) en bijwoorden ('r').

Het mappingproces omvat het omzetten van gedetailleerde Penn Treebank-tags naar bredere categorieën die door WordNet worden herkend. Bijvoorbeeld, zowel 'VBD' (verleden tijd werkwoord) als 'VBG' (gerundium of tegenwoordig deelwoord) uit Penn Treebank worden omgezet naar 'v' (werkwoord) wanneer ze worden gebruikt in de WordNet Lemmatizer.

Hier volgt een functie voor dit doel:

from nltk.corpus import wordnet as wn


def get_wordnet_pos(treebank_tag):
    if treebank_tag.startswith('J'):
        return wn.ADJ
    elif treebank_tag.startswith('V'):
        return wn.VERB
    elif treebank_tag.startswith('R'):
        return wn.ADV
    else:
        # Default to noun if no match is found or starts with 'N'
        return wn.NOUN  

Deze functie controleert eenvoudigweg de eerste letter van de Penn Treebank-tag: als deze 'J' is, retourneert het de WordNet-tag voor bijvoeglijke naamwoorden; als 'V', voor werkwoorden; als 'R', voor bijwoorden. In alle andere gevallen, inclusief wanneer de tag begint met 'N' of niet overeenkomt met een gespecificeerde voorwaarde, wordt standaard de WordNet-tag voor zelfstandige naamwoorden geretourneerd.

De constanten ADJ, VERB en andere die je in de code ziet, zijn afkomstig uit WordNet. Hun waarden zijn ADJ = 'a', ADJ_SAT = 's', ADV = 'r', NOUN = 'n', VERB = 'v'.

Met deze functie kan lemmatisatie met POS-tagging worden uitgevoerd:

123456789101112131415161718192021222324252627282930313233
from nltk.stem import WordNetLemmatizer from nltk.tokenize import word_tokenize from nltk import pos_tag from nltk.corpus import wordnet as wn import nltk nltk.download('wordnet') nltk.download('averaged_perceptron_tagger_eng') nltk.download('punkt_tab') # Initialize the lemmatizer lemmatizer = WordNetLemmatizer() # Function to map NLTK's POS tags to the format used by the WordNet lemmatizer def get_wordnet_pos(treebank_tag): if treebank_tag.startswith('J'): return wn.ADJ elif treebank_tag.startswith('V'): return wn.VERB elif treebank_tag.startswith('R'): return wn.ADV else: # Default to noun if no match is found or starts with 'N' return wn.NOUN text = "The leaves on the tree were turning a bright red, indicating that fall was leaving its mark." text = text.lower() tokens = word_tokenize(text) tagged_tokens = pos_tag(tokens) # Lemmatize each token with its POS tag lemmatized_tokens = [lemmatizer.lemmatize(token, get_wordnet_pos(tag)) for token, tag in tagged_tokens] print("Original text:", text) print("Lemmatized text:", ' '.join(lemmatized_tokens))
copy

Zoals je kunt zien, hebben we eerst POS-tagging uitgevoerd met behulp van de functie pos_tag(). Vervolgens hebben we list comprehension gebruikt om een lijst van lemmatiseerde tokens te maken door de methode lemmatize() toe te passen met het huidige token en de correct geformatteerde tag (met onze functie get_wordnet_pos(tag)) als argumenten. We hebben er bewust voor gekozen om stopwoorden niet te verwijderen om te laten zien dat de code effectief alle tokens verwerkt.

question mark

Waarom is de functie get_wordnet_pos noodzakelijk bij het lemmatiseren met NLTK's WordNetLemmatizer na POS-tagging?

Select the correct answer

Was alles duidelijk?

Hoe kunnen we het verbeteren?

Bedankt voor je feedback!

Sectie 2. Hoofdstuk 7
some-alt