Zielsetzung
Es soll ein Programm zur maschinengestützen Bearbeitung und Erstellung von Interlinearversionen (d.h. interlinearer Textübersetzungen) erstellt werden.
Programmverhalten
Zusammenfassend in Kurzform eine Beschreibung des gewünschten Programmverhaltens
Eingabe
- Gegliederter Eingabetext
- Datenbanktabellen
- Ableitungsregeln
Ausgabe
- Interlinearversion
- veränderte Datenbanktabellen
Anforderungen
- Die Verarbeitung eines Eingabetexts soll dabei grundsätzlich halbautomatisch im Dialog mit dem Benutzer erfolgen. Die Kommunikation mit dem Benutzer soll nur dort ausgelassen werden, wo ausnahmsweise Eindeutigkeit herrscht.
- Auch in Fällen vermeintlich eindeutiger Zuordnung muss es dem Benutzer schnell möglich sein, den automatischen Interlinearisierungsvorgang anzuhalten und einzugreifen.
- Es soll dabei möglich sein die für einen Interlinearisierungsvorgang zur Verfügung stehende Datenbasis im laufenden Betrieb zu erweitern.
- Die Steuerung des automatischen Teils eines Interlinearisierungsvorgangs soll über die Vorgabe von Datenbanktabellen und zugehörigen Ableitungsregeln erfolgen.
- Um spätere Auswertung und Weiterverarbeitung erstellter Interlinearversionen zu ermöglichen sollen diese, sowie verwendete Datenbanktabellen und -regeln in einem standardisierten Format abgelegt werden.
- Die Komponenten sollen modular aufgebaut sein und der Architektur funktionalem Designs möglichst nahekommen. Konkret: Interlinearisator und GUI sollen voneiander getrennt sein, so dass beliebige GUIs implementiert werden können (z.B. GTK+, ncurses, ...). Ferner soll die Interlinearisatorkomponente von den Lookup- und Viewer-Komponenten getrennt sein.
- Die Entwicklung eigener Lookup- und Viewer-Komponenten soll so einfach wie möglich sein.
In einer ersten Erprobungsphase soll hierfür die Brauchbarkeit des JSON Formats erkundet werden. Nähere Informationen zu diesem finden sich in RFC 4627 unter folgendem link. Als Datenbank soll eine noSQL-Datenbank eingesetzt werden, als erster Versuch MongoDB.
Arbeitsweise
Hier die Beschreibung des vorgesehenen Interlinearisierungsvorgangs an Hand eines Beispiels.
Eingabe
Eingabetext
Bei der zu interlinearisierenden Textpassage handelt es sich um einen Ausschnitt aus Antoine de Saint-Exupéry's Werk "le petit prince" (der kleine Prinz), die als Folge von Zeichenketten zur Verfügung stehen soll:
ref |
0001 |
||||||||||||||
1(tx) |
lorsque |
j´avais |
six |
ans |
j´ai |
Dabei ist der Text so gegliedert, dass jedes Segment (meist ein Satz) eine Referenznummer erhält und jede Zeile eines Segmentes mit einem Tag (hier (tx)) versehen ist.
Datenbanktabellen
Bevor es ans Interlinearisieren gehen kann sollte die bereits zum Übersetzungszeitpunkt zur Verfügung stehende Information über die Quellsprache, in der der zu übersetzende Text vorliegt bekannt gemacht werden.
Folgende Datenbanktabellen sollen für dieses Beispiel bereits bekannt sein und somit für den Interlinearisierungsvorgang zur Verfügung stehen:
TABELLE 1 |
|
TABELLE 2 |
|
TABELLE 3 |
|||
(fl) |
(br) |
|
(le) |
(me) |
|
(le) |
(me) |
j´avais |
je-avoir-ais |
|
lorsque |
als |
|
ais |
1sIPF; 2sIPF |
ans |
an-s |
|
je |
ich |
|
s |
PL; 1sPRES; 2sPRES; IMPs |
j´ai |
je-avoir-0 |
|
avoir |
haben |
|
0 |
1sPRES |
|
zur Notation |
Mit ; getrennte Zeichenketten stellen Alternativen dar; Mit - getrennte Zeichenketten hingegen sollen allesamt eingefügt und im nächsten Bearbeitungsschritt als getrennte Einheiten beachtet werden. |
Ableitungsregeln
Schließlich sollte noch festgelegt werden nach welchen Spielregeln die Datenbanktabellen denn überhaupt für den anstehenden Interlinearisierungsvorgang verwendet werden dürfen.
Folgende Vorgaben sollen dabei für dieses Beispiel gelten:
- Ausgehend von der Eingabezeile sollen zwei weitere Zeilen erzeugt werden.
- Zeile 2 soll aus Zeile 1 unter Verwendung der Tabellen 1, 2 und 3 erzeugt werden.
- Zeile 3 soll aus Zeile 2 unter Verwendung der Tabellen 2 und 3 erzeugt werden.
In der ersten Version des Interlinearisators sollen die obigen Regeln vorläufig "fest verdrahtet" sein. Für die Endversion sollen die Ableitungsregeln in einer Domain Specific Language über eine Konfigurationsdatei für ein spezifisches Projekt individuell gesteuert werden können (siehe unten).
DSL für Ableitungsregeln
Die Ableitungsregeln für das obige Beispiel würden ungefähr so formalisiert:
derive (mb) from (tx) split lookup (br) order 132
derive (gl) from (mb) unsplit lookup (me) order 32
In einer weiteren Ausbaustufe sollen statt Tabellennummern externe Applikationen benannt werden können, die als Input ein Lookup-Lemma (sowie ggf. weitere Argumente) erhalten und (ggf. nach Interaktion mit dem Benutzer) einen String als Output zurückliefern, der in der abgleiteten Zeile eingefügt wird. Der zurückgelieferte String kann eine einfaches Wort sein (derive) oder aber ein Wort mit Morphemtrennern (split).
Die erweiterten Ableitungsregeln für das obige Beispiel würden dann lauten:
split (mb) from (tx) use mongo_lookup db.frz.ps (br) || mongo_check db.frz.suff && mongo_check db.frz.lex ;
derive (gl) from (mb) use mongo_lookup db.frz.suff (me) && mongo_lookup db.frz.lex (me) ;
mongo_lookup(database,lemma,return-key) sucht in einer Datenbank (z.B. db.frz.ps) nach dem Element aus der oberen Zeile und gibt als Rückgabewert ein Element aus einem spezifizierten Keyfeld des Datensatzes zurück (z.B. (br)).
mongo_check(database,lemma) überprüft lediglich, ob das Element aus der oberen Zeile in der Datenbank vorhanden ist und gibt dann entweder das Element als Kopie zur Einfügung zurück oder liefert FALSE.
Interlinearisierungsvorgang
Mit den getroffenen Angaben sollte die Übersetzung sollte nun zunächst automatisch von statten gehen.
Erste Schwierigkeiten ergeben sich erst an den farblich markierten Stellen.
ref |
0001 |
||||||||||||||
1(tx) |
lorsque |
j´avais |
six |
ans |
j´ai |
||||||||||
2(mb) |
lorsque |
je |
- |
avoir |
- |
ais |
? |
an |
- |
s |
je |
- |
avoir |
- |
0 |
3(gl) |
als |
ich |
- |
haben |
- |
K |
? |
? |
- |
K |
ich |
- |
haben |
- |
1sPRE |
Konflikte
An den beiden blau gefärbten und mit einem K markierten Stellen stehen mehrere Übersetzungmöglichkeiten im Konflikt.
Laut TABELLE-2 gibt es zur Übersetzung von ait gleich zwei Möglichkeiten 1sIPF und 2sIPF. An dieser Stelle liegt es nun am Benutzer zu entscheiden, welche der beiden Alternativen zu wählen ist. In diesem Fall dürfte dies wohl 1sIPF sein.
Gleiches gilt für die Übersetzung von s auch hier stehen laut TABELLE-2 mehrere Möglichkeiten zur Verfügung.
keine Übersetzung
Ein anderes Problem ergibt sich an den rot gefärbten und mit einem ? markierten Stellen. Hier ist laut sämtlichen zur Verfügung stehenden Tabellen nämlich gar nicht bekannt wie zu übersetzen ist.
Fall 1
Der einfachere Fall betrifft die Übersetzung von ans, dieses ließ sich in Zeile 2 wenigstens noch in an und s trennen und es hängt bloß am letzten Schritt.
Auch hier kann nur der Benutzer weiter helfen: Der fehlende Tabelleneintrag dürfte wohl an = Jahr sein.
Fall 2
Viel früher schon ins Stocken gerät die Übersetzung schließlich bei der Übersetzung von six in Zeile 1. Hier ist noch nicht einmal klar, ob eventuell in Zeile 2 zu trennen ist.
Scheinbar ist dies hier nicht der Fall. Ein weiterer Tabelleneintrag six = sechs sollte hier wohl die korrekte Lösung des Problems sein.
Ausgabe
Nach Durchführung aller genannten Schritte sollten sowohl Interlinearversion, als auch überarbeitete Datenbanktabellen bereit zur Ausgabe sein.
Interlinearversion
ref |
0001 |
||||||||||||||
1(tx) |
lorsque |
j´avais |
six |
ans |
j´ai |
||||||||||
2(mb) |
lorsque |
je |
- |
avoir |
- |
ais |
six |
an |
- |
s |
je |
- |
avoir |
- |
0 |
3(gl) |
als |
ich |
- |
haben |
- |
1sIMP |
sechs |
Jahr |
- |
PL |
ich |
- |
haben |
- |
1sPRE |
Datenbanktabellen
TABELLE 1 |
|
TABELLE 2 |
|
TABELLE 3 |
|||
(fl) |
(br) |
|
(le) |
(me) |
|
(le) |
(me) |
j´avais |
je-avoir-ais |
|
lorsque |
als |
|
ais |
1sIPF; 2sIPF |
ans |
an-s |
|
je |
ich |
|
s |
PL; 1sPRES; 2sPRES; IMPs |
j´ai |
je-avoir-0 |
|
avoir |
haben |
|
0 |
1sPRES |
|
six |
sechs |
|
||||
|
an |
Jahr |
|
Fazit
In zwei besonderen Spezialfällen ist eine Interaktion von Benutzerseite nötig:
- Konflikt zwischen mehreren anwendbaren Übersetzungen
- keine bekannte Übersetzung
Erweiterungsmöglichkeiten
Semantische Hierarchieebenen für Lexikoneinträge
Lexikografen neigen (aus mehr oder weniger rationalen Gründen) dazu, Bedeutungen in Baumstrukturen nach Haupt-, Neben, Über- und Unterbedeutungen zu gliedern. Diese Möglichkeit soll auch hier gegeben werden, indem z.B. das me-Feld als beliebig verschachtelte Liste angelegt und dargestellt werden kann. Beim Lookup jedoch, wird dann jede verschachtelte Liste als flache Liste behandelt.
Screenshots
Hier die (vermutlich) obligatorischen screenshots:
Stand: 04-08-2012
Stand: 07-08-2012
Stand: 07-08-2012
Lizensierung
Das im Verlaufe des Projektes (hoffentlich) entstehende Programm soll sowohl in seiner Erstellungsphase, als auch nach seiner Fertigstellung unter freier Lizenz Verfügbar sein. Welche Lizenz zum Zuge kommt, ist noch zu entscheiden.
Das "frei" in "freier Lizenz" ist hierbei nicht im Sinne von kostenlos zu verstehen, sondern im Sinne der von der FSF formulierten vier wesentlichen Freiheiten freier Software. Nachzulesen genau hier.
Ferner soll das Projekt auch als freies Entwicklungsprojekt auf einer entsprechenden Plattform (github, sourceforge) gehostet werden und öffentlich zur Mitarbeit aufgerufen werden.
Sobald eine halbwegs verwendbare Version (1.0) vorliegt, soll diese in die Repositories der Linux-Distributionen Eingang finden.