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