Aktionen

Maschinelles Lesen: Unterschied zwischen den Versionen

Aus exmediawiki

 
(33 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 1: Zeile 1:
'''07.11.2019'''
+
[[AI@exLabIII|Seminar]], '''07.11.2019'''
 
----
 
----
 
----
 
----
 
'''''alle Notebook findet ihr unter /exMedia_Machines/:'''''
 
'''''alle Notebook findet ihr unter /exMedia_Machines/:'''''
  
<small><code>exMedia_Machines/Seminar_Einführung-in-die-Programmierung-KI/04_07-11_maschinelles-lesen/loesungen/'''01_sentiment-analyses_german-txt.ipynb'''</code></small>
+
<small><code>exMedia_Machines/Seminar_Einführung-in-die-Programmierung-KI/04_07-11_maschinelles-lesen/'''01_sentiment-analyses_german-txt.ipynb'''</code></small>
  
<small><code>exMedia_Machines/Seminar_Einführung-in-die-Programmierung-KI/04_07-11_maschinelles-lesen/loesungen/'''load_scrape-data.ipynb'''</code></small>
+
<small><code>exMedia_Machines/Seminar_Einführung-in-die-Programmierung-KI/04_07-11_maschinelles-lesen/'''02_load_scrape-data.ipynb'''</code></small>
  
<small><code>exMedia_Machines/Seminar_Einführung-in-die-Programmierung-KI/04_07-11_maschinelles-lesen/loesungen/'''01_sentiment-analyses_german-txt.ipynb'''</code></small>
+
<small><code>exMedia_Machines/Seminar_Einführung-in-die-Programmierung-KI/04_07-11_maschinelles-lesen/'''03_tokenization-english.ipynb'''</code></small>
  
<small><code>exMedia_Machines/Seminar_Einführung-in-die-Programmierung-KI/04_07-11_maschinelles-lesen/loesungen/'''01_sentiment-analyses_german-txt.ipynb'''</code></small>
+
<small><code>exMedia_Machines/Seminar_Einführung-in-die-Programmierung-KI/04_07-11_maschinelles-lesen/'''03_tokenization-deutsch.ipynb'''</code></small>
----
 
----
 
'''das Natural Language Toolkit NLTK zu installieren'''
 
 
 
open conda and type:
 
conda install nltk
 
  
 +
<small><code>exMedia_Machines/Seminar_Einführung-in-die-Programmierung-KI/04_07-11_maschinelles-lesen/'''04_rechnen-mit-woertern.ipynb'''</code></small>
 
=Sentiment Analysis=
 
=Sentiment Analysis=
 +
<small><code>exMedia_Machines/Seminar_Einführung-in-die-Programmierung-KI/04_07-11_maschinelles-lesen/'''01_sentiment-analyses_german-txt.ipynb'''</code></small>
 
[[Datei:Textblob.jpeg|500px]]
 
[[Datei:Textblob.jpeg|500px]]
  
Zeile 39: Zeile 35:
  
 
Mit Textblob sind viele Ansätze wie etwa Erkennen von Wortarten, Extraktion von Substantiven, Stimmungsanalyse und auch Klassifizierungen möglich.
 
Mit Textblob sind viele Ansätze wie etwa Erkennen von Wortarten, Extraktion von Substantiven, Stimmungsanalyse und auch Klassifizierungen möglich.
 +
 +
schönes Textblob-HowTo: https://aparrish.neocities.org/textblob.html
 
----
 
----
 
===deutschsprachige Texte===
 
===deutschsprachige Texte===
<small><code>exMedia_Machines/Seminar_Einführung-in-die-Programmierung-KI/04_07-11_maschinelles-lesen/loesungen/'''01_sentiment-analyses_german-txt.ipynb'''</code></small>
+
<small><code>exMedia_Machines/Seminar_Einführung-in-die-Programmierung-KI/04_07-11_maschinelles-lesen/'''01_sentiment-analyses_german-txt.ipynb'''</code></small>
 
====textblob-de installieren====
 
====textblob-de installieren====
 
Die Installation von textblob-de erfolgt in zwei Schritten.  
 
Die Installation von textblob-de erfolgt in zwei Schritten.  
Zeile 76: Zeile 74:
  
 
  print(textsnippet.sentiment)
 
  print(textsnippet.sentiment)
 +
 +
----
 +
----
  
 
=How to get the trainigdata?=
 
=How to get the trainigdata?=
<small><code>exMedia_Machines/Seminar_Einführung-in-die-Programmierung-KI/04_07-11_maschinelles-lesen/loesungen/''load_scrape-data.ipynb''</code></small>
+
<small><code>exMedia_Machines/Seminar_Einführung-in-die-Programmierung-KI/04_07-11_maschinelles-lesen/'''02_load_scrape-data.ipynb'''</code></small>
 +
 
 +
see more...: https://www.nltk.org/book/ch03.html
 +
 
 
==File aus eigener Datenbank einlesen==
 
==File aus eigener Datenbank einlesen==
 
  filename = 'Dateipfad'
 
  filename = 'Dateipfad'
Zeile 87: Zeile 91:
 
==vorbearbeitete Trainingsdatenbanken==
 
==vorbearbeitete Trainingsdatenbanken==
 
links hierein
 
links hierein
 +
 +
==Wikipedia==
 +
===Wiki2Text===
 +
Extrahieren eines Plain-Text-Korpus aus MediaWiki-XML-Dumps wie Wikipedia, siehe: https://github.com/rspeer/wiki2text
 +
===Wikiextractor===
 +
https://github.com/attardi/wikiextractor
  
 
==Tweets scrapen==
 
==Tweets scrapen==
Tweets gefiltert nach Hashtag scrapen: https://medium.com/@limavallantin/mining-twitter-for-sentiment-analysis-using-python-a74679b85546
+
* https://medium.com/@limavallantin/mining-twitter-for-sentiment-analysis-using-python-a74679b85546
 +
* https://medium.com/better-programming/how-to-build-a-twitter-sentiments-analyzer-in-python-using-textblob-948e1e8aae14
 +
* https://www.researchgate.net/post/How_to_download_the_hashtag_data_set_from_twitter_and_instagram
  
Pdf's/Webseiten downloaden==
+
Beispielcode von https://gist.github.com/sxshateri/540aead254bfa7810ee8bbb2d298363e:
 +
import tweepy
 +
import csv
 +
import pandas as pd
 +
import sys
 +
 +
# API credentials here
 +
consumer_key = 'INSERT CONSUMER KEY HERE'
 +
consumer_secret = 'INSERT CONSUMER SECRET HERE'
 +
access_token = 'INSERT ACCESS TOKEN HERE'
 +
access_token_secret = 'INSERT ACCESS TOKEN SECRET HERE'
 +
 +
auth = tweepy.OAuthHandler(consumer_key, consumer_secret)
 +
auth.set_access_token(access_token, access_token_secret)
 +
api = tweepy.API(auth,wait_on_rate_limit=True,wait_on_rate_limit_notify=True)
 +
 +
# Search word/hashtag value
 +
HashValue = ""
 +
 +
# search start date value. the search will start from this date to the current date.
 +
StartDate = ""
 +
 +
# getting the search word/hashtag and date range from user
 +
HashValue = input("Enter the hashtag you want the tweets to be downloaded for: ")
 +
StartDate = input("Enter the start date in this format yyyy-mm-dd: ")
 +
 +
# Open/Create a file to append data
 +
csvFile = open(HashValue+'.csv', 'a')
 +
 +
#Use csv Writer
 +
csvWriter = csv.writer(csvFile)
 +
 +
for tweet in tweepy.Cursor(api.search,q=HashValue,count=20,lang="en",since=StartDate, tweet_mode='extended').items():
 +
    print (tweet.created_at, tweet.full_text)
 +
    csvWriter.writerow([tweet.created_at, tweet.full_text.encode('utf-8')])
 +
 +
print ("Scraping finished and saved to "+HashValue+".csv")
 +
#sys.exit()
  
  (see more...: https://www.nltk.org/book/ch03.html)
+
==Webseiten downloaden==
5. noch mehr Handarbeit... << siehe Verena
+
im Html-Format:
 +
  url = "https://theorieblog.attac.de/quo-vadis-homo-spiens/"
 +
html = request.urlopen(url).read().decode('utf8')
 +
print(html[:60])
  
=Text-Preprocessing=
+
schon im Textformat (z.B. von Gutenberg):
 +
from urllib import request
 +
url = "http://www.gutenberg.org/files/2554/2554-0.txt"
 +
response = request.urlopen(url)
 +
raw = response.read().decode('utf8')
 +
print(raw[1000:1275])
 +
 
 +
----
 +
----
 +
=Vorverarbeitung von Texten=
 +
<small><code>exMedia_Machines/Seminar_Einführung-in-die-Programmierung-KI/04_07-11_maschinelles-lesen/'''03_tokenization-english.ipynb'''</code></small>
 +
 
 +
<small><code>exMedia_Machines/Seminar_Einführung-in-die-Programmierung-KI/04_07-11_maschinelles-lesen/'''03_tokenization-deutsch.ipynb'''</code></small>
 +
 
 +
<big>'''https://text-processing.com/demo/'''</big>
 +
 
 +
[[Datei:Nlp-process.png]]
 +
 
 +
see also: https://machinelearningmastery.com/clean-text-machine-learning-python/
 +
 
 +
Wir benutzen hierzu
 +
# die gängigen Python-Tools
 +
# NltK, das Natural Language Toolkit
 +
# textblob-de
 +
----
 +
'''das Natural Language Toolkit NLTK zu installieren'''
 +
 
 +
open conda and type:
 +
conda install nltk
 +
 
 +
----
 +
==Tokenization==
 +
Die Tokenisierung ist der erste Schritt in der Textanalyse. Der Prozess der Zerlegung eines Textabsatzes in kleinere Abschnitte wie Wörter oder Sätze wird als Tokenisierung bezeichnet. Ein Token ist eine einzelne Einheit. Bausteine für einen Satz oder Absatz.
 +
===Whitespace Tokenizer in Python===
 +
Mit der Python-Funktion Split() können wir einen Text leicht aufteilen. In vielen Fällen machen wir dann aber Fehler. Es fängst schon damit an, dass Satzzeichen am vorangehende Wort geschrieben werden, aber nicht dazu gehören, es sei denn, das Wort ist eine Abkürzung oder eine Ordinalzahl, aber letzteres nur im Deutschen...
 +
 
 +
splitten mit python (whitespace):
 +
token_WS=gedicht1.split()
 +
print(token_WS)
 +
 
 +
----
 +
 
 +
===Treebank Tokenizer mit NLTK===
 +
Im nächsten Beispiel sehen wir, wie man mit Python und NLTK eine Zeichenkette in eine Liste von Wörtern aufteilen kann. Wir finden nicht nur Wörter, sondern auch Satzzeichen, Zahlen und Symbole:
 +
 
 +
#from nltk.tokenize import TreebankWordTokenizer
 +
from nltk import word_tokenize
 +
---
 +
# satz by word separieren
 +
tokened_W=word_tokenize(gedicht1, language='german')
 +
print(tokened_W)
 +
---
 +
tweet = "@lindner lol, that was #awesome :)"
 +
tokened_tweet=word_tokenize(tweet, language='english')
 +
print(tokened_tweet)
 +
 
 +
----
 +
 
 +
===oder mit textblob-de...===
 +
from textblob_de import Word
 +
from textblob_de import TextBlobDE as TextBlob
 +
---
 +
tokened_blob_W=TextBlob(gedicht1)
 +
print(tokened_blob_W)
 +
print(tokened_blob_W.words)
 +
 
 +
----
 +
----
 +
 
 +
==Stopwords==
 +
Stoppwörter werden als Rauschen im Text betrachtet. Text kann Stoppwörter wie ''is, am, are, this, a, an, the,'' etc. enthalten.
 +
 
 +
In NLTK - für das Entfernen von Stopwords müssen wir eine Liste von Stopwords erstellen und diese Liste von Tokens dann aus dem Text herausfiltern.
 +
 
 +
Liste von Stoppwörtern erstellen:
 +
from nltk.corpus import stopwords
 +
stop_words=set(stopwords.words("german"))
 +
print(stop_words)
 +
 
 +
Stoppwörter herausfiltern:
 +
filtered_sent=[]
 +
for w in tokenized_sent:
 +
    if w not in stop_words:
 +
        filtered_sent.append(w)
 +
print("Tokenized Sentence:",tokenized_sent)
 +
print("Filterd Sentence:",filtered_sent)
 +
 
 +
----
 +
==Stemming & Lemmatization==
 +
In vielen Sprachen, wie auch im Deutschen und Englischen, können Wöter in verschiedenen Formen auftreten. (Es gibt auch Sprachen, in denen das nicht der Fall ist. Diese Sprachen werden isolierende Sprachen genannt. Beispiele hierfür sind Mandarin (Chinesisch) und Vietnamesisch)). Oft ist es wichtig, den Grundfom eines Wortes, das im Text in flektierter Form vorkommt, zu bestimmen. Es ist wichtig, dass wir hie drei Begriffe klar trennen:
 +
 
 +
* Lemma - Die Form des Wortes, wie sie in einem Wörterbuch steht. Z.B.: Haus, laufen, begründen
 +
* Stamm - Das Wort ohne Flexionsendungen (Prefixe und Suiffixe). Z.B.: Haus, lauf, begründ
 +
* Wurzel - Kern des Wortes, von dem das Wort ggf. durch Derivation abgeleitet wurde. Z.B.: Haus, lauf, Grund
 +
 
 +
Wir unterscheiden in der Textvorverarbeitung ''Stemmer'', Programme, die den Stamm eines Wortes suchen, und '''Lemmatisierer''', die das Lemma für jedes Wort suchen.
 +
 
 +
Oftmals finden die Menschen diese beiden Begriffe verwirrend. Einige behandeln diese beiden gleich. Tatsächlich wird die Lemmatisierung dem Stemming vorgezogen, da die Lemmatisierung die morphologische Analyse der Wörter durchführt.
 +
 
 +
===Lemmatization===
 +
 
 +
Lemmatisierung ist der Prozess der Gruppierung der verschiedenen gebeugten Formen eines Wortes, damit sie als ein einziges Element analysiert werden können. Die Lemmatisierung ist ähnlich wie das Stemming, bringt aber den Kontext zu den Wörtern. So verbindet es Wörter mit ähnlicher Bedeutung zu einem Wort.
 +
 +
from nltk.stem.wordnet import WordNetLemmatizer
 +
lem = WordNetLemmatizer()
 +
 +
word = "flying"
 +
print("Lemmatized Word:",lem.lemmatize(word,"v"))
 +
 
 +
===Stemming===
 +
https://text-processing.com/demo/stem/
 +
 
 +
from nltk.stem.porter import PorterStemmer
 +
stem = PorterStemmer()
 +
 +
word = "flying"
 +
print("Stemmed Word:",stem.stem(word))
  
 
=Rechnen mit Wörtern...=
 
=Rechnen mit Wörtern...=
 +
<small><code>exMedia_Machines/Seminar_Einführung-in-die-Programmierung-KI/04_07-11_maschinelles-lesen/'''04_rechnen-mit-woertern.ipynb'''</code></small>
 +
 +
[[Category:Seminar]]
 +
[[Category:KI]]
 +
[[Category: Natural Language Processing]]
 +
[[Category:Programmierung]]
 +
[[Category:Python]]
 +
[[Category:Computerlinguistik]]
 +
[[Category:Webscraping]]
 +
[[Category:Sentiment Analysis]]
 +
[[Category:Tokenization]]
 +
[[Category:WS2019-20]]

Aktuelle Version vom 15. Juni 2020, 19:33 Uhr

Seminar, 07.11.2019



alle Notebook findet ihr unter /exMedia_Machines/:

exMedia_Machines/Seminar_Einführung-in-die-Programmierung-KI/04_07-11_maschinelles-lesen/01_sentiment-analyses_german-txt.ipynb

exMedia_Machines/Seminar_Einführung-in-die-Programmierung-KI/04_07-11_maschinelles-lesen/02_load_scrape-data.ipynb

exMedia_Machines/Seminar_Einführung-in-die-Programmierung-KI/04_07-11_maschinelles-lesen/03_tokenization-english.ipynb

exMedia_Machines/Seminar_Einführung-in-die-Programmierung-KI/04_07-11_maschinelles-lesen/03_tokenization-deutsch.ipynb

exMedia_Machines/Seminar_Einführung-in-die-Programmierung-KI/04_07-11_maschinelles-lesen/04_rechnen-mit-woertern.ipynb

Sentiment Analysis

exMedia_Machines/Seminar_Einführung-in-die-Programmierung-KI/04_07-11_maschinelles-lesen/01_sentiment-analyses_german-txt.ipynb Textblob.jpeg

in short:

Opinion Mining (manchmal als Stimmungsanalyse oder Emotion AI ) bezieht sich auf

  • die Verwendung von natürlicher Sprachverarbeitung, Textanalyse , Computerlinguistik und Biometrie,
  • systematisches Identifizieren, Extrahieren, Quantifizieren und studieren affektiver Zustände, sowie subjektiver Informationen.

Generell zielt Sentimentanalyse darauf ab, die Haltung eines Sprechers/Autors in Bezug auf einige Themen oder die kontextuelle Polarität / emotionale Reaktion auf ein Dokument, eine Interaktion, oder ein Ereignis zu bestimmen.


Wikipedia:

Sentiment Detection (auch Sentimentanalyse, englisch für „Stimmungserkennung“) ist ein Untergebiet des Text Mining und bezeichnet die automatische Auswertung von Texten mit dem Ziel, eine geäußerte Haltung als positiv oder negativ zu erkennen.


textblob

TextBlob ist ein Tool für natural language processing (NLP) mit Python.

Mit Textblob sind viele Ansätze wie etwa Erkennen von Wortarten, Extraktion von Substantiven, Stimmungsanalyse und auch Klassifizierungen möglich.

schönes Textblob-HowTo: https://aparrish.neocities.org/textblob.html


deutschsprachige Texte

exMedia_Machines/Seminar_Einführung-in-die-Programmierung-KI/04_07-11_maschinelles-lesen/01_sentiment-analyses_german-txt.ipynb

textblob-de installieren

Die Installation von textblob-de erfolgt in zwei Schritten.

1.Terminal start & type:

pip install -U textblob-de

„-U“ sorgt dafür, dass alle notwendigen Abhängigkeiten auf die neueste Version gebracht werden.

2. Sprachmodelle und Sprachdaten aus dem Natural Language Toolkit (NLTK) hinzufügen:

python3 -m textblob.download_corpora

first steps...

type in your Notebook:

from textblob_de import TextBlobDE
textsnippet = TextBlobDE("Das ist alles wunderschön.")
print(textsnippet.sentiment)

englischsprachiger Texte

see notebook: ???

textblob installieren

type in terminal:

pip install -U textblob

first steps...

type in your Notebook:

from textblob import TextBlob
textsnippet = TextBlob('not a very great experiment')
print(textsnippet.sentiment)


How to get the trainigdata?

exMedia_Machines/Seminar_Einführung-in-die-Programmierung-KI/04_07-11_maschinelles-lesen/02_load_scrape-data.ipynb

see more...: https://www.nltk.org/book/ch03.html

File aus eigener Datenbank einlesen

filename = 'Dateipfad'
file = open(filename, 'rt')
amw1 = file.read()
file.close()

vorbearbeitete Trainingsdatenbanken

links hierein

Wikipedia

Wiki2Text

Extrahieren eines Plain-Text-Korpus aus MediaWiki-XML-Dumps wie Wikipedia, siehe: https://github.com/rspeer/wiki2text

Wikiextractor

https://github.com/attardi/wikiextractor

Tweets scrapen

Beispielcode von https://gist.github.com/sxshateri/540aead254bfa7810ee8bbb2d298363e:

import tweepy
import csv
import pandas as pd
import sys

# API credentials here
consumer_key = 'INSERT CONSUMER KEY HERE'
consumer_secret = 'INSERT CONSUMER SECRET HERE'
access_token = 'INSERT ACCESS TOKEN HERE'
access_token_secret = 'INSERT ACCESS TOKEN SECRET HERE'

auth = tweepy.OAuthHandler(consumer_key, consumer_secret)
auth.set_access_token(access_token, access_token_secret)
api = tweepy.API(auth,wait_on_rate_limit=True,wait_on_rate_limit_notify=True)

# Search word/hashtag value 
HashValue = ""

# search start date value. the search will start from this date to the current date.
StartDate = ""

# getting the search word/hashtag and date range from user
HashValue = input("Enter the hashtag you want the tweets to be downloaded for: ")
StartDate = input("Enter the start date in this format yyyy-mm-dd: ")

# Open/Create a file to append data
csvFile = open(HashValue+'.csv', 'a')

#Use csv Writer
csvWriter = csv.writer(csvFile) 

for tweet in tweepy.Cursor(api.search,q=HashValue,count=20,lang="en",since=StartDate, tweet_mode='extended').items():
    print (tweet.created_at, tweet.full_text)
    csvWriter.writerow([tweet.created_at, tweet.full_text.encode('utf-8')])

print ("Scraping finished and saved to "+HashValue+".csv")
#sys.exit()

Webseiten downloaden

im Html-Format:

url = "https://theorieblog.attac.de/quo-vadis-homo-spiens/"
html = request.urlopen(url).read().decode('utf8')
print(html[:60])

schon im Textformat (z.B. von Gutenberg):

from urllib import request
url = "http://www.gutenberg.org/files/2554/2554-0.txt"
response = request.urlopen(url)
raw = response.read().decode('utf8')
print(raw[1000:1275])


Vorverarbeitung von Texten

exMedia_Machines/Seminar_Einführung-in-die-Programmierung-KI/04_07-11_maschinelles-lesen/03_tokenization-english.ipynb

exMedia_Machines/Seminar_Einführung-in-die-Programmierung-KI/04_07-11_maschinelles-lesen/03_tokenization-deutsch.ipynb

https://text-processing.com/demo/

Nlp-process.png

see also: https://machinelearningmastery.com/clean-text-machine-learning-python/

Wir benutzen hierzu

  1. die gängigen Python-Tools
  2. NltK, das Natural Language Toolkit
  3. textblob-de

das Natural Language Toolkit NLTK zu installieren

open conda and type:

conda install nltk

Tokenization

Die Tokenisierung ist der erste Schritt in der Textanalyse. Der Prozess der Zerlegung eines Textabsatzes in kleinere Abschnitte wie Wörter oder Sätze wird als Tokenisierung bezeichnet. Ein Token ist eine einzelne Einheit. Bausteine für einen Satz oder Absatz.

Whitespace Tokenizer in Python

Mit der Python-Funktion Split() können wir einen Text leicht aufteilen. In vielen Fällen machen wir dann aber Fehler. Es fängst schon damit an, dass Satzzeichen am vorangehende Wort geschrieben werden, aber nicht dazu gehören, es sei denn, das Wort ist eine Abkürzung oder eine Ordinalzahl, aber letzteres nur im Deutschen...

splitten mit python (whitespace):

token_WS=gedicht1.split() 
print(token_WS)

Treebank Tokenizer mit NLTK

Im nächsten Beispiel sehen wir, wie man mit Python und NLTK eine Zeichenkette in eine Liste von Wörtern aufteilen kann. Wir finden nicht nur Wörter, sondern auch Satzzeichen, Zahlen und Symbole:

#from nltk.tokenize import TreebankWordTokenizer
from nltk import word_tokenize

---

# satz by word separieren
tokened_W=word_tokenize(gedicht1, language='german')
print(tokened_W)

---

tweet = "@lindner lol, that was #awesome :)"
tokened_tweet=word_tokenize(tweet, language='english')
print(tokened_tweet)

oder mit textblob-de...

from textblob_de import Word
from textblob_de import TextBlobDE as TextBlob

---

tokened_blob_W=TextBlob(gedicht1)
print(tokened_blob_W)
print(tokened_blob_W.words)


Stopwords

Stoppwörter werden als Rauschen im Text betrachtet. Text kann Stoppwörter wie is, am, are, this, a, an, the, etc. enthalten.

In NLTK - für das Entfernen von Stopwords müssen wir eine Liste von Stopwords erstellen und diese Liste von Tokens dann aus dem Text herausfiltern.

Liste von Stoppwörtern erstellen:

from nltk.corpus import stopwords
stop_words=set(stopwords.words("german"))
print(stop_words)

Stoppwörter herausfiltern:

filtered_sent=[]
for w in tokenized_sent:
    if w not in stop_words:
        filtered_sent.append(w)
print("Tokenized Sentence:",tokenized_sent)
print("Filterd Sentence:",filtered_sent)

Stemming & Lemmatization

In vielen Sprachen, wie auch im Deutschen und Englischen, können Wöter in verschiedenen Formen auftreten. (Es gibt auch Sprachen, in denen das nicht der Fall ist. Diese Sprachen werden isolierende Sprachen genannt. Beispiele hierfür sind Mandarin (Chinesisch) und Vietnamesisch)). Oft ist es wichtig, den Grundfom eines Wortes, das im Text in flektierter Form vorkommt, zu bestimmen. Es ist wichtig, dass wir hie drei Begriffe klar trennen:

  • Lemma - Die Form des Wortes, wie sie in einem Wörterbuch steht. Z.B.: Haus, laufen, begründen
  • Stamm - Das Wort ohne Flexionsendungen (Prefixe und Suiffixe). Z.B.: Haus, lauf, begründ
  • Wurzel - Kern des Wortes, von dem das Wort ggf. durch Derivation abgeleitet wurde. Z.B.: Haus, lauf, Grund

Wir unterscheiden in der Textvorverarbeitung Stemmer, Programme, die den Stamm eines Wortes suchen, und Lemmatisierer, die das Lemma für jedes Wort suchen.

Oftmals finden die Menschen diese beiden Begriffe verwirrend. Einige behandeln diese beiden gleich. Tatsächlich wird die Lemmatisierung dem Stemming vorgezogen, da die Lemmatisierung die morphologische Analyse der Wörter durchführt.

Lemmatization

Lemmatisierung ist der Prozess der Gruppierung der verschiedenen gebeugten Formen eines Wortes, damit sie als ein einziges Element analysiert werden können. Die Lemmatisierung ist ähnlich wie das Stemming, bringt aber den Kontext zu den Wörtern. So verbindet es Wörter mit ähnlicher Bedeutung zu einem Wort.

from nltk.stem.wordnet import WordNetLemmatizer
lem = WordNetLemmatizer()

word = "flying"
print("Lemmatized Word:",lem.lemmatize(word,"v"))

Stemming

https://text-processing.com/demo/stem/

from nltk.stem.porter import PorterStemmer
stem = PorterStemmer()

word = "flying"
print("Stemmed Word:",stem.stem(word))

Rechnen mit Wörtern...

exMedia_Machines/Seminar_Einführung-in-die-Programmierung-KI/04_07-11_maschinelles-lesen/04_rechnen-mit-woertern.ipynb