Direkt zum Inhalt

Stemming und Lemmatisierung in Python

In diesem Tutorium werden Stemming und Lemmatisierung aus praktischer Sicht mit dem Python Natural Language ToolKit (NLTK) Paket behandelt.
Aktualisierte 16. Jan. 2025  · 12 Min. Lesezeit

Die moderne englische Sprache gilt als schwach flektierte Sprache. Das bedeutet, dass es im Englischen viele Wörter gibt, die von einem anderen Wort abgeleitet sind; zum Beispiel ist das flektierte Wort "Normalität" von dem Wort "Norm" abgeleitet, das die Stammform ist. Alle flektierten Sprachen bestehen aus Wörtern mit gemeinsamen Stammformen, aber der Grad der Flexion variiert je nach Sprache. 

"In der linguistischen Morphologie ist die Flexion ein Prozess der Wortbildung, bei dem ein Wort verändert wird, um verschiedene grammatikalische Kategorien wie Zeitform, Kasus, Stimme, Aspekt, Person, Zahl, Geschlecht, Stimmung, Lebendigkeit und Bestimmtheit auszudrücken."
-(Quelle: Wikipedia)

Bei der Arbeit mit Text ist es manchmal notwendig, Normalisierungstechniken anzuwenden, um Wörter aus ihren abgeleiteten Versionen in ihre Stammform zu bringen. Dadurch wird die Zufälligkeit reduziert und die Wörter im Korpus näher an den vordefinierten Standard herangeführt, was die Effizienz der Verarbeitung erhöht, da der Computer mit weniger Merkmalen umgehen muss. 

Zwei beliebte Textnormalisierungstechniken im Bereich der natürlichen Sprachverarbeitung (NLP), der Anwendung von Computertechniken zur Analyse und Synthese natürlicher Sprache und Sprache, sind Stemming und Lemmatisierung. Forscherinnen und Forscher beschäftigen sich seit Jahren mit diesen Techniken; NLP-Praktikerinnen und -Praktiker nutzen sie in der Regel, um Wörter, Texte und Dokumente für die weitere Verarbeitung in einer Reihe von Aufgaben vorzubereiten. 

In diesem Tutorium werden Stemming und Lemmatisierung aus praktischer Sicht mit dem Python Natural Language ToolKit (NLTK) Paket behandelt.

In dieser DataLab-Arbeitsmappe findest du eine Übersicht über den gesamten Code in diesem Lernprogramm. Um den Code zu bearbeiten und auszuführen, erstelle eine Kopie der Arbeitsmappe, um diesen Code auszuführen und zu bearbeiten.

Stemming 

Stemming ist eine Technik, mit der ein flektiertes Wort auf seinen Wortstamm reduziert wird. Die Wörter "Programmieren", "Programmierer" und "Programme" können zum Beispiel alle auf den gemeinsamen Wortstamm "Programm" reduziert werden. Mit anderen Worten: "Programm" kann als Synonym für die drei vorherigen Beugungswörter verwendet werden. 

Diese Textverarbeitungstechnik ist oft nützlich, wenn es darum geht, mit spärlichem Vokabular umzugehen und/oder es zu standardisieren. Das hilft nicht nur dabei, Redundanzen zu reduzieren, da der Wortstamm und die flektierten Wörter meist die gleiche Bedeutung haben, sondern ermöglicht es NLP-Modellen auch, Verbindungen zwischen flektierten Wörtern und ihrem Wortstamm zu lernen, was dem Modell hilft, ihre Verwendung in ähnlichen Kontexten zu verstehen. 

Stemming-Algorithmen funktionieren, indem sie aus einer Liste häufiger Präfixe und Suffixe, die in flektierten Wörtern vorkommen, das Ende oder den Anfang des Wortes abschneiden. Das kann gelegentlich zu Wortstämmen führen, die keine echten Wörter sind. Wir können also sagen, dass dieser Ansatz zwar seine Vorteile hat, aber auch seine Grenzen. 

