Python-Skript Update.
[wortliste.git] / skripte / python / lang_s / lang-s-transformation.txt
blobce2b1bb7f1e6c230b09bdf53e60f85684fbefd01
1 geg.: Text "moderner" Orthographie für Antiquasatz, alle kleinen s rund.
3       Liste von 470 000 Wörtern mit korrekter Lang-S-Schreibung,
4       davon 190 000 Wörter mit mindestens einem langem ſ
5       und 130 000 Wörter mit mindestens einem kleinem runden s
6       (davon 80 000 Wörter mit rundem s im Wortinneren).
8 ges.: Text in Orthographie für den Satz mit gebrochenen Schriften (Latin
9       alphabet, Fraktur) mit korrekter Nutzung des runden und langen S)
11 Problem:
12       Während die Wandlung "de-Latf" -> "de" eindeutig ist (replace('ſ',
13       's')), muß jedes 's' im Ausgangstext je nach Lage im Wort entweder in
14       'ſ' gewandelt werden oder als 's' stehenbleiben.
17 Implementierungsvarianten:
19 1 Dictionary
20 ============
22 1a) Die Wortliste wird in ein "dictionary/assoziatives Array" gelesen::
24       words = dict()
25       for word in open('words_de-1901-Latf'):
26          s_word = word.replace(u'ſ', u's')
27          words[s_word] = word
29     Die Wörter werden ersetzt::
31       for word in text:
32              ...
33          word = words[word]
34          ...
36     Einfach aber ineffizient und problematisch für Wörter die nicht in der
37     Liste sind.
39 1b) Die Wortliste wird in zwei Dictionaries
40     gelesen, eines für Wörter mit langem S, das andere für Wörter mit
41         rundem S::
43       words_lang = dict()
44       words_rund = dict()
45       for word in open('words_de-1901-Latf'):
46          s_word = word.replace(u'ſ', u's')
47          if 'ſ' in word:
48              words_lang[s_word] = word
49          elif 's' in word:
50              words_rund[s_word] = word
52      Die Wörter werden ersetzt::
54       for word in text:
55          ...
56              if 's' in word:
57                 w_Latf = words_lang[word]
58                 if (w_Latf == word):
59                    assert (word in words_rund, "Achtung: Wort unbekannt!")
61          ...
63      Etwas effizienter. Rückmeldung für nicht erfaßte Wörter.
65 Auch mit dem komplexeren Ansatz hat die Implementierung mit Dictionary
66 das entscheidende Problem, daß nur explizit erfaßte Wörter korrekt gewandelt
67 werden. Neben einem Speicherproblem bedeutet das auch, daß
68 Neubildungen und "vergessene" Wörter "Handarbeit" erfordern.
70 Ein nachgeschalteter Test auf Zusammensetzungen bekannter Wörter (ggf. mit
71 Fugen-s) kann das Problem mindern, aber nicht beheben.
73 2 *spell Rechtschreibprüfung
74 ============================
76 Für die Rechtschreibprüfprogramme ispell/aspell/hunspell wurden effektive
77 Darstellungen gefunden, um aus ca. 371 000 Einträgen der expandierten Liste
78 (dump) eine kompakte Liste mit 83 000 Einträgen zu generieren.
80 Rechtschreibprüfprogramme haben bereits die Fähigkeit zum Ersetzen einzelner
81 Wörter im Text (under Beibehaltung der Satz- und Steuerzeichen).
83 Mit einem Wörterbuch "de-1901-Latf" könnte (nach vorheriger Prüfung des
84 Texts mit "de-1901") automatisch die Wandlung in korrekte Lang-S-Schreibung
85 mittels "alle Fehler ohne Nachfrage korrigieren" erfolgen.
87 Es bleibt das Problem der nicht erfaßten Wörter bzw. der Einträge in privaten
88 Wörterbüchern.
90 In jedem Fall ist ein solches Wörterbuch für die Kontrolle vorhandener oder
91 selbst mit Langem-S erstellter Texte äußerst wünschenswert.
94 Was ist dafür noch nötig?
95 -------------------------
97 * Prüfen der ca. 400 Wörter und Abkürzungen mit weniger als 4 Buchstaben.
99   Problem:
100     es gibt viele Ausnahme für Abkürzungen, da diese so geschrieben werden
101     wie die Langform, z.B.  "und ſo weiter" -> "uſw." Doppeldeutigkeiten
102     (Miſſ. (Missisipi) vs. Misſ (Fräulein)).
104 * Skript zum Übertragen der Lang-S-Schreibung auf die kompakte Liste
106 * Umstellen der "Expansionsregeln" auf Lang-S Orthographie.
108 * Kontakt zu Björn Jacke, dem Maintainer der deutschen *spell-Listen.
111 3 patgen-generierte Muster
112 ==========================
114 Die von Frank Liang entwickelte Datenstruktur "packed trie" ist äußerst
115 effizient für die Aufgabe, in Zeichenketten an durch Beispiele bestimmte
116 Stellen (Trenn-) Zeichen einzufügen.
118 Ein wesentlicher Vorteil der patgen-Muster ist ihre "Assoziativität": da die
119 Bildungsgesetze und Reglemäßigkeiten natürlicher Sprachen gut mit dem
120 Kompressionsalgorithmus von patgen zusammenpassen, ist für viele nicht
121 explizit angelernte Wörter die Ausgabe der Trennstellen korrekt.
123 Da die Lang-S Schreibung hauptsächlich auf der Grundannahme
125   langes S im Wort
126   rundes S am Wort- und Silbenende
128 beruht, können wir patgen für die oben gestellte Aufgabe der automatischen
129 Textkonversion nutzen:
131 1. Mustererstellung
133    Aus der Liste von 470 000 Wörtern mit korrekter Lang-S-Schreibung
134    eine Pseudo-Trennliste erzeugt. Dabei gibt es zwei
135    "Kodierungsmöglchkeiten":
137    a) Trennstellen folgen auf Rund-S:
139         "s"  ->  "s-"  # am Wortende "s"
140         "ſ"  ->  "s"
142       Vorteil: "logische" Pseudo-Trennmuster: Trennstrich an Morphemgrenzen.
144       Bsp.: `words-de-*-Latf.txt` ::
146         ...
147         Aals
148         Aals-meer
149         Aalst
150         ...
151         aus-drucks-stark
152         ...
154    b) Trennstellen folgen auf Lang-S und (wegen der
155       Nichtunterscheidung von Groß- und Kleinschreibung) Großes S:
157         "ſ"  ->  "s-"
158         "S"  ->  "s-"
160       Bsp.: `words-de-*-x-lang-s.txt` ::
162         ...
163         Aalbes-tand
164         Aalbes-tände
165         ...
166         Aalfangergebnis-s-e
167         ...
168         s-onderauss-chüs-s-e
170    Diese Listen werden mit "patgen" zu Mustersätzen komprimiert:
172    =======  ======================  ======  ====================  ======
173    Sprache  Wortliste               Wörter  Musterdatei           Muster     
174    =======  ======================  ======  ====================  ======
175    de-1901  words-de-1901-Latf.txt  443151  de-1901-Latf.pat      2383       
176    de-1996  words-de-1996-Latf.txt  443319  de-1996-Latf.pat      2517       
177    beide    words-de-Latf.txt       450106  de-Latf.pat           6783       
178                                           
179    de-1901  words-de-1901-Latf.txt  443151  de-1901-x-long-s.pat  2105       
180    de-1996  words-de-1996-Latf.txt  443319  de-1996-x-long-s.pat  2254       
181    beide    words-de-Latf.txt       450106  de-x-long-s.pat       4179       
182    =======  ======================  ======  ====================  ======
184 2. Konversion auf Basis der "Lang-S-Mustersätze"
186    Mit dem "TeX hyphenation algorithm" (oder einer der Portierungen auf
187    Perl, Ruby, Python, PHP, ...) werden für die Wörter des Textes
188    "Lang-S-Trennstellen" bestimmt.
190    Darauf erfolgt die Rückwandlung in ein "Lang-S-Wort".
192    Siehe `skripte/python/patuse/de_Latf_conversion.py` (- nach rund-S)
193    und `skripte/python/patuse/lang_s_conversion.py` (- nach Lang-S)
195 Vorteile:
196   Effizienz
198   Behandlung von nicht erfaßten Wörtern über die Generalisierung der
199   verarbeiteten Stichprobe.
201 Nachteile:
202   Unbestimmtes Ergebnis bei nicht gelernten Wörtern.
204   Falsch konvertierte gelernte Wörter:
206    =======  ====================  ====================
207    Sprache  Musterdatei           Konvertierungsfehler
208    =======  ====================  ====================
209    de-1901  de-1901-Latf.pat      0
210    de-1996  de-1996-Latf.pat      0
211    beide    de-Latf.pat           344
213    de-1901  de-1901-x-long-s.pat  0
214    de-1996  de-1996-x-long-s.pat  0
215    beide    de-x-long-s.pat       254
216    =======  ====================  ====================