[Trennmuster] Kommentare zu »umformatierung.py«
Guenter Milde
milde at users.sf.net
Do Mär 29 01:21:23 CEST 2018
On 27.03.18, Werner LEMBERG wrote:
> > Ich schlage zum besseren Verständnis vor, die Definition der Felder
> > von den Ersetzungsregeln zu trennnen und gleich hier Beispiele
> > einzufügen.
> OK.
> > Feld 1 (`de`) ist ein Pflichtfeld, die anderen Felder können
> > weggelassen werden, wenn sich der Inhalt über regelmäßige
> > Transformationen_ aus einem generischeren Feld gewinnen lässt:
> >
> > 2. `de-1901` aus `de` mit „Rechtschreibreversion_“
> > 3. `de-CH` aus `de` mit SZ-Ersatz_
> > 4. `de-1901-x-versal` aus `de-1901` mit SZ-Ersatz_
> > 5. `de-CH-1901` aus `de-1901` mit SZ-Ersatz
> >
> > Die Ersetzung erfolgt rekursiv.
> Dieses »rekursiv« gefällt mir gar nicht. Das beschreibt einen
> Algorithmus (nämlich Dein Python-Skript)
Es beschreibt die Ersetzungsmöglichkeiten kompakt in der Form
eines allgemeinen Algorithmus (unabhängig von der Implementierung).
> und ist in der Praxis *nicht* trivial umsetzbar. Ich habe wirklich
> lange gebraucht, bis das in meinem Skript funktioniert hat.
Wahrscheinlich längst nicht so lange wie ich. Zumal sich die Regeln im
Gebrauch auch erst geklärt haben und dann noch eine prägnante Darstellung zu
finden war.
> Ich möchte stattdessen deskriptive Regeln, Feld für Feld.
Das ist deutlich komplexer aber keine Hexerei: Einfach die Rekursion "inline
schreiben":
1. Pfichtfeld, kann nicht abgeleitet werden
2. aus 1. mit "Rechtschreibreversion"
3. aus 1. mit ß-Ersatz (Trennung nach Sprechsilben)
4. aus 2. mit ß-Ersatz (ungetrenntes ss)
oder aus 1. mit "Rechtschreibreversion" und ß-Ersatz (ungetrenntes ss)
5. aus 2. mit ß-Ersatz (Trennung nach Sprechsilben und Dreikonsonantenregel)
oder aus 1. mit "Rechtschreibreversion" und ß-Ersatz (Trennung nach
Sprechsilben und Dreikonsonantenregel)
Aber da find ich meine Variante einfacher zu verstehen.
> > Wenn ein Eintrag in einer Sprachvariante leer bleiben soll, muss das
> > zugehörige Feld entsprechen markiert („ausgekreuzt“) werden.
> > Beispiele: ``-1-;de<pla-ziert``, ``auf<wän-dig;-2-;``.
> Das gilt nur für die Felder 1 und 2! Siehe unten.
Re. Siehe unten.
> >> Feld 1, »de«:
> >> Wort mit Trennungen nach aktueller Rechtschreibung (de-1996).
> > + Variante Deutschland und Österreich
> Ja.
> > - »-1-«, falls die Schreibung der folgenden Felder in de-1996
> > - unzulässig ist (z.B. »-1-;Pro<zeß«).
> > + "-1-" wenn weitere Felder folgen sollen
> >
> > (das erste Feld wird nie abgeleitet).
> Ja.
> >> »-2-«, falls die implizit abgeleitete Schreibung in de-1901
> >> unzulässig ist (z.B. »Ur<laubs=tipp;-2-«).
> >
> > Es kann ebenso die in de-1901 gültige Variante (oder sogar ein
> > komplett anderes Wort) eingetragen werden,
> > z.B. »Ur<laubs=tipp;Ur<laubs=tip«.
> Ja.
> > * Die Wandlung kurz-lang muß solche Einträge akzeptieren und korrekt
> > splitten.
> Mein Skript tut das (klarerweise :-).
Bis hierher große Einigkeit. Jetzt kommts:
> >> »-3-«, falls nicht für diesen Eintrag relevant und weitere Felder
> >> folgen.
> > ...
> >> »-4-«, falls nicht für diesen Eintrag relevant und ein weiteres
> >> Feld folgt.
> >
> > In meiner Definition ist -x- kein "Faulenzer"-Platzhalter für einen
> > automatisch generierbaren Eintrag, sondern in allen Feldern
> > einheitlich Symbol für "not in list".
> Mhmm. Das verkompliziert die algorithmischen Regeln deutlich. Das
> derzeitige, von Deinem Skript erzeugte Kurzformat braucht's nicht.
Anwendungsfall: eineindeutige Darstellung eines Excerpts der Wortliste:
z.B. die zwei Zeilen
verbiß;-2-;ver<biß;-4-
verbissen;ver<bis-sen
können mit "Auskreuzen" in das Originalformat zurückgewandelt werden,
mit "Faulenzern" nicht.
> Wenn ich mich richtig erinnere, habe ich in meinem Perl-Skript mit
> einem »not in list« angefangen. Es hat aber nicht geklappt, die
> Konversion damit korrekt abzubilden. Bis Du Dir sicher, daß Dein
> Python-Skript so funktioniert?
Ganz sicher. Ist auch gut dokumentiert in den Beispielaufrufen. Und ja,
es hat gefühlte Ewigkeiten gedauert, bis jetzt endlich in allen Fällen
die Kreuzchen in den Spalten 3…5 durch Übertrag aus anderen Einträgen
verschwunden sind.
Zwischendurch hatte ich probiert, die Spalten 3…5 im Kurzformat komplett
optional zu gestalten (nach den Orthographieregeln ist ja *immer* eine
SZ-Ersatzschreibung erlaubt und diese ist regelmäßig).
Das Problem sind dann aber die mehrdeutigen Trennungen (Mas-se/Ma-sse)
und die nicht eineindeutige Wandlung einzelner Einträge.
> Gib mir bitte einen Beispieleintrag im Kurzformat, wo »-x-« *kein*
> Faulenzer ist!
>>> dresz = WordEntry(u'Dreß;-2-;Dreß;-4-')
>>> print unicode(ShortEntry(dresz))
-1-;Dreß;-3-;-4-;-5-
>>> entry = ShortEntry(u'-1-;Dreß;-3-;-4-;-5-')
>>> for e in entry.wordentries():
... print unicode(e)
Dreß;-2-;Dreß;-4-
> > Eingedenk des äußerst geringen Bedarfs von Einträgen in Spalten 3-5
> > halte ich die einfachere Definition für den wesentlicheren Vorteil.
> Ich nicht. Spalten 1 und 2 sind müssen sowieso speziell behandelt
> werden, daher können wir »-x-« in Spalten 3 bis 5 durchaus anders
> definieren.
> >> Feld 5, »de-CH-1901«:
> >> Wort mit ß-Ersatzschreibung, die der Schweiz benutzt wird. Das
> >> sind insbesondere Wörter mit »sss« gefolgt von einem Vokal, die
> >> wie andere Dreifachkonsonanten gehandhabt wurden (also anders,
> >> als bei Ersatzschreibung in Deutschland und Österreich),
> >> z.B. »süssauer«
> >
> > Hier habe ich auch die Abweichung der Trennung (s-s vs. -ss)
> > beschrieben.
> OK.
> >> (1) Wie man sehen kann, sind die Felddefinitionen deutlich
> >> vereinfacht. Im besonderen sind »Leerfelder« am Ende eines
> >> Eintrags (außer »-2-«) nicht notwendig.
> >
> > Zusätzliche "ausgekreuze" Felder sind dann nötig, wenn der Zustand
> > einer nicht vollständigen Liste im Langformat exakt abgebildet
> > werden soll.
> Ich halte das für eine unnötige Verkomplizierung. Ich finde es viel
> besser, wenn das Konversionsskript stattdessen fehlende Einträge
> aufdeckt und das Langformat entsprechend korrigiert werden muß
Die Kontrolle/Korrektur kann ganz einfach im Kurzformat vorgenommen werden:
`grep "-[3-5]-" wlst` zeigt, wo ein ß-Ersatz-Eintrag fehlt
Die Fundstellen rauszuschmeißen ist ein simples find-and-replace.
> > Das ist wichtig für eine verlässliche 1:1 Wandlung, heißt aber
> > andersherum, dass fehlende sz-Ersatzschreibung (oder eine fehlende
> > Variante mit ß) bei einem Rund-trip nicht automatisch erstellt
> > werden.
> Ich glaube, wir haben unterschiedliche Auffassung, was »verläßlich«
> bedeutet. Die Eins-zu-eins-Wandlung sollte meiner Meinung nach nur
> wohlgeformte Einträge korrekt abbilden – wobei durchaus mehrere
> Einträge im einen Format mehreren Einträgen im anderen Format
> entsprechen können.
Wohlgeformt ja, aber eben auch ggf. unvollständig. Die Wandlung der
kompletten Liste ist ja nur ein Anwendungsfall. Einzelne Einträge, z.B.
Eigennamen, sollten 1:1 den Rund-trip überstehen, auch wenn sie ein ß
enthalten.
> Ich finde es viel besser, notwendige Einträge im
> Langformat zu ergänzen, falls sie fehlen sollten, als daß wir
> formattechnische Verrenkungen brauchen, um einen rudimentären
> Langeintrag darstellen zu können.
Praktisch werden wir für die vollständige Wortliste ein Auskreuzen der
Spalten 3…5 nicht benötigen. Da können wir aber auch die einfachere und
konsistente Definition nutzen.
> >> (2) Wollen wir, daß die Kurzlisteneinträge eineindeutig sind? Das
> >> ist ja ein Vorteil des Langformats (unter der Prämisse, daß
> >> stets der Eintrag mit den wenigsten explizit gesetzten Feldern
> >> genommen wird). Wenn ja, wie errreichen wir das?
> >
> > [...]
> >
> > Ich will verschiede Kurzformat-"wortlisten", die nach der Wandlung
> > ins Langformat identische Ergebnisse liefern als "äquivalente
> > Wortlisten" bezeichnen.
> OK.
> > Es gibt eine zum jetzigen Ergebnis der lang-kurz-Wandlung
> > äquivalente Liste, die in jeder Zeile einen eindeutigen Schlüssel
> > enthält. Allerdings sind dann eben doch wieder 470878 statt nur
> > 454054 Zeilen und viele explizite Eintragswiderholungen und
> > ausgekreuzte Felder nötig (siehe auch "explizites Kurzformat"²).
> >
> > Bsp: die 3 Zeilen der Langform
> >
> > Vossstrasse;-2-;-3-;-4-;-5-;Voss=stra-sse;Voss=stras-se;Voss=stras-se
> > Vossstraße;Voss=stra-ße
> > Voßstraße;Voß=stra-ße
> >
> > entsprechen kurz/explizit
> >
> > -1-;-2-;Voss=stras-se;Voss=stra-sse;Voss=stras-se
> > Voss=stra-ße;Voss=stra-ße;-3-;-4-;-5-
> > Voß=stra-ße;Voß=stra-ße;-3-;-4-;-5-
> Ja, mit redundanten Feldern. Dieser Eintrag ist vollkommen äquivalent
> zu
> -1-;-2-;Voss=stras-se;Voss=stra-sse;Voss=stras-se
> Voss=stra-ße;Voss=stra-ße
> Voß=stra-ße;Voß=stra-ße
Genau. Das ist eine weitere äquivalente Liste.
"Explizit" meinte hier aber auch: alle Felder explizit aufgeführt.
> > und kurz/minimal
> >
> > Voss=stra-ße;Voss=stra-ße
> > Voß=stra-ße
> OK.
> > Im kurz/minimal Format kann nicht mehr einfach auf Doppelungen
> > geprüft werden und Zeilen haben sprachvarietätsabhängige Schlüssel.
> Das hat mich anfangs gestört, wie man im E-Mail-Archiv nachlesen
> kann :-) Inzwischen hab' ich mich daran gewöhnt.
> > Vorschläge: [...]
> Danke für Deine ausführlichen Ideen. Da ist viel sinnvolles dabei,
> allerdings glaube ich, daß wir diese Frage erst beantworten können,
> wenn jeder von uns einen Schwung neuer Einträge im Kurzformat
> eingegeben hat. Derzeit weiß ich einfach nicht, was das beste ist.
Ich habe schon damit angefangen, größere Neueintrags- oder Revisionsaktionen
im Kurzformat zu bearbeiten, z.B. die 5520 neuen Einträge (f493d797ad73fc56).¹
* aus dem Patch alle Zeilen mit /^+/ herausgefiltert nach 5520-neue.lang
* umformatierung.py -k 5520-neue.lang > 5520-neue
* Durchsicht (bisher nur a bis f).
* umformatierung.py 5520-neue > neue.lang
* python/skripte/edit-tools/prepare_patch.py korrektur -k neue.lang -o wortliste.patch
* patch < wortliste.patch
...
Kommentare:
> >> * Der Eintrag für das erste nicht-leere Feld einer Zeile wird
> >> explizit mit einem Kommentar gesetzt (auch wenn er leer sein
> >> sollte).
> >>
> >> * Abgeleitete Kommentare werden gesetzt, falls sie nicht-leer sind
> >> und kein expliziter Eintrag vorhanden ist.
> >
> > a) Der Eintrag mit dem gleichen Schlüssel erhält den Kommentar.
> >
> > b) Beim Splitten wird der Kommentar für beide Einträge
> > übernommen.
> >
> > c) Beim Zusammenlegen von Einträge verliert der "Speziellere" den
> > Kommentar.
> Das gefällt mir, danke. Wenn ich das richtig sehe, sind die Regeln
> (a) bis (c) genau das, was Du derzeit implementiert hast – somit ist
> das äquivalent zu meiner Beschreibung (für kurz→lang), und wir sollten
> vielleicht beide Versionen (Deine und meine) behalten, inklusive
> Beispiel.
Ich denke, die Kommentare sind noch Baustelle. Ich habe an einigen Stellen
Kommentare angeglichen, damit sie den Roundtrip überstehen, die jezt auch
wieder verschieden (und damit passgenauer zu den jeweiligen Langeinträgen
sein können). Auch die Beschreibungen sollten noch konsolidiert werden.
Viele Grüße
Günter
¹ Die Voraussetzung in "... alle Einträge herausgefiltert, die
Trennstellen mit nur einem Buchstaben Abstand enthalten – solche
Trennstellen müssen auf jeden Fall falsch sein." stimmt allerdings nicht.
Schon in de-1901 sind einbuchstabige Silben (Vokale die silbisch
gesprochen werden wie in "Jus-ti-ti-a-rin") erlaubt.
Mehr Informationen über die Mailingliste Trennmuster