Silbentrennung

Hi,
in meinem aktuellen Projekt hätte meine Cheffin gerne eine Silbentrennung „damit die langen Worte in den kleinen Feldern nicht so häßlich umgebrochen werden“.
Gibt es hierzu vielleicht ein allgemein gültiges Vorgehen? Ein Beispiel? Ist es so komplex wie ich befürchte, oder kann man das in 1-2 Tagen realisieren?
Wunderbar wäre natürlich sowas wie eine DLL, die mir die Position der Silben eines Wortes liefert - oder ähnlich. Dann müsste ich mich nicht weiter verrenken.

Vielen Dank für Hinweise und Tipps
Daniel

Optimist
Hallo,
die Silbentrennung funktioniert ja nicht mal bei
teuren Officeprodukten sauber.
Wie soll sie auch? Die Software kann ja nicht den
Sinn der Sprache verstehen.
Für ca. 70%-Genauigkeit könnten Standardregeln
gehen -> DUDEN.
Für höhere Genauigkeit wird wohl das umfangreiche
Wörterbuch genutzt, daß heute jeder Schreibsoftware
beiliegt.
Gruß Uwi

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hallo,
leider habe ich auch nur einen Hinweis:
TeX macht die Silbentrennung (in englichen Texten) sehr gut. Da der gesamte Code Freeware ist, ist er vielleicht ein Ansatzpunkt für weitere Versuche. Einfach ist es aber sicher nicht.

Cu Rene

Hallo Daniel,

Du könntest versuchen, sofern auf den Clients installiert, MS-Word für Deine Zwecke zu „missbrauchen“. MS-Word kann als OLE-Automations-Server von anderen ActiveX-fähigen Programmen aufgerufen werden (z.B. VB, VC++, VJ++ oder Delphi). Damit kannst du aus Deinem Programm heraus fast alle Word-Funktionen aufrufen. Microsoft nutzt die eigene Silbentrennung auch in allen Produkten als gemeinsam genutzte Komponente. Ich habe dieses Verfahren (Silbentrennung) selbst noch nicht ausprobiert aber über diese Methodik Word aus diversen Entwicklungsumgebungen und damit Programmen schon x-fach entfremdet.
Evtl. hilft es.

Ciao
Rainer

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hallo Daniel,

Du könntest versuchen, sofern auf den Clients installiert,
MS-Word für Deine Zwecke zu „missbrauchen“. MS-Word kann als
OLE-Automations-Server von anderen ActiveX-fähigen Programmen
aufgerufen werden (z.B. VB, VC++, VJ++ oder Delphi). Damit
kannst du aus Deinem Programm heraus fast alle Word-Funktionen
aufrufen. Microsoft nutzt die eigene Silbentrennung auch in
allen Produkten als gemeinsam genutzte Komponente. Ich habe
dieses Verfahren (Silbentrennung) selbst noch nicht
ausprobiert aber über diese Methodik Word aus diversen
Entwicklungsumgebungen und damit Programmen schon x-fach
entfremdet.
Evtl. hilft es.

Ciao
Rainer

Servus Rainer,
das hört sich gut an, und vielleicht kann ich die Idee in irgendeiner Form verwenden. Allerdings soll meine Anwendung unabhängig von anderen Programmen sein und MS-Office kann nicht vorrausgesetzt werden.
Ich habe inzwischen anhand meines Dudens eine primitive Lösung gefunden. Die trennt zwar nicht immer korrekt, ist aber recht schnell und immerhin in ca. 95% der Fälle richtig.

Grüße und vielen Dank für den Tipp
Daniel

Hi daniel, Hi Rainer,

Ich hatte mal vor ca. 20 Jahren einen Silbentrenner, der auf
98% kam, allerdings habe ich ca. 10 Tage für die letzt 3% gebraucht. Ähem, ist Dein Algorithmus klein genug, um ihn abzustauben? Will sagen: Kannst Du ihn mir mal schicken?

