[Trennmuster] Kommentare zu »umformatierung.py«
Guenter Milde
milde at users.sf.net
Di Mär 27 01:38:16 CEST 2018
On 26.03.18, Werner LEMBERG wrote:
> Hier ein neuer Versuch einer Dokumentation.
> Meine Perl-Version »wl-new12old.pl« schafft jetzt eine korrekte
> Konversion von Kurz- zu Langformat und ist im git-Repositorium :-)
Danke. Für eine gute Spezifikation ist es wichtig, mehr als eine
Implementation zu haben...
Der Name ist hoffentlich noch nicht endgültig: denn "neu" und "alt" ist
schnell veraltet (die reformierte Rechtschreibung von 1901 bezeichnen wir ja
inzwischen auch als "alt" oder "traditionell"). Außerdem kann ich mir
vorstellen, beide Formate parallel zu erhalten oder noch ein neues
explizites Format einzuführen (Begründung unten).
Meine Namensvorschläge sind "kurz" vs. "lang" oder noch sachlicher
5-Spalten-Format vs. 8-Spalten-Format.
> Zum Ausführen braucht man neben ein paar separaten Perl-Modulen (die
> man mit dem perl-Hilfsprogramm »cpan« einfach holen kann) auch einen
> M4-Präprozessor (z.B. GNU m4). Das Skript ist mehr als doppelt so
> schnell wie »umformatierung.py«, ist aber deutlich spartanischer im
> Komfort und setzt eine wohlgeformte Kurzliste voraus.
Was heißt "wohlgeformt"? Für die praktische Arbeit ist eine robuste
Wandlung, die auch Abweichungen in der Eingabe zulässt hilfreich
(Be tolerant in what you accepting, strict in what you write.)
Siehe auch die folgende Diskussion...
> ----------------------------------------------------------------------
> Die neue Kurzversion der Wortliste
> ==================================
...
Ich schlage zum besseren Verständnis vor, die Definition der Felder von den
Ersetzungsregeln zu trennnen und gleich hier Beispiele einzufügen.
Die folgende Beschreibung ist im reStructuredText formatiert, so dass sie
leicht in HTML oder LaTeX gewandelt werden kann. (So wie die gesamte
Dokumentation der Python-Skripte.) Für "README.wortliste" oder eine neue
Dokumentationsdatei kann sie aber auch in puren Text gewandelt werden.
5-Felder-Format
---------------
Ein vollständiger Eintrag enthält fünf, durch Semikolon getrennte, Felder
für die Sprachvarianten `de`, `de-1901`, `de-CH`, `de-1901-x-versal` und
`de-CH-1901` (Tags nach [BCP47]_).
Jedes Feld enthält ein Wort mit Kennzeichnung der Trennstellen im Format
der `Wortliste der deutschsprachigen Trennmustermannschaft`_, z.B.
``Pro<zent=zah-len``.
Felder können weggelassen werden, wenn sich der Inhalt aus einem
allgemeineren Feld gewinnen lässt (siehe `Ersatzregeln`_).
Feldbelegung
~~~~~~~~~~~~
Die Felder beschreiben die Schreibung und Trennung eines Wortes gemäß
der Sprachvarianten:
1. `de`: `aktuelle Rechtschreibung`_ wie sie in Deutschland und Österreich
angewendet wird.
Beispiele: ``Diens-te``, ``ba-cken``, ``Grü-ße``, ``Schluss=satz``
2. `de-1901`: `traditionelle Rechtschreibung`_ wie sie in Deutschland und
Österreich von 1901 bis 1996 gültig war.
Beispiele: ``Dien-ste``, ``ba{ck/k-k}en``, ``Grü-ße``, ``Schluß=satz``
3. `de-CH` oder `de-x-versal`: aktuelle Rechtschreibung wie sie in der
Schweiz und bei ß-Ersatzschreibung angewendet wird.
Beispiele: ``ba-cken``, ``Grüs-se``, ``Schluss=satz``
4. `de-1901-x-versal`: `traditionelle Rechtschreibung`_ mit
ß-Ersatzschreibung wie sie in Deutschland und Österreich
angewendet wurde (keine Trennung von „ss“ als Ersatz für „ß“).
Beispiele: ``ba{ck/k-k}en``, ``Grü-sse``, ``Schluss=satz``
5. `de-CH-1901`: traditionelle Rechtschreibung wie sie in der Schweiz
angewendet wurde (Trennung von „ss“ auch wenn es für „ß“ steht).
Beispiele: ``ba{ck/k-k}en``, ``Grüs-se``, ``Schlu{ss/ss=s}atz``
Ersatzregeln
~~~~~~~~~~~~
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.
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-;``.
---------------------------------------------------------------------------
Begründung, Änderungen/Ergänzungen:
Beispiele und prägnante umgangsprachliche Formulierung der Sprachvarietät
für besseres Verständnis.
...
> Feld 1, »de«:
> Wort mit Trennungen nach aktueller Rechtschreibung (de-1996).
+ Variante Deutschland und Österreich
...
- »-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).
> »-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«.
* Die Wandlung kurz-lang muß solche Einträge akzeptieren und korrekt splitten.
* Die Wandlung lang-kurz sollte m.E. nur regelmäßige Schreibungsänderungen
in einen Eintrag zusammenfassen. (Siehe Diskussion "Mehrdeutigkeit" unten.)
...
> »-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".
pro:
einfachere Definition der Ersetzungsregeln:
Felder 2-5 können weggelassen werden, wenn sich der Inhalt über
regelmäßige Transformationen aus einem generischeren Feld gewinnen
lässt
Einheitliche Bedeutung von -x- in allen Feldern
(Unterdrücken der Ersetzung ohne Alternativeintrag)
con:
Wenn Felder belegt sein sollen, müssen alle niedrigeren Felder mit dem
korrekten Eintrag belegt sein, auch wenn sie mit den Ersetzungsregeln
generiert werden können.
Eingedenk des äußerst geringen Bedarfs von Einträgen in Spalten 3-5 halte
ich die einfachere Definition für den wesentlicheren Vorteil.
Sonderfall Doppelungen:
Ob ein Feld explizit angegeben ist oder ausgekreuzt wird ist egal, wenn
in der Liste das Wort für die Sprachvariante ein weiteres Mal
existiert.
Allerdings muß dieser Fall hier noch nicht besprochen werden.
> 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.
> Anmerkungen:
> (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.
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.
> Derzeit gibt's ganz wenige Einträge in der Kurzliste (unter
> Anwendung von »umformatierung.py« mit den Änderungen vom 24. März),
> wo solche redundanten Felder noch vorhanden sind.
Redundante Leereinträge gibt es in diesem Sinne nicht -- sie zeigen an, dass
der entsprechende Eintrag in der Langform fehlt.
> Soll das so beibehalten werden, der besseren Lesbarkeit halber?
> Dann müßte ich obige Beschreibung leicht abändern. Ich fände es
> aber besser, wenn redundante Leereinträge weggelassen werden...
Ich habe einige dieser Auslassungen bereits korrigiert (muss noch
hochgeladen werden).
Einen Fall gibt es gegenwärtig noch, die Voss=straße, wo wegen der
Spezialität dass die Voß=straße (als Eigenname) gegen die allgemeinen
Regeln auch in de-1996 gilt mein Skript noch einen Fehler hat. Den werde
ich noch korrigieren.
> (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?
Schwierige Frage, daher muss ich etwas ausholen:
Ein wesentlicher Vorteil des Langformats ist in seiner Beschreibung in
README.wortliste gar nicht erwähnt: Jede Zeile hat einen eindeutigen
Schlüssel und jedes nicht-leere Feld ergibt bei Entfernen der
Trennzeichen diesem Schlüssel. Auch in jeder Spalte gibt es keine
Doppelungen. Zum Erkennen von Doppeleinträgen und Tippfehlern ist das
äußerst hilfreich.
Generell ließe sich das auch im 5-Spalten-Format realisieren:
Die bisher vorgenommene Definition des Kurzformates macht zu Doppelungen
keine explizite Aussage. Aber in einer "minimalen" Liste (Zahl der
"ausgekreuzten" Felder möglichst gering) geht die Eindeutigkeit verloren,
denn die Ersetzungsregeln sind nicht eineindeutig: Voß und Voss ergeben
beide in den Spalten 3…5 Voss.
Ich will verschiede Kurzformat-"wortlisten", die nach der Wandlung ins
Langformat identische Ergebnisse liefern als "äquivalente Wortlisten"
bezeichnen.
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-
und kurz/minimal
Voss=stra-ße;Voss=stra-ße
Voß=stra-ße
Im kurz/minimal Format kann nicht mehr einfach auf Doppelungen geprüft
werden und Zeilen haben sprachvarietätsabhängige Schlüssel.
Vorschläge:
1. Zusätzliche Konsistenzbedingungen für Wortlisten im Kurzformat:
a) eindeutige Schlüssel für jede Zeile: das erste ungetrennte Wort¹
Bsp.:
Fass=bier -> Fassbier # trotz de-1901 Faßbier
-1-;rauh -> rauh
-1-;-2-;Voss=stras-se -> Vossstraße
Jeder Schlüssel darf in der Liste nur einmal vorkommen.
Bsp.:
Cross=lauf;Cross=lauf
Cross=lauf
und
-1-;Cross=lauf
Cross=lauf
sind beide gültiges Kurzformat.
Die Forderung nach einem eindeutigen Zeilen-Schlüssel führt jedoch zu
äquivalenten Formulierung
Cross=lauf;Cross=lauf
-1-;Croß=lauf
Vorteile:
* Sortierung eindeutig und einfach.
* Erhalt von Kommentaren für Ausnahmen gut möglich (siehe unten).
b) In jeder Spalte gelte: Wörter mit gleicher Rechtschreibung dürfen
doppelt vorkommen, müssen aber identische Trennstellenmarkierung
aufweisen.
Bsp: die Trennung -MA-SSE vs. -MAS-SE in de-1901-x-versal führt zu
Jus-tier=mas-se;Ju-stier=mas-se;Jus-tier=mas-se;Ju-stier=ma[-s/s-]se
Jus-tier=ma-ße;Ju-stier=ma-ße;Jus-tier=mas-se;Ju-stier=ma[-s/s-]se
Vorteil:
Mehrdeutigkeiten/Regelabweichungen sind auf den ersten Blick
erkennbar und können mit grep auch im Kurzformat gefunden werden.
2. Beibehalten eines eindeutigen Formats mit der Möglichkeit der 1:1
Wandlung.
Mindestens für die Übergangsphase, evt. auch generell, sollte das
eindeutige Format auch zur Versionsverwaltung genutzt werden.
Vorteile:
* Konsistenzprüfung, Test auf Doppelungen
* Test auf Fehler/Wirkung der Ersatzregeln
Alternativen:
* Langformat:
+ gibt es schon
- lang, komplex
* `explizites Kurzformat`²
* 6-Spalten-Format (mit einem den 5 Spalten des `expliziten Kurzformats`
vorangestellten Schlüsselfeld)
- noch ein Format
+ explizit, leichte Suche, klare Definition
> (3) Die Regeln zur Kommentarsetzung in Günters Konversionsskript
> von Kurz- zu Langformat sind
> * 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.
> War mühsam, das herauszufinden; es sollte vielleicht irgendwo
> explizit dokumentiert werden.
Die Regeln für Kommentare sind noch im Wandel und sollten iterativ
verfeinert werden (Maßgabe: Erhalt der Kommentare zu Sonderfällen in der
gegenwärtigen Wortliste).
Problem:
wie sollen Kommentare bei Zusammenfassen/Splitten von Zeilen
übertragen werden.
Vorschlag:
Entsprechend dem Schlüssel im "expliziten Kurzformat"²
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.
Bsp: Alternative ß/ss je nach Aussprache:
Die Umformung erfolgt in 3 Schritten über das explizite Kurzformat:
1. Lang zu Kurz
Langform:
Geschoss;-2-;-3-;Ge<schoss;Ge<schoss
Geschoß;Ge<schoß # österr. auch in Reformschreibung
Kurzform/explizit:
Kommentar nach a)
Ge<schoss;-2-;Ge<schoss;Ge<schoss;Ge<schoss
Ge<schoß;Ge<schoß;-3-;-4-;-5- # österr. auch in Reformschreibung
Kurzform/minimal:
Verzicht auf Auskreuzen, wenn das nach Transformationsregeln gebildete
Wort in der entsprechenden Spalte in einem anderen Eintrag der Liste
auftaucht. Kommentare werden dabei (nach Regel c) nicht übertragen:
Ge<schoss
Ge<schoß # österr. auch in Reformschreibung
2. Kurz zu Lang
Kurzform/explizit
Splitten nach Schreibung, alle Felder explizit angeben
Aus "Geschoß", Kommentar nach a):
Ge<schoss;Ge<schoss;Ge<schoss;Ge<schoss;Ge<schoss
Aus "Geschoß", Kommentar nach a), b):
-1-;-2-;Ge<schoss;Ge<schoss;Ge<schoss # österr. auch in Reformschreibung
Ge<schoß;Ge<schoß;-3-;-4-;-5- # österr. auch in Reformschreibung
Zusammenfassung der 3 Einträge. Dabei werden Ausnahmen (Zeilen mit
führenden leeren Feldern) in die regelmäßigeren Zeilen eingeflochten.
Kommentar geht nach c) verloren:
Ge<schoss;Ge<schoss;Ge<schoss;Ge<schoss;Ge<schoss
Ge<schoß;Ge<schoß;-3-;-4-;-5- # österr. auch in Reformschreibung
Langform
Kommentar nach a)
Geschoss;-2-;-3-;Ge<schoss;Ge<schoss
Geschoß;Ge<schoß # österr. auch in Reformschreibung
Bsp 2: Unterscheidung von Fremdwort und Lehnwort
Langform:
Crosslauf;Cross=lauf # engl.
Croßlauf;-2-;Croß=lauf;-4- # < engl.
Kurzform/minimal:
-1-;Croß=lauf # engl.
Cross=lauf;Cross=lauf # < engl.
¹ Mögliche Alternativen für Schlüsselbildung:
a) Wenn das erste Feld einen identischen Schlüssel liefert wird das
ungetrennte zweite Feld als "Nebenschlüssel" verwendet etc.
Nachteil: der Schlüssel eines Eintrags hängt von der Gesamtliste ab.
b) Grundsätzich werden alle explizit definierten Felder als
Schlüssel-grundlage genommen
Nachteil: längere Schlüssel
² Das `explizite Kurzformat` ist eine aquivalente Darstellung einer Wortliste
im Kurzformat. Dabei sind die Einträge (Zeilen):
a) eindeutig (1 Schlüssel/Zeile) und
b) vollständig (alle Felder explizit).
Alternativ können auch Felder gemäß den Ersatzregeln
weggelassen werden, wenn sie (auch ohne Transformation) identisch sind und
keine weiteren Felder folgen:
5. de-CH-1901 wenn gleich 2. de-1901
4. de-1901-x-versal wenn gleich 2. de-1901
3. de-CH wenn gleich 1. de
2. de-1901 wenn gleich 1. de
Genug für heute,
viele Grüße
Günter
Mehr Informationen über die Mailingliste Trennmuster