Vorteile der Stemmung

  • Verbesserte Modellleistung: Stemming reduziert die Anzahl der eindeutigen Wörter, die von einem Algorithmus verarbeitet werden müssen, was seine Leistung verbessern kann. Außerdem kann der Algorithmus dadurch schneller und effizienter laufen.
  • Ähnliche Wörter gruppieren: Wörter mit einer ähnlichen Bedeutung können in Gruppen zusammengefasst werden, auch wenn sie unterschiedliche Formen haben. Diese Technik kann z. B. bei der Klassifizierung von Dokumenten nützlich sein, wenn es darum geht, wichtige Themen in einem Dokument zu identifizieren. 
  • Leichter zu analysieren und zu verstehen: Da das Stemming in der Regel den Umfang des Wortschatzes reduziert, ist es viel einfacher, Texte zu analysieren, zu vergleichen und zu verstehen. Dies ist hilfreich bei Aufgaben wie der Stimmungsanalyse, bei der es darum geht, die Stimmung eines Dokuments zu bestimmen. 

Nachteile der Stemmung

  • Überstemmungen / Falschmeldungen: Dies ist der Fall, wenn ein Stemming-Algorithmus verschiedene flektierte Wörter auf denselben Wortstamm reduziert, obwohl sie nicht miteinander verwandt sind; zum Beispiel reduziert der Porter Stemmer-Algorithmus "universal", "university" und "universe" auf denselben Wortstamm. Obwohl sie etymologisch verwandt sind, haben sie in der heutigen Zeit ganz unterschiedliche Bedeutungen. Wenn du sie als Synonyme behandelst, verringert sich die Relevanz in den Suchergebnissen. 
  • Unterbesetzung / Falsche Negative: Das ist der Fall, wenn ein Stemming-Algorithmus flektierte Wörter auf verschiedene Wortstämme reduziert, die aber gleich sein sollten. Der Porter Stemmer Algorithmus reduziert zum Beispiel die Wörter "Alumnus", "Alumnae" und "Alumni" nicht auf denselben Wortstamm, obwohl sie als Synonyme behandelt werden sollten. 
  • Sprachliche Herausforderungen: Je komplizierter die Morphologie, die Rechtschreibung und die Zeichenkodierung der Zielsprache sind, desto schwieriger wird es, Stemmer zu entwickeln. So ist zum Beispiel ein italienischer Stemmer komplizierter als ein englischer, weil es eine größere Anzahl von Verbbeugungen gibt. Ein russischer Stammhalter ist aufgrund der vielen Substantivdeklinationen noch komplexer.

Lemmatisierung

Lemmatisierung ist eine weitere Technik, mit der flektierte Wörter auf ihren Wortstamm reduziert werden. Es beschreibt den algorithmischen Prozess, mit dem dasLemma(die Wörterbuchform) eines flektierten Wortes auf der Grundlage seiner Bedeutung identifiziert wird. 

Im Gegensatz zum Stemming beruht die Lemmatisierung auf der genauen Bestimmung des beabsichtigten Wortteils und der Bedeutung eines Wortes auf der Grundlage seines Kontextes. Das bedeutet, dass berücksichtigt wird, wo das flektierte Wort innerhalb eines Satzes steht und in welchem größeren Kontext dieser Satz steht, z. B. in benachbarten Sätzen oder sogar in einem ganzen Dokument.

"Lemmatisierung bezieht sich in der Regel auf die korrekte Verwendung eines Vokabulars und die morphologische Analyse von Wörtern, die in der Regel darauf abzielt, nur flektierende Endungen zu entfernen und die Basis- oder Wörterbuchform eines Wortes, die als Lemma bezeichnet wird, wiederherzustellen."

- (Quelle: Standford NLP Group)

Mit anderen Worten, ein Dokument zu lemmatisieren bedeutet in der Regel, "die Dinge richtig zu machen", denn es beinhaltet die Verwendung eines Vokabulars und die Durchführung einer morphologischen Analyse von Wörtern, um nur die Flexionsendungen zu entfernen und die Grund- oder Wörterbuchform eines Wortes zurückzugeben, die als "Lemma" bezeichnet wird. Du kannst zum Beispiel von einem Lemmatisierungsalgorithmus erwarten, dass er "läuft", "laufen" und "lief" auf das Lemma "laufen" abbildet.  

Vorteile der Lemmatisierung

  • Genauigkeit: Bei der Lemmatisierung werden nicht einfach Wörter abgeschnitten, wie es bei Stemming-Algorithmen der Fall ist. Die Analyse von Wörtern wird auf der Grundlage des POS des Wortes durchgeführt, um den Kontext bei der Erstellung von Lemmata zu berücksichtigen. Außerdem führt die Lemmatisierung dazu, dass echte Wörter aus dem Wörterbuch produziert werden.

