Wisst ihr, warum ich diesen Blog liebe? Es ist eine hervorragende Sache, dazuzulernen. Ich schaue mich immer genau um. In den Kommentaren, in der Webstatistik, sogar auf die interne Blogsuche habe ich immer ein Auge. Wenn Leser die interne Blogsuche bemühen, ist das in der Regel ein Zeichen, das etwas nicht stimmt… Oder sie suchen eben etwas aussergewöhnliches.
Diese Woche hat jemand nach Silbentrennung gesucht. Ein echt schwieriges Thema. Vor ein paar Jahren hat mich genau dieses Thema nicht losgelassen und ich habe mich richtig reingekniet, einen guten Silbentrenner zu bauen. Der Code, der dabei rausgekommen ist, war leider nicht der übersichtlichste (keine Kommentare, keine Erläuterungen, dafür aber viele Schleifen und Bedingungen und viiiiiel zu kurze Variablennamen.
Jetzt habe ich mich nochmal hingesetzt, Duden, Wikipedia und Deutsch-Howtos gelesen und einen kompletten Rewrite des Silbentrenners begonnen. Ich möchte Euch mein Zwischenergebnis hier vorstellen - es ist sicherlich nicht komplett und hat einige Macken, aber prinzipiell funktionierts (dazu mehr weiter unten).
Wie gesagt, Silbentrennen hört sich einfach an. Wer halbwegs früher in der Schule aufgepasst hat, schaut sich ein Wort kurz an und kann so ziemlich sofort die Silben bestimmen. Damit ist der Mensch einem Automatismus weit voraus… So, und los gehts:
Wenn man sich entscheidet, solch einen Automatismus zu bauen, braucht man erst einmal einen Schlachtplan. Nach der Lektüre folgender Werke:
- Duden, Neue Rechtschreibung: Crashkurs im Silbentrennen
- Open Distance Learning: Deutsch (Lange und kurze Vokale)
- Konkordia: Regeln der neuen Rechtschreibung
- Wikipedia: Wort- bzw. Silbentrennung
- Silbenschnitt und Tonakzente (PDF)
- Wikipedia: Lateinische Wortteilung
- Überblick über Silbentrennung
- Orthographie / Silbentrennung
Harter Stoff. Danach stellt sich erst einmal heraus: Deutsche Sprache, schwere Sprache. Und: Die neue Rechtschreibung kommt gerade Computerprogrammen entgegen ;) Das große Übel bleiben aber trotzdem, die Ausnahmen… Folgende Dinge stehen schon einmal fest:
- Ein Vokal bildet in der Regel den Kern einer Silbe. Dabei gibt es auch Doppelvokale wie “au” und “eu”. Ausserdem werden die Umlaute als Vokal mitgezählt (nicht als Doppelvokal!)
- Es gibt bestimmte Buchstabengruppen die nur sehr sehr selten getrennt werden wie “sch” oder “pf”.
- Problematisch wirds bei “verschluckten” Buchstaben wie dem “h” (wird nicht immer mitgesprochen und getrennt).
- Ganz Problematisch wirds bei zusammengesetzten Worten. (Siehe die berühmten Blumento-Pferde ;)
- Einzel-Konsonanten oder -Vokale stehen niemals als Einzelsilbe am Ende.
Für die Umsetzung habe ich mich für folgende Strategie entschieden:
- Da die Vokale das Zentrum bilden, werden erst einmal alle Konsonanten gesammelt, bis ein Vokal auftaucht.
- Dann wird bestimmt, was mit den Konsonanten passiert. Ob ein Teil an eine bereits bestehende Silbe angehängt wird, oder ob eine neue Silbe generiert wird.
- Bei der Aufteilung der Konsonanten wird geprüft, ob die Buchstaben zu einer nicht trennbaren Buchstabengruppe gehören und wenn ja zusammengelassen.
Klingt eigentlich ganz einfach, gell? Bevor ich den Link zum PHP Script preisgebe, möchte ich zunächst um allgemeine Vergebung bitten. Es ist einfach auf die Schnelle in 2 Stunden runtergekloppt und nicht objektorientiert oder gar UTF-8 fähig:
http://www.phpblogger.net/download/silben_trennen.phps
Schauen wir uns mal ein paar Beispiele an:
Array ( [0] => Schla [1] => ger )
Array ( [0] => Scho [1] => ko [2] => la [3] => de )
Array ( [0] => Gren [1] => ze )
Array ( [0] => Apfel )
Array ( [0] => Blau )
Array ( [0] => Sa [1] => la [2] => man [3] => der )
Array ( [0] => Teu [1] => fel )
Array ( [0] => Ta [1] => fel [2] => run [3] => de )
Array ( [0] => Wich [1] => tig [2] => tuer )
Ich bin immer noch total begeistert. Uuuuuuuunglaublich. Naja, aber ob das wirklich so gut funktioniert? Schauen wir mal weiter:
Array ( [0] => Sil [1] => bent [2] => ren [3] => nung )
Aha. Ein Zusammengesetztes Wort. Und wie siehts einzeln aus?
Array ( [0] => Sil [1] => ben )
Array ( [0] => Tren [1] => nung )
Hm. Also wie in diversen Schriftwerken angekündigt, haperts der Erfahrung nach bei zusammengesetzten Worten. Erstaunlicherweise läuft es bei nicht zusammengesetzten Worten recht gut. Was kann man dagegen tun?
Nix. Die einzige Hilfe sind Wörterbücher. Das menschliche Gehirn macht das ganze ähnlich. Wenn etwas auf eine Regel passt, wird nur die Regel gemerkt und abgerufen. Sobald die Regel nicht mehr passt (Quasi in Ausnahmefällen) wird nur die entspreche Ausnahme gemerkt und bei Bedarf abgerufen.
Das Problem ist der Kompromiss:
- Entweder man baut eine Applikation, die möglichst viele Wörterbücher einbindet und damit ziemlich gute Ergebnisse liefert. Dann betreibt man aber eine ziemlich langsame Applikation, weil natürlich jede Wörterbuchabfrage Zeit kostet.
- Oder man versucht so viel wie möglich mit Regeln abzudecken und nur in Ausnahmefällen das Wörterbuch abzufragen. Die Folge ist eine sehr fehleranfällige Applikation, dafür aber eine ziemlich schnelle.
Das Script bezieht zur Zeit noch kein Wörterbuch mit ein und basiert nur auf Regeln. Die sind natürlich löchrig und Ausnahmen in der deutschen Sprache gibt es weiß Gott genug. Eine große Verbesserung (abgesehen von etwas Regelfeinschliff) wäre natürlich die Erkennung von zusammengesetzten Worten und deren Schnittstellen.
Einen Blick wert ist sicherlich das PEAR-Projekt “TeXHyphen“: Es implementiert den Hyphen-Algorithmus von TeX, hat aber seit 2004 Alpha-Status. Ich weiß es nicht, aber vielleicht einer meiner Leser: Gibt es einen Onlineservice oder ein Open Source Tool, das man abfragen könnte?