Mein Silbentrenner ist allerdings verloren, sodaß ich mich
nicht revangieren kann. allerdings habe ich die die Wörter
in Silben aufgeteilt, sodaß die Silben ‚aussprechbar‘ waren.
Dann habe ich mir die restlichen 10 Tage den Kopf zerbrochen, was aussprechbar ist. Nebenbei bin ich im Wort nicht vorwärts, sondern rückwärts gegangen, ich habe die Silben von hinten nach vorne solange abgezwickelt, bis alle Silben eben ‚aussprechbar‘ waren. Das klappte ganz gut…

mfg

Mark

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hi Mark,
die Idee hört sich interessant an. Mein Algorithmus ist sehr klein und ich kann ihn Dir gerne schicken, allerdings ist er in OpenScript geschrieben. Sollte aber halbwegs leserlich sein:

Die Funktion wird mit
silbentrennung(„trennungswort“)
aufgerufen und liefert eine Liste aus Positionswerten an denen getrennt werden darf.
Die variable „verbindungen“ wird verwendet, um typische Zusammenhängende Laute zu definieren. Dabei wird in kauf genommen, das es viele Ausnahmen gibt, bei denen ein entsprechendes Wort anders getrennt wird.

Zeilen mit „–“ sind Kommentare, die Nummerierung in OpenScript beginnt mit 1 anstatt mit 0.
Here we go

to get silbentrennung string welchesWort
 local int zeichenAnzahl, i
 local logical trennenErlaubt
 local string z, z0, z1, v
 local stack trennPositionen

 zeichenAnzahl = charCount(welchesWort)
 if zeichenAnzahl \> 2
 trennenErlaubt = false
 vokale = "a,e,i,o,u,ä,ü,ö"

 -- "sch" wie in "A\_sche" -- "ch" wie in "Untersu\_chen" -- "ph" wie in "Ste\_phan" -- "ck" wie in "Zu\_cker"
 -- "pf" wie "A\_pfel" -- "br" wie in "Unter\_brechung" -- "pl" wie "Finanz\_plan" -- "tr" wie in "An\_trag"
 -- "st" wie in "Auf\_stehen" -- "gr" wie in "Hinter\_grund"
 verbindungen = "sch,ch,ph,ck,pf,br,pl,tr,st,gr"
 trennungen = "-,/,\,\*,#,;,.,+,=,),(,&,!,?,,:, ,\_,~"

 step i from 2 to (zeichenAnzahl-1)
 z0 = char i-1 of welchesWort
 if trennenErlaubt = false and istIn(z0,vokale)
 trennenErlaubt = true
 end if
 if trennenErlaubt
 z = char i of welchesWort
 z1 = char i+1 of welchesWort
 v = z0 & z
 if v = "ch" and i \> 2 and char i-2 of welchesWort = "s"
 v = "sch"
 end if
 if istIn(z1,vokale) and istIn(z,vokale) = false and istIn(z,trennungen) = false and istIn(z0,trennungen) = false
 if istIn(v,verbindungen)
 push (i-charCount(v)+1) onto trennPositionen
 else
 push i onto trennPositionen
 end if
 end if
 end if
 end step
 end if
 return trennPositionen
end silbentrennung

Ich hatte mal vor ca. 20 Jahren einen Silbentrenner, der auf
98% kam, allerdings habe ich ca. 10 Tage für die letzt 3%
gebraucht. Ähem, ist Dein Algorithmus klein genug, um ihn
abzustauben? Will sagen: Kannst Du ihn mir mal schicken?

Mein Silbentrenner ist allerdings verloren, sodaß ich mich
nicht revangieren kann. allerdings habe ich die die Wörter
in Silben aufgeteilt, sodaß die Silben ‚aussprechbar‘ waren.
Dann habe ich mir die restlichen 10 Tage den Kopf zerbrochen,
was aussprechbar ist. Nebenbei bin ich im Wort nicht vorwärts,
sondern rückwärts gegangen, ich habe die Silben von hinten
nach vorne solange abgezwickelt, bis alle Silben eben
‚aussprechbar‘ waren. Das klappte ganz gut…

mfg

Mark

Hi daniel,
Danke. Ich check das demnächst. Im Augenblick zuviele Sachen im Kopp. Ich denke, ich werde mal eine Delphi-Komponente schreiben, die sowas benutzt.

Anyway,
bis die Tage

Maak