Maschinelles Lesen
Aus exmediawiki
07.11.2019
alle Notebook findet ihr unter /exMedia_Machines/:
exMedia_Machines/Seminar_Einführung-in-die-Programmierung-KI/04_07-11_maschinelles-lesen/loesungen/01_sentiment-analyses_german-txt.ipynb
exMedia_Machines/Seminar_Einführung-in-die-Programmierung-KI/04_07-11_maschinelles-lesen/loesungen/load_scrape-data.ipynb
exMedia_Machines/Seminar_Einführung-in-die-Programmierung-KI/04_07-11_maschinelles-lesen/loesungen/01_sentiment-analyses_german-txt.ipynb
exMedia_Machines/Seminar_Einführung-in-die-Programmierung-KI/04_07-11_maschinelles-lesen/loesungen/01_sentiment-analyses_german-txt.ipynb
das Natural Language Toolkit NLTK zu installieren
open conda and type:
conda install nltk
Inhaltsverzeichnis
Sentiment Analysis
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.
deutschsprachige Texte
exMedia_Machines/Seminar_Einführung-in-die-Programmierung-KI/04_07-11_maschinelles-lesen/loesungen/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/loesungen/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
Tweets scrapen
Tweets gefiltert nach Hashtag scrapen: https://medium.com/@limavallantin/mining-twitter-for-sentiment-analysis-using-python-a74679b85546
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
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
Tokenization
type @lindner lol, that was #awesome :) in: https://text-processing.com/demo/tokenize/
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. Der Sammelbegriff für diese Einheiten ist Token. Das Zerlegen einer Zeichenkette in Tokens wird daher Tokenisierung oder auf Engslisch Tokenization genannt.
#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)
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 jetzt Stemmer, Programme, die den Stamm eines Wortes suchen, und Lemmatisierer, die das Lemma für jedes Wort suchen.
https://text-processing.com/demo/stem/
tokened_blob_W.words.lemmatize()