FWPF Text Mining (dsci-txt) SS 2021¶
Eckdaten:
Moodle: https://moodle.haw-landshut.de/course/view.php?id=6589, Einschreibeschlüssel: Wissenschaft
Inhalte siehe Modulhandbuch: http://www.jbusse.de/public/Modul_dsci-txt.html
Einführung und Beginn:
Do 2020-03-18, 10:30-11:15
Zoom: siehe Moodle
Hinweis:
Wie in allen Veranstaltungen im Bereich KI und auch einigen anderen Fächern wie IoT, Security u.V.m. arbeiten wir mit Python. WIF-Studierende in einem Fachsemester >= 3 haben aber noch kein Python gelernt. Deshalb startet die Veranstaltung mit einer Python Intensiv-Phase, die dann in KW 14 abgeschlossen sein wird.
Coronabedingt sind die Pools in der HAW noch geschlossen. Damit wir in einer kontrollierten Umgebung sofort schnell losarbeiten können, stelle ich Ihnen ein Datascience Lab in Form einer komplett ausgesatteten virtuellen Linux-Maschine unter Oracle VirtualBox zur Verfügung. Technische Voraussetzungen siehe dsci-lab.
Themen und Termine¶
KW 11¶
Do 2021-03-18, 10:30 Uhr: Vorbesprechung
Besprechung Studienarbeit
Abschreiben erlaubt - machmal ;-)
TBD Teilnehmer die nächsten Tage:
anonymen Account besorgen bei https://www.codewars.com/ (Demo JB)
Installation dsci-lab
Download: http://jbusse.de/dsci-lab/dsci-lab-getstarted.html
Download der vdi-Datei: heute (Do) ab ca 12 Uhr
user und passwort: siehe Moodle
Sie erhalten eine automatisch generierte Einladung vom dsci-txt-wiki: Bitte Passwort setzen (aber ungleich haw-passwort).
Do Nachmittag:
unser Wiki läuft: https://wiki.lab.if.haw-landshut.de/doku.php?id=dsci-txt:start
Intro in das dsci-lab
Intro codewars
KW 12¶
Do 2021-03-25
dsci-lab ist bei den TN installiert und betriebsbereit
Einführung in das Wiki (Accounts im Wiki anlegen, Wiki einrichten: Das mache ich auf Basis der Daten im Moodle-Kurs)
Do 2021-04-01 Gründonnerstag: vorlesungsfrei
KW 14¶
Besprechung von Moodle > a3.md
Wie sieht die Lage bei Codewars aus? https://www.codewars.com/dashboard
unser Clan: dsci-sgl (Data Science selbstgesteuertes Lernen)
Beispiel Moodle > dsci-txt-mdsim.zip
Ideen für Veränderungen: Vergleiche Dateien
nur anhand von Zeilen, die keine Überschriften sind
nur anhand ihrer (Markdown-) Überschriften
KW 15¶
JB ist auf Dienstreise; asynchrones Lernen mit Moodle > a3.md, Feedback nächste Woche.
KW 16¶
Besprechung a3.md
, sowie https://www.codewars.com/dashboard
Kollaborative Erstellung eines Toy-Corpus¶
Erstellen Sie eine Freemind-Mindmap, die Sie in die mündliche Prüfung mitnehmen dürfen
in den Root-Knoten bitte ein möglichst eindeutiges Pseudonym eintragen
Zoom Breakout 15 Min, 3er Gruppen
hochladen auf Moodle: https://moodle.haw-landshut.de/mod/assign/view.php?id=276671
Verwendung des Corpus’:
Wir in unserem Kurs: Textmining aus hoch strukturierten Dokumenten
Bachelorarbeit MK
allerlei öffentliche Experimente
Einführung in 20 newsgroups
¶
Einführung z.B. bei Kaggle:
more sopisticated bei sciki-learn:: https://scikit-learn.org/stable/auto_examples/text/plot_document_classification_20newsgroups.html?highlight=newsgroups
Im Detail anschauen:
Wie ist so eine Newsgroup-Message aufgebaut?
Wir können wir die einzelnen Teile separieren?
Welche Daten wollen wir für den BoW auslesen?
Welche anderen semi-strukturierten Daten wollen wir auslesen?
basic: mit RegEx.
sophisticated: mit SpaCy
etc.
Ergebnissicherung: Etherpad: 20 Newsgroups KW 14
KW 17: Web-Crawling von Vereins-Terminen¶
2021-04-29: Erfahrungen aus der Masterarbeit LW.
KW 18: wget, pandoc¶
Kurze Übersicht in das Web-Crawlen mit wget, Nachbearbeitung mit Pandoc.
wget¶
Ausprobieren erlaubt mit http://jbusse.de/gpdscl/README.html - aber bitte serverfreundlich (!), d.h. mit wait!
Doku: https://www.gnu.org/software/wget/manual/, z.B. html, [PDF file (444K bytes)][https://www.gnu.org/software/wget/manual/wget.pdf)
weitere Beispiele z.B. hier:
Zusammensuchen:
only if the version on server is newer than your local copy
exclude some directories
limit the retrieval rate
include a wait period between consecutive fetch requests to reduce the server load
–convert-links
–adjust-extension
-np no parents!
download ONLY HTML files (ignore images, css, js): -A, -R, –follow-tags, –ignore-tags
pandoc¶
Pandoc ist ein Zauberkasten, um zwischen Formaten zu wechseln:
Mehrere Dokumente nacheinander mit Pandoc konvertieren: https://phlow.de/magazin/terminal/pandoc/:
$ for i in *.md;do pandoc -s -S $i -t asciidoc -o $i.adoc; done
Pandoc aus Python aufrufen: https://pypi.org/project/pypandoc/
beautifulsoup¶
https://pypi.org/project/beautifulsoup4/
Ausprobieren:
http://jbusse.de/gpdscl/README.html
KW xxx¶
Wofür brauchen wir regex? Siehe die Beispiele aus KW 16 im Etherpad Etherpad: 20 Newsgroups KW 14
super Umgebung zum Ausprobieren und Visualisieren: https://regex101.com/
https://chrisalbon.com/ > Regular Expressions
Studienarbeit¶
Die LV besteht darin, die Studienarbeit während des Semesters anzufertigen.
zu Teilen, die rechtzeitig abgegeben werden, gibt es konstruktives Feedback.
Einige Abgaben sind für alle andere TN sichtbar:
Wir erzeugen damit einen Text-Korpus, den wir im Rahmen unserer Projekte selbst wieder zum Gegenstand unserer Textanalysen machen, insbesondere für Textähnlichkeits-Analysen.
Endergebnis: Zip-Datei, die gut dokumentiert alle relevanten Ergebnisse des Semesters enthält
Python Kompetenznachweis¶
Die Inhalte dieses Buchs sollten Sie beherrschen:
Idee:
Ein Cookbook ähnlich https://chrisalbon.com/
Eine Sammlung von Codewars-Aufgaben und Lösungen als dsci-txt-wiki
Unser Spielplatz:
Ergebnissicherung:
genügend Codewars-Honors bis KW 15
genügend schöne Einträge im Wiki
In KW 15 möglich:
eine Zwischenklausur (digital, asynchron, Lösungszeit ein paar Tage, Zuhause)
Abschreiben möglich, aber nicht zu oft erwünscht
Wir werden die Ergebnisse der Klausur selbst wieder als Textgrundlage verwenden: Information retrieval from Python-Text
RegEx¶
Extraktion von Uhrzeit aus Plaintext
Wir treffen uns Dienstags immer um 19 Uhr im großen Saal Proben sind Mittwochs 19:00-21:00 Donnerstags 18.30 bis 20.00 Uhr Treffpunkt Freitags 19 Uhr im Audimax G007
Aspekte:
einen Substring auswählen
definieren, was man damit machen will:
den Substring behalten?
einen String anhand der Substrings splitten?
den Substring als komplexes Objekt mit Anfang und Ende speichern
Wir treffen uns Dienstags immer um 19 Uhr im großen Saal.
Mittwochs 19:30-21:00 und Donnerstags 18 bis 20 Uhr ist offenes Training. An ungeraden Donnerstagen trainiert ab 20.15 Uhr dann noch die Leistungsgruppe in der großen Halle.
spaCy¶
https://spacy.io/usage/linguistic-features
https://spacy.io/usage/spacy-101
https://spacy.io/usage/rule-based-matching
Ergebnis der Nachmittags-Übung: spacyTestNotebook.ipynb
Projektidee für die Studienarbeit¶
Anliegen JB:
Ähnlichkeit zwischen semi-strukturierten Datensätzen (hier: Mindmaps) finden.
Im Detail:
Unsere Datensätze sind Mindmaps. Jeder Datensatz ist eine eigene Mindmap.
Die Mindmaps werden auf Basis der Aufgabenstellung “Stelle den Inhalt des Textes XXX als eine Freeplane-Mindmap dar” erzeugt. Lösungsbeispiel: die Mindmap unter https://de.wikipedia.org/wiki/Gew%C3%A4sser.
Nicht nur die Knoten-Inhalte sind interessant, sondern auch die (Baum-) Struktur der Mindmap, also Ober- und Unterbegriff
Die Mindmaps liegen als XML-Dateien vor: Auch die im XML enthaltenen Informationen könnten für die Ähnlichkeitssuche interessant sein.
Lösungsansatz
Wir betrachten ausschließlich die Text-Information der Mindmap plus Attribute von
NODE
-Elementen wie z.B.CREATED
,MODIFIED
. Wir betrachten keine komplexeren Layout-Mechanismen wie z.B. Farben, Wolken etc.Die Lösung liegt schon als Gerüst vor (Moodle > dsci-txt-mmsim.zip), und kann jetzt kreativ erweitert werden.
Aktuelle Herausforderungen:
Manche Knoten enthalten Daten, die man an ihrer Struktur erkennt, z.B. ein HAW-Account (z.B. “s-jbusse”), ein Datum, eine Telefonnummer etc.: identifizieren, spezielle Behandlung?
Bei manchen Knoten ist der Typ explizit angegeben, z.B.
Name: BUJ
oderDatum: 2021-06-17
: Auslesen, in ein DataFrame speichern?Momentan werden z.B. die Knoten
Fließgewässer
/fließende Gewässer
,Sankt Helena
/St. Helena
oderOzean
/Ozeane
als komplett unterschiedlich betrachtet. Kann man mit spaCy hier etwas machen, z.B. Lemmatisieren? (anspruchsvoller)