Nachteile der Lemmatisierung 

  • Zeitaufwendig: Im Vergleich zum Stemming ist die Lemmatisierung ein langsamer und zeitaufwändiger Prozess. Das liegt daran, dass bei der Lemmatisierung eine morphologische Analyse durchgeführt und die Bedeutung der Wörter aus einem Wörterbuch abgeleitet wird. 

Python kostenlos lernen

Einführung in die Datenwissenschaft in Python

BeginnerSkill Level
4 Std.
456.7K learners
Tauche ein in die Datenwissenschaft mit Python und lerne, wie du deine Daten effektiv analysieren und visualisieren kannst. Du brauchst keine Erfahrung oder Kenntnisse im Programmieren.
See DetailsRight Arrow

Praktische Beispiele für Stemming und Lemmatisierung in Python mit NLTK

Jetzt hast du einen Überblick über Stemming und Lemmatisierung. In diesem Abschnitt werden wir beide Techniken anhand von Beispielen in Python und der Bibliothek NLTK praktisch ausprobieren. 

Eine kurze Einführung in das Python NLTK-Paket

Natural Language Tool Kit (NLTK) ist eine Python-Bibliothek, mit der du Programme zur Verarbeitung natürlicher Sprache erstellen kannst. Die Bibliothek kann verschiedene Operationen durchführen, wie z.B. Tokenisierung, Stemming, Klassifizierung, Parsing, Tagging, semantische Schlussfolgerungen, Sentiment-Analyse und mehr.

Die neueste Version ist NLTK 3.8.1 und erfordert die Python-Versionen 3.7, 3.8, 3.9, 3.10 oder 3.11. Du musst dir darüber aber keine Gedanken machen, da es in der DataLab-Arbeitsmappe vorinstalliert ist - importiere einfach nltk und du kannst loslegen. 

Python Stemming Beispiel

Einer der beliebtesten Stemming-Algorithmen ist der "Porter Stemmer". Der Porter Stemmer wurde erstmals 1980 von Martin Porter in einer Arbeit mit dem Titel "An algorithm for suffix stripping" vorgeschlagen. Das Papier hat sich zu einem der gebräuchlichsten Algorithmen für Stemming im Englischen entwickelt.

Schauen wir mal, wie es funktioniert:

import nltk
from nltk.stem import PorterStemmer
nltk.download("punkt")
​
# Initialize Python porter stemmer
ps = PorterStemmer()
​
# Example inflections to reduce
example_words = ["program","programming","programer","programs","programmed"]
​
# Perform stemming
print("{0:20}{1:20}".format("--Word--","--Stem--"))
for word in example_words:
   print ("{0:20}{1:20}".format(word, ps.stem(word)))

"""
--Word--            --Stem--            
program             program             
programming         program             
programer           program             
programs            program             
programmed          program

"""

Dies ist ein ziemlich einfaches Beispiel; wir haben diese Ergebnisse von unserem Porter Stemmer erwartet, wie im Abschnitt "Stemming" oben erwähnt. 

Versuchen wir ein schwierigeres Beispiel:

import string
from nltk.tokenize import word_tokenize

example_sentence = "Python programmers often tend like programming in python because it's like english. We call people who program in python pythonistas."

# Remove punctuation
example_sentence_no_punct = example_sentence.translate(str.maketrans("", "", string.punctuation))

# Create tokens
word_tokens = word_tokenize(example_sentence_no_punct)

# Perform stemming
print("{0:20}{1:20}".format("--Word--","--Stem--"))
for word in word_tokens:
    print ("{0:20}{1:20}".format(word, ps.stem(word)))

"""
--Word--            --Stem--            
Python              python              
programmers         programm            
often               often               
tend                tend                
like                like                
programming         program             
in                  in                  
python              python              
because             becaus              
its                 it                  
like                like                
english             english             
We                  we                  
call                call                
people              peopl               
who                 who                 
program             program             
in                  in                  
python              python              
pythonistas         pythonista
"""

Hier kannst du sehen, dass einige der ausgegebenen Wörter nicht im englischen Wörterbuch enthalten sind (z.B. "becaus", "people" und "programm"). Eine weitere Sache, die du beachten solltest, ist, dass der Kontext nicht berücksichtigt wird. Zum Beispiel ist "Programmierer" ein Substantiv im Plural, aber es wurde auf "Programm" reduziert, das ein Substantiv oder ein Verb sein kann - mit anderen Worten, der Wortstamm ist mehrdeutig. 

Python Lemmatization Beispiel

Die Motivation hinter kontextsensitiven Lemmatisierern war es, die Leistung bei ungesehenen und mehrdeutigen Wörtern zu verbessern. In unserem Lemmatisierungsbeispiel verwenden wir einen beliebten Lemmatisierer namens WordNet Lemmatisierer. 

Wordnet ist eine große, kostenlose und öffentlich zugängliche lexikalische Datenbank für die englische Sprache mit dem Ziel, strukturierte semantische Beziehungen zwischen Wörtern herzustellen.

Lass uns das in Aktion sehen:

from nltk.stem import WordNetLemmatizer
nltk.download("wordnet")
nltk.download("omw-1.4")
​
# Initialize wordnet lemmatizer
wnl = WordNetLemmatizer()
​
# Example inflections to reduce
example_words = ["program","programming","programer","programs","programmed"]
​
# Perform lemmatization
print("{0:20}{1:20}".format("--Word--","--Lemma--"))
for word in example_words:
   print ("{0:20}{1:20}".format(word, wnl.lemmatize(word, pos="v")))

"""
--Word--            --Lemma--           
program             program             
programming         program             
programer           programer           
programs            program             
programmed          program
"""   

Eingabewörter, die an unseren Lemmatisierer übergeben werden, bleiben unverändert, wenn sie nicht im WordNet gefunden werden können. Das bedeutet, dass der Kontext angegeben werden muss. Dies geschieht durch die Angabe des Wertes für den Part-of-Speech-Parameter pos in wordnet_lemmatizer.lemmatize.

Beachte, dass das Wort "Programmierer" von unserem Lemmatisierer nicht in "Programm" umgewandelt wurde: Das liegt daran, dass wir unseren Lemmatisierer angewiesen haben, nur Verben zu bilden. 

Geben wir unserem Lemmatizer etwas Komplizierteres, um zu sehen, wie er abschneidet...

example_sentence = "Python programmers often tend like programming in python because it's like english. We call people who program in python pythonistas."
​
# Remove punctuation
example_sentence_no_punct = example_sentence.translate(str.maketrans("", "", string.punctuation))
​
word_tokens = word_tokenize(example_sentence_no_punct)
​
# Perform lemmatization
print("{0:20}{1:20}".format("--Word--","--Lemma--"))
for word in word_tokens:
   print ("{0:20}{1:20}".format(word, wnl.lemmatize(word, pos="v")))
"""
--Word--            --Lemma--           
Python              Python              
programmers         programmers         
often               often               
tend                tend                
like                like                
programming         program             
in                  in                  
python              python              
because             because             
its                 its                 
like                like                
english             english             
We                  We                  
call                call                
people              people              
who                 who                 
program             program             
in                  in                  
python              python              
pythonistas         pythonistas 
"""

Alle Wörter, die der Lemmatisierungsalgorithmus zurückgibt, stehen im englischen Wörterbuch - abzüglich "pythonistas", was eher ein informeller Begriff für Python-Programmierer ist. 

Stemming vs. Lemmatisierung

Du hast gesehen, wie du beide Techniken umsetzen kannst, aber wie sind sie im Vergleich? 

Stemming und Lemmatisierung sind beides Textverarbeitungsmethoden, die darauf abzielen, flektierte Wörter auf einen gemeinsamen Grundstamm zu reduzieren. Trotz der Übereinstimmung in der übergeordneten Zielsetzung sind die beiden Techniken nicht identisch. 

Die Hauptunterschiede zwischen Stemming und Lemmatisierung liegen in der Art und Weise, wie die beiden Techniken das Ziel erreichen, flektierte Wörter auf einen gemeinsamen Grundwortstamm zu reduzieren. 

Stemming-Algorithmen versuchen, die gemeinsamen Grundwurzeln verschiedener Beugungen zu finden, indem sie die Endungen oder Anfänge des Wortes abschneiden. Der Häcksel basiert auf einer Liste häufiger Präfixe und Suffixe, die typischerweise in flektierten Wörtern zu finden sind. Dieses diskriminierungsfreie Zerhacken von Wörtern kann gelegentlich dazu führen, dass man sinnvolle Wortstämme findet, manchmal aber auch nicht. 

Auf der anderen Seite versuchen Lemmatisierungsalgorithmen, durch eine morphologische Analyse gemeinsame Grundwurzeln von flektierten Wörtern zu finden. Um Beugungen genau zu reduzieren, muss ein detailliertes Wörterbuch geführt werden, damit der Algorithmus ein gebeugtes Wort wieder mit seinem Lemma verknüpfen kann.

"Die beiden unterscheiden sich auch darin, dass beim Stemming meist abgeleitete Wörter zusammengelegt werden, während bei der Lemmatisierung meist nur die verschiedenen Flexionsformen eines Lemmas zusammengelegt werden."

- Quelle: Stanford NLP, IR Book.

Der grobe heuristische Ansatz der Stemming-Algorithmen bedeutet, dass sie zwar schnell und effizient, aber nicht immer genau sind. Im Gegensatz dazu opfern Lemmatisierungsalgorithmen Geschwindigkeit und Effizienz für die Genauigkeit und führen so zu aussagekräftigen Basiswurzeln. 

Ein Stemming-Algorithmus kann zum Beispiel "saw" auf "s" reduzieren. Ein Lemmatisierungsalgorithmus prüft anhand des Kontexts, in dem es verwendet wird, ob "Säge" ein Substantiv (das Handwerkzeug zum Schneiden) oder ein Verb (sehen) ist, bevor er entscheidet, ob er ein Lemma zurückgibt - wenn es ein Substantiv ist, gibt er "Säge" zurück, und wenn es ein Verb ist, gibt er "sehen" zurück.

Diese Punkte dürften dir inzwischen ziemlich klar sein, also kommt jetzt die Millionen-Dollar-Frage: "Soll ich Stemming oder Lemmatisierung für die Textvorverarbeitung verwenden?" 

Wie bei den meisten Dingen, die mit Software zu tun haben, kommt es darauf an. 

Sind dir Geschwindigkeit und Effizienz wichtig? Wenn ja, wähle Stemming. 

Ist der Kontext wichtig für deine Bewerbung? Wenn du "Ja" sagst, dann verwende die Lemmatisierung. 

Welche Technik du verwendest, hängt ganz von der Anwendung ab, an der du arbeitest, und von deinen Zielen für das Projekt. Vielleicht möchtest du mit beiden Techniken experimentieren und die Ergebnisse vergleichen, um herauszufinden, welcher Ansatz zu den Ergebnissen führt, die deinen Projektzielen am meisten entsprechen. 

In diesem Lernprogramm haben wir nicht viel darüber gesprochen, wie Lemmatisierungsalgorithmen erstellt werden. Das liegt daran, dass es verschiedene Bibliotheken (wie SpaCy, NLTK usw.) gibt, die mit verschiedenen Sprachen kompatibel sind. Wenn du jedoch deinen eigenen Lemmatizer für eine nicht verfügbare Sprache (z.B. Akan) erstellen müsstest, bräuchtest du gute Kenntnisse und ein gutes Verständnis der Zielsprache, um einen Lemmatizer zu erstellen. Stemming-Algorithmen sind für solche Szenarien viel einfacher zu entwickeln.

Einpacken

Zusammenfassend lässt sich sagen, dass Stemming und Lemmatisierung Techniken sind, die bei der Textverarbeitung im NLP eingesetzt werden. Beide zielen darauf ab, Beugungen auf gemeinsame Grundwörter zu reduzieren, aber jeder verfolgt dabei einen anderen Ansatz. Der Stemming-Ansatz ist viel schneller als die Lemmatisierung, aber er ist grober und kann gelegentlich zu unbedeutenden gemeinsamen Grundwurzeln führen. Alternativ dazu ist die Lemmatisierung viel genauer als das Stemming, wenn es darum geht, sinnvolle Wörter im Wörterbuch zu finden, und sie berücksichtigt den Kontext. 

Themen

Erfahre mehr über Python und natürliche Sprachverarbeitung

Kurs

Einführung in Deep Learning mit Python

4 Std.
259.7K
Lerne die Grundlagen neuronaler Netzwerke und wie du Deep-Learning-Modelle mit Keras 2.0 in Python erstellst.
Siehe DetailsRight Arrow
Kurs starten
Mehr anzeigenRight Arrow