Einführung in die CL-Programmierung mit Python (WS 19/20)
Dozierende: Esther Seyffarth, Ben Burkhardt
Dieser Kurs richtet sich an:
- Erstsemester-Studierende im Bachelorstudiengang Computerlinguistik
- Studierende mit linguistischem Interesse oder linguistischem Studiumsschwerpunkt, die programmieren lernen möchten
- Informatikstudierende mit linguistischem Interesse (ohne Vorkenntnisse in Python)
- Mitarbeiter_innen der HHU, die grundlegende Programmierkenntnisse erwerben möchten. Falls Sie keinen Studierendenstatus haben, können wir Ihre Übungsaufgaben leider nicht korrigieren. Sie sind aber in den Vorlesungen herzlich willkommen.
Ziel des Kurses ist es, einen ersten Einblick in die Programmiersprache Python zu geben und grundlegende Fähigkeiten zur Nutzung und zum Lernen von Programmiertechniken zu vermitteln. Der Schwerpunkt liegt auf der automatischen Verarbeitung sprachlicher Daten.
Die Webseite des Python-Kurses aus dem WS 18/19 ist hier zu finden.
Teilnehmende in Kursen von Esther Seyffarth müssen den Leitfaden lesen und werden aufgefordert, sich daran zu halten. Der Leitfaden ist als PDF hier auf deutsch und hier auf englisch zu finden.
News (aktualisiert am 11.11.2019)
- Info-Mail vom 11.11.: Wiederholungssitzung, Übungsquiz statt Programmieraufgaben, Feedbackformular [Mailtext]
- Info-Mail vom 21.10.: Übungssitzung am 23.10. nur in einem Raum [Mailtext]
- Info-Mail vom 15.10.: Übungen, Leitfaden [Mailtext]
- Info-Mail vom 14.10.: Filmaufnahmen in der Sitzung am 15.10. [Mailtext]
- Info-Mail vom 10.10.: Python-Installation reparieren, VSCode einrichten & nutzen, Jupyter auf Macbooks, Übungsaufgabe 01-04; Anwesenheitspflicht, Aufgaben nachreichen, Anzahl zu lösender Aufgaben [Mailtext]
- Info-Mail vom 08.19.: LSF-Anmeldungen, Vorbereitung für die Übung, Eduroam [Mailtext]
- Für die Übungssitzung (mittwochs) steht uns zusätzlich zu 24.21.03.62-64 jetzt auch der Raum 24.21.03.61 zur Verfügung.
- Info-Mail vom 06.10.: Begrüßung, erste Empfehlungen [Mailtext]
News (Archiv)
- Der Kurs "Einführung in die CL-Programmierung mit Python" wird auch im Wintersemester 2019/2020 von Esther Seyffarth und Ben Burkhardt unterrichtet.
- Der Kurs aus dem WS 18/19 wurde für den Lehrpreis der Heinrich-Heine-Universität nominiert. Vielen Dank an die Nominierenden!
Organisatorisches
Der Kurs wird mit einem Beteiligungsnachweis (BN) abgeschlossen. Um den BN zu erwerben, müssen Teilnehmende mindestens 50% der wöchentlichen Übungsaufgaben sinnvoll bearbeitet haben. Jede Woche werden etwa 4 Aufgaben gestellt, aus denen Sie sich diejenigen, die Sie bearbeiten, selbst aussuchen können.
Dienstags findet von 16:30 bis 18:00 in Raum 24.21.03.62-64 die Vorlesung statt. Mittwochs findet von 16:30 bis 18:00 in Raum 24.21.03.62-64 und Raum 24.21.03.61 die Übungssitzung statt, in der die Aufgaben gelöst und praktische Fragen geklärt werden können.
Es gibt weder dienstags noch mittwochs eine Anwesenheitspflicht. Es wird dringend empfohlen, mindestens an den Übungssitzungen regelmäßig teilzunehmen. Die Lösung der Übungsaufgaben wird in den Sitzungen kontrolliert.
Installationshinweise
Um Python auf Ihrem eigenen System einzurichten, können Sie sich auf https://www.python.org/downloads/ die passende Version für Ihr Betriebssystem herunterladen und installieren, z.B. Python 3.7.4 für Windows. Sie können die Installation zum Schluss testen, indem Sie eine Kommandozeile öffnen und python
eingeben und das Kommando mit Enter abschicken. Eine Anleitung dazu, wie Sie eine Kommandozeile öffnen, finden Sie z.B. hier für Windows, hier für Linux, hier für Mac.
Damit Sie auf Ihrem eigenen Gerät die Jupyter Notebooks (s.u.) verwenden können, muss noch ein zusätzliches Modul installiert werden. Dazu starten Sie die Kommandozeile als Administrator (Anleitung für Windows, Anleitung für Linux, Anleitung für Mac) und geben pip install jupyter
ein.
Alternativ zur oben beschriebenen Installation von Python und Jupyter empfehlen wir die Installation von anaconda (Pythonversion 3.6 oder 3.7). Falls bei der Installation Probleme auftreten, sprechen Sie uns bitte an, damit wir Sie unterstützen können.
Da die Vorlesungen und Übungen in einem PC-Pool stattfinden, können Sie in diesem Kurs durchgehend die Uni-Computer nutzen. Wenn es Ihnen mit geringem finanziellem, technischem und logistischem Aufwand möglich ist, empfehlen wir allerdings, einen eigenen Laptop mitzubringen.
Als Editor für die Pythondateien im Kurs verwenden wir VSCode.
Unterrichtsmaterialien
Die Vorlesungsskripte haben die Form von interaktiven Jupyter Notebooks. Sie können die einzelnen Skripte herunterladen (Rechtsklick, "Ziel speichern unter" bzw. "Save link as") und dann den Ordner, der die Dateien enthält, in der Kommandozeile öffnen (eine Anleitung dazu finden Sie z.B. hier für Windows, hier für Linux, hier für Mac).
Geben Sie dann in der Kommandozeile jupyter notebook
ein und bestätigen Sie die Eingabe mit Enter
. In Ihrem Browser öffnet sich eine Übersicht über alle Notebooks im Ordner. Wenn Sie ein Notebook auswählen, öffnet es sich in einem neuen Tab und Sie können damit arbeiten.
Falls Sie nicht mit anaconda
arbeiten, installieren Sie bitte Jupyter nach der Anleitung auf der offiziellen Webseite.
Unterrichtsskripte (Notebooks)
- 2019-10-08 Einführung ([jupyter notebook], [pdf], [html]) - Themen: Python als interpretierte Programmiersprache, Codekommentare, Installation, Command Line, VSCode, Organisatorisches, Variablen, Typen
- 2019-10-15 ([jupyter notebook], [pdf], [html]) - Themen: Schleifen, Bedingungen, Operationen, Strings
- 2019-10-22 ([jupyter notebook], [pdf], [html]) - Themen: Indexing, Slicing, Mutability, Dictionarys, Zufallszahlen
- 2019-10-29 ([jupyter notebook], [pdf], [html]) - Themen: Wiederholung zu Übungsaufgabe 03-03, User-Input, Dateien lesen und schreiben
- 2019-11-05 ([jupyter notebook], [pdf], [html]) - Themen: None, Funktionen, Module, Namespaces
- 2019-11-12 ([jupyter notebook], [pdf], [html]) - Themen: Wiederholungssitzung
- 2019-11-19 ([jupyter notebook], [pdf], [html]) - Themen: Dokumentation, Recherche, Mengen
- 2019-11-26 ([jupyter notebook], [pdf], [html]) - Themen: String Formatting, Regular Expressions
- 2019-12-03 ([jupyter notebook], [pdf], [html]) - Themen: Fehlererkennung und Fehlerbehebung
- 2019-12-10 ([jupyter notebook], [pdf], [html]) - Themen: Tupel, Comprehensions, Rekursion
- 2019-12-17 ([jupyter notebook], [pdf], [html]) - Themen: Linting, Programmierstil, Debugging
- 2020-01-07 ([jupyter notebook], [pdf], [html]) - Themen: Wiederholungssitzung
- 2020-01-14 ([jupyter notebook], [pdf], [html]) - Themen: Strukturierte Formate (JSON, CSV, XML, SQLite)
- 2020-01-21 ([jupyter notebook], [pdf], [html]) - Themen: Arbeiten mit Texten, NLTK, Computerlinguistik
- 2020-01-28 ([jupyter notebook], [pdf], [html]) - Themen: Ausblick
Übungsaufgaben
Hier erscheinen im Laufe des Semesters nach und nach die Übungsaufgaben. Sie können die Dateien (je ein zip-Archiv) herunterladen und dann die Aufgaben auf Ihrem Gerät bearbeiten. Denken Sie daran, Ihre gelösten Aufgaben an einem sicheren Ort zu speichern!
- Übung 1 (9.10.2019): Installation, Variablen, VSCode, komplexe Ausdrücke, Datentypen, Pythondateien, Tooltips
- Übung 2 (16.10.2019): String-Operationen, Schleifen, Bedingungen, Vergleichsoperationen
- Übung 3 (23.10.2019): String-Formatierung, Dictionarys, Indexing, Slicing, Zufallszahlen
- Übung 4 (30.10.2019): Dictionarys, Dateien lesen, Dateien Schreiben
- Übung 5 (06.11.2019): Dictionarys, Funktionen, Module, Feedback
- Übung 6 (13.11.2019): Wiederholung! Quiz mit Wiederholungsfragen zu den bisherigen Kursinhalten. Bitte die Uni-Mailadresse eingeben. Sie erhalten für diese Woche einen Punkt, wenn Sie das Quiz fehlerfrei bearbeiten. Sie haben beliebig viele Versuche frei.
- Übung 7 (20.11.2019): Mutability, Identity, StackOverflow, Mengenoperationen
- Übung 8 (27.11.2019): String-Formatting, Funktionen, Reguläre Ausdrücke
- Übung 9 (04.12.2019): String-Formatting, Fehler korrigieren,
try
undexcept
- Übung 10 (11.12.2019): Tupel, verschachtelte Funktionen, Comprehensions, Rekursion
- Übung 11: Weihnachtsprojekt (siehe unten)
- Übung 12 (08.01.2020): Reguläre Ausdrücke, Dateien, Funktionen, Print
- Übung 13 (15.01.2020): JSON-Dateien in Text umwandeln, Textdateien in JSON umwandeln
- Übung 14 (22.01.2020): N-Gramme erzeugen, N-Gramme verwenden
- Übung 15 (29.01.2020): Wiederholung! Quiz mit Wiederholungsfragen zu den Kursinhalten. Bitte die Uni-Mailadresse eingeben. Sie erhalten für diese Woche einen Punkt, wenn Sie das Quiz fehlerfrei bearbeiten. Sie haben beliebig viele Versuche frei.
Weihnachtsprojekt (18.12.2019)
In der letzten Übungssitzung des Jahres haben wir zusammen ein Programmierprojekt in Gruppenarbeit implementiert. Dazu wurde der Kurs in drei Gruppen aufgeteilt. Am Ende der Sitzung haben wir Ihre Teillösungen zusammengefügt, um das Projekt abzuschließen.
Die zip-Datei mit den Aufgabenstellungen und Rohdaten finden Sie hier.
Die zip-Datei mit den Ergebnissen der drei Gruppen finden Sie hier.
Das fertige Projekt ist online verfügbar unter balladen.pythonanywhere.com. Jedes Mal, wenn die Seite neu geladen wird, entsteht ein neues Gedicht.
Das Ziel
Wir generieren anhand deutschsprachiger Gedichte oder Balladen neue Texte. Die neuen Texte sehen fast aus wie die Originale, nur dass wir die meisten Substantive durch andere Substantive ersetzen, die grammatikalisch an die gleiche Stelle passen wie das jeweilige Originalwort.
"Wer wagt es, Kleistersmann oder Knapp,
Zu tauchen in diesen Grundsprachumfang?
Einen goldnen Versicherungsberater werf ich hinab,
Verschlungen schon hat ihn der schwarze Naturbegriff.
Wer mir den Versicherungsberater kann wieder zeigen,
Er mag ihn behalten, er ist sein eigen."
Das Ergebnis wird auf einer Webseite angezeigt. Jedesmal, wenn die Seite neu geladen wird, erzeugt das Programm ein neues Gedicht.
Damit wir in der Sitzung fertig werden, sind jeweils Teile des Codes schon vorgegeben, vor allem die Struktur der Funktionen und ihre Argumente. Erklärungen sind in den Dateien mit dem Stichwort NOTE
markiert. Stellen, an denen Sie Code ergänzen sollen, sind mit TODO
markiert. Jede Gruppe wird von eine_r Dozierenden oder unserem Tutor betreut, damit Sie jederzeit nach Tipps fragen können.
Die entstehende Webseite wird nach der Übungssitzung online gestellt. Falls alle einverstanden sind, wird auch der Code Ihrer Lösungen veröffentlicht.
Gruppe 1: Wortklassen sammeln
Gruppe 1 (mindestens 3 Personen) wird sich damit beschäftigen, mögliche Ersetzungskandidaten für Substantive zu ermitteln. Sie bekommen dafür eine Datei, in der für 480.131 deutsche Substantivformen morphologische Annotationen aufgelistet sind:
...
Adventskalender Masc_Nom_Sg Masc_Nom_Pl Masc_Gen_Pl Masc_Dat_Sg Masc_Acc_Sg Masc_Acc_Pl
Adventskantate Fem_Nom_Sg Fem_Gen_Sg Fem_Dat_Sg Fem_Acc_Sg
Adventskerze Fem_Nom_Sg Fem_Gen_Sg Fem_Dat_Sg Fem_Acc_Sg
Adventskonzert Neut_Nom_Sg Neut_Dat_Sg Neut_Acc_Sg
Adventskranz Masc_Nom_Sg Masc_Dat_Sg Masc_Acc_Sg
...
Im Ausschnitt sehen Sie, dass die Wörter "Adventskantate" und "Adventskerze" die gleichen morphologischen Eigenschaften haben und deshalb untereinander ausgetauscht werden könnten.
Gruppe 1 wird solche Übereinstimmungen in der Datei automatisch identifizieren und ein Dictionary erstellen, in dem jeder Wortklasse (beschrieben durch eine Sequenz morphologischer Eigenschaften) alle bekannten Wortformen zugeordnet werden, die in diese Klasse gehören.
{ "Masc_Nom_Sg Masc_Nom_Pl Masc_Gen_Pl Masc_Dat_Sg Masc_Acc_Sg Masc_Acc_Pl": {"Adventskalender"},
"Fem_Nom_Sg Fem_Gen_Sg Fem_Dat_Sg Fem_Acc_Sg": {"Adventskantate", "Adventskerze"},
"Neut_Nom_Sg Neut_Dat_Sg Neut_Acc_Sg": {"Adventskonzert"},
"Masc_Nom_Sg Masc_Dat_Sg Masc_Acc_Sg": {"Adventskranz"}
}
Benötigte Skills:
for
,if
- Dateien öffnen und verarbeiten
- Stringmethoden (z.B.
split
) - Dictionarys anlegen
- Funktionen
Gruppe 2: Texte generieren
Gruppe 2 (mindestens 5 Personen) bekommt diese Substantivklassen von Gruppe 1 und hat die Aufgabe, Gedichttexte aus Dateien zu lesen und neue Texte anhand der Originale und des Dictionarys zu erzeugen.
Dazu gehört auch, dass zunächst Substantive im Originaltext gefunden werden müssen. Dann müssen diese Substantive im Dictionary gesucht und die möglichen Ersatzwörter identifiziert werden. Schließlich muss für jedes Substantiv im Gedicht ein Ersatzwort ausgewählt werden, und jedes Vorkommen des ursprünglichen Wortes muss durch das neue Wort ersetzt werden.
Benötigte Skills:
for
,if
- Reguläre Ausdrücke (
re.sub
,re.search
) - Dictionarys anlegen
- Dictionarys sortiert verarbeiten (
sorted
) - Zufallsauswahl aus Mengen (
random.sample
) und Listen (random.choice
) - Funktionen
Gruppe 3: Webseite präsentieren
Gruppe 3 (mindestens 3 Personen) bekommt die generierten Gedichte von Gruppe 2 und hat die Aufgabe, diese in Form einer Webseite zu präsentieren. Die Webseite wird mit dem Pythonpaket flask
bereitgestellt. Die Gedichte werden von Gruppe 2 im "Plain text"-Format erstellt, was in HTML nicht so gut aussieht (es fehlen zum Beispiel die Zeilenumbrüche). Gruppe 3 soll deshalb einige HTML-Tags an passenden Stellen einfügen, um das Gedicht etwas schöner darzustellen. Schließlich soll noch ein fertig vorbereiteter Disclaimer-Text aus einer Datei gelesen und unterhalb des Gedichts angezeigt werden.
Benötigte Skills:
- Reguläre Ausdrücke (
re.sub
) - Stringoperationen (z.B.
replace
) - Dateien lesen
- Funktionen
This space is intentionally left blank