WortWirbler (WoWi) ist ein Grammatik-Übungsprogramm, das von Tobias Bender und Annelen Brunner als Projekt im Rahmen des Computerlinguistikstudiums entwickelt wurde.
Begonnen wurde das Projekt Anfang 2004, Abschlussvortrag war im Februar 2005, offizielle Abgabe im Juli 2005.
Was es momentan über WoWi zu wissen gibt, folgt hier:
Für Benutzer:
Für (Weiter-)Entwickler:
WoWi ist ein Übungsprogramm für den Grammatikunterricht mit Schwerpunkt auf dem Einüben der Eigenschaften von Wörtern und Satzteilen. Es verfügt über eine graphische Benutzeroberfläche und eine Grammatikkomponente, mit deren Hilfe Übungssätze dynamisch generiert und Benutzereingaben analysiert werden.
Momentan stellt das Programm drei Grundübungstypen zur Verfügung:
- Bestimmen der grammatischen Merkmale von Wörtern oder Satzteilen
- Ersetzen von Wörtern oder Satzteilen innerhalb eines Satzes
- Umstellen von Sätzen auf Wort- oder Satzteilbasis
Zurück zum Anfang
Vollständiges Archiv des Projekts
WoWi hat folgende Abhängigkeiten:
- Python <=2.3
- wxPython <=2.4.2.4
- SWI-Prolog >=5.4.0
- pyswipl >=0.2
- TPG >=3.0.0
Da TPG und pyswipl nicht sonderlich weit verbreitet sein dürften, haben wir uns entschlossen, sie mitzuliefern. Zu finden sind beide Module im Verzeichnis opt/. Zur Installation muss man in das jeweilige Verzeichnis wechseln und dort den Befehl
python setup.py install
ausführen. (Nähere Informationen zu TPG und pyswipl finden sich auch im Kapitel Backend)
Sind Python, SWI-Prolog und die beiden Module installiert, kann das Programm im Verzeichnis src/ mit dem Befehl
python wowi.py bzw. pythonw wowi.py
gestartet werden.
Zurück zum Anfang
Die aktuelle Benutzeroberfläche für WoWi ist daraufhin konzipiert, dem Benutzer möglichst viel Freiheit bei der Anpassung der Übungen zu geben und die Einstellungsmöglichkeiten des Programms zu demonstrieren.
Hauptfenster
Das Hauptfenster verfügt über drei Tabs, die den drei Übungstypen Bestimmen, Ersetzen und Umstellen zugeordnet sind.
Alle Übungsoberflächen gliedern sich in den dynamisch generierten Übungssatz, eine Übungsanweisung, deren Wortlaut durch die aktuellen Übungseinstellungen beeinflusst ist, und einen Abschnitt, in dem der Benutzer Manipulationen durchführen kann.
Der Knopf Neuer Satz erzeugt für den gerade aktiven Übungstyp einen neuen Übungssatz mit den aktuellen Einstellungen.
Der Knopf Fertig ruft ein Dialogfenster auf, das die Eingabe des Benutzers bewertet. Ist seine Eingabe für die Übung falsch, kann die Lösung angezeigt werden. Ist die Eingabe richtig oder wurde die Lösung bereits angezeigt, kann aus dem Dialog heraus ein neuer Satz generiert werden.
Mit dem Knopf Zurück ist es in jedem Schritt des Dialogs möglich, abzubrechen und denselben Übungssatz weiter zu bearbeiten.
Das Beenden des Programms erfolgt durch Schließen des Hauptfensters.
Zurück zum Anfang
Einstellungen
Durch Klicken auf den Knopf Einstellungen wird das Einstellungsfenster geöffnet.
Wie das Hauptfenster zeigt es Tabs für die drei Übungsarten, wobei immer die Einstellungen für die Übung im Vordergrund sind, von deren Fenster aus die Einstellungen ausgerufen wurden. Prinzipiell ist es jedoch möglich, die Einstellungen auch für die anderen Übungstypen im gleichen Einstellungen-Aufruf zu ändern.
Veränderte Einstellungen werden durch das Klicken auf OK übernommen. Sie werden allerdings erst auf den nächsten erzeugten Übungssatz angewendet.
Durch Klicken auf den Knopf Standardeinstellungen wiederherstellen können Veränderungen des Benutzers rückgängig gemacht werden.
Verlässt man das Einstellungsfenster mit Abbrechen werden Veränderungen nicht übernommen.
Beim Beenden des Programms werden die aktuellen Übungseinstellungen gespeichert.
Einstellungen für Bestimmen
- Struktur:
- Wörter: Merkmale von Wörtern bestimmen
- Satzteile: Merkmale von Satzteilen bestimmen
- Detailstufe (nur aktiv, wenn bei Stuktur der Wert Wörter gewählt ist):
- Nur Wortart: Nur die Wortart des Übungswortes muss bestimmt werden
- Wortart und Merkmale: Wortart und grammatische Merkmale des Übungswortes müssen bestimmt werden
- Auswahlmöglichkeiten (jeweils eine Liste von Auswahlmöglichkeiten wird aktiv, abhängig davon, ob bei Struktur Wörter oder Satzteile gewählt ist):
Diese Liste bestimmt die Menge der Wort-/Satzteiltypen, aus denen das zu bestimmende Element gewählt wird.
Indem man Markierungen entfernt, kann man also z.B. verhindern, dass Wortarten bestimmt werden sollen, die noch nicht eingeführt worden sind oder, indem man nur einen einzigen Typ markiert, gezielt die Merkmalsbestimmung für einzelne Wortarten einüben.
Zurück zum Anfang
Einstellungen für Ersetzen
- Struktur:
- Wörter: Wörter ersetzen
- Satzteile: Satzteile ersetzen
- Auswahlmöglichkeiten (jeweils eine Liste von Auswahlmöglichkeiten wird aktiv, abhängig davon, ob bei Struktur Wörter oder Satzteile gewählt ist):
Diese Liste bestimmt die Menge der Wort-/Satzteiltypen, aus denen das zu bestimmende Element gewählt wird.
Indem man Markierungen entfernt, kann man z.B. verhindern, dass Wort-/Satzteiltypen ersetzt werden sollen, die noch nicht eingeführt worden sind.
Zurück zum Anfang
Einstellungen für Umstellen
- Struktur:
- Wörter: der umzustellende Satz ist in Wörter gegliedert
- Satzteile: der umzustellende Satz ist in Satzteile gegliedert
- Warnungen:
- deaktiviert: Umstellungen werden nur als grammatisch richtig oder falsch bewertet.
- aktiviert: Es werden zusätzlich Warnungen ausgegeben wenn der Benutzer eine Umstellung gemacht hat, die nicht zwar ungrammatisch, aber ungebräuchlich ist.
Momentan führen nur solche Umstellungen zu Warnungen, bei denen das Subjekt ein Pronomen ist und nicht direkt vor oder hinter dem finiten Verb steht (z. B. "Den Ball gibt dem Kind er.")
Diese Einstellung beeinflusst auch die angebotenen Lösungen. Wenn Warnungen deaktiviert ist, bietet das Programm auch problematische Satzstellungen als mögliche Lösungen an.
- Erlaubte Umstellungsart:
- Frei: Die Aufgabe ist, den vorgegebenen Satz so umzustellen, dass ein neuer, korrekter Satz entsteht.
- Aussagen bilden: Die Aufgabe ist, den vorgegebenen Satz so umzustellen, dass ein Aussagesatz entsteht. Bei dieser Einstellung ist der Übungssatz immer ein Fragesatz.
- Fragen bilden: Die Aufgabe ist, den vorgegebenen Satz so umzustellen, dass ein Frageesatz entsteht. Bei dieser Einstellung ist der Übungssatz immer ein Aussagesatz.
- Satzart beibehalten: Die Aufgabe ist, den vorgegebenen Satz so umzustellen, dass die Satzart sich nicht verändert.
Die Auswahl der Umstellungsart beeinflusst die ausgegebenen Fehlermeldungen.
Umstellungen, die den Sinn des Ausgangssatzes verändern, gelten immer als falsch (außer Satzartveränderungen).
Zurück zum Anfang
WoWi besteht aus drei Hauptkomponenten:
Die Benutzeroberfläche ist problemlos austauschbar.
Backend und Grammatik sind enger miteinander verzahnt, ein Austauschen der Grammatik ist jedoch bei Anpassung bestimmter Elemente ebenfalls möglich. Weitere Informationen über Erweiterung und Umbau gibt es hier.
Die Grammatik ist in SWI-Prolog (Version 5.4.3) programmiert und besteht aus folgenden Dateien:
Die Grammatik verwendet kontextfreie Phrasenstrukturregeln und generiert Sätze mit bis zu drei Objekten (Genitiv, Dativ oder Akkusativ). Nominalphrasen bestehen aus Personalpronomen oder bestimmtem Artikel ( + Adjektiv) + Substantiv. Es gibt nur einfache Verben in Präsens oder Imperfekt.
Hier ein Bespiel für die Satzstruktur, wie sie auch in den ConstNode-Bäumen des Backends abgebildet wird:
Außerdem verfügt die Grammatik über eine einfache Semantik, die sicherstellt, dass keine unsinnigen Übungssätze erzeugt werden.
Die Satzumstellung wird von den Regeln in permute.pl gesteuert.
Für technische Details siehe die Kommentare in den Source-Code-Dateien.
Zurück zum Anfang
Das Backend ist in Python (Version 2.3.3) programmiert und stellt die eigentlichen Übungsfunktionen bereit. Es besteht aus folgenden Dateien:
Das Backend bindet zwei externe (nicht von uns entwickelte) Module ein:
- ToyParserGenerator (Christophe DeLord): Wird verwendet zum Erzeugen des Parsers (prologPythonConverter), der die Prolog-Satzrepräsentationen in Bäume als ConstNodes übersetzt.
- pyswipl (Nathan Denny): Eine Brücke zwischen Python und SWI-Prolog, verwendet zur Kommunikation der Grammatik; 'verpackt' in PrologGrammarWithPyswipl.
Die wichtigsten Backend-Klassen sind:
- GrammarCalls: Steuert die Generierungs- und Parse-Aufforderungen an die Grammatik
- WoWiBackend: Die einzige Backendklasse, die vom der graphischen Benutzeroberpläche instatiiert werden muss. Hier sind die Grundfunktionen für die Übungen implementiert.
Detailierte Informationen über die Klassen und Methoden der Backend-Dateien (nur der Backend-Dateien, ohne die Prolog-Grammatik!) kann man in der WoWi Documentation nachlesen, die mit Hilfe des Programms Doxygen automatisch erstellt wurde.
In der Datei pretty_test.py sind einige Backend-Tests implementiert, die man ohne die graphische Benutzeroberfläche ausführen kann.
Zurück zum Anfang
Die graphische Benutzeroberfläche ist in wxPython programmiert und wurde von Tobias Bender entwickelt. Technische Einzelheiten kann man in der WoWi Documentation nachlesen, die mit Hilfe des Programms Doxygen automatisch erstellt wurde.
Zurück zum Anfang
Neue Übungstypen
Auf Grundlage der öffentlichen Funktionen von WoWiBackend und ConstNode ist die Implementierung anderer Übungstypen möglich, die nur eine Anpassung der GUI-Funtionalität erfordern. Denkbar wären z. B.
- die Aufgabe, alle möglichen Umstellungen eines Satzes zu finden
(Wie Umstellen, aber mit Speicherung der bereits gefundenen Sätze. Zusätzliche Fehlermeldung für bereits gebildeten Satz hinzufügen)
- die Aufgabe, einen korrekten Satz aus vermischten Wörtern/Satzteilen zu konstruieren
(Aufgangssatz erzeugen und die Komponenten bei der Anzeige durchmischen. Fehlermeldung 'illegal_permutation_same_sentence' müsste blockiert werden)
Zurück zum Anfang
Austauschen der Benutzeroberfläche
Ein Austauschen der graphischen Benutzeroberfläche ist problemlos möglich.
Die Kommunikation mit dem Backend erfolgt ausschließlich über die öffentlichen Funktionen in WoWiBackend.py. Es gibt hiervon drei für jeden Übungstyp, die jeweils das Erzeugen des Übungssatzes, das Verarbeiten der Benutzereingabe und das Generieren der Lösung steuern. Ihr Verhalten kann je nach Bedarf durch verschiedene Parameter beeinflusst werden. Für technische Details siehe die Kommentare in den Source-Code-Dateien und die WoWi Documentation.
Zu beachten ist auch die Datei conf_converter.py, die interne Namen und Messagestrings übersetzt. Sie kann für eine neue Benutzeroberfläche übernommen oder nach Bedarf angepasst werden.
Zurück zum Anfang
Austauschen der Grammatik
Ein vollständiges Austauschen der Grammatik erfordert Anpassung aller Backend-Komponenten mit Ausnahme der Klasse WoWiBackend.
Insbesondere ist zu beachten:
- Alle öffenlichen Funktionen der Klasse GrammarCalls müssen mit gleicher Funktionalität beibehalten und für die neue Grammatik angepasst werde.
- Die Klasse StructureParser (in prologPythonConverter.py) muss durch eine neue Klasse ersetzt werden, die von der Satznotation der Grammatik in ConstNode-Bäume übersetzt.
- In der Klasse ConstNode müssen die Funktionen prologRepr, printProlAttr, printProlVal und print_prol_surface für die Rückübersetzung in die Grammatiknotation angepasst werden.
Ein partielles Austauschen von Komponenten der Prologgrammatik ist problemlos möglich, solange die Form der Aufrufe gleich bleibt.
Falls die Aufrufssyntax sich ändert, müssen entsprechende Anpassungen in GrammarCalls vorgenommen werden.
Zurück zum Anfang