[Trennmuster] Entscheidungsmuster für Binnen- und Schluss-S in Frakturschriften

Stephan Hennig mailing_list at arcor.de
Mo Feb 6 17:14:41 CET 2012


Hallo Günter,

Am 05.02.2012 20:31, schrieb Guenter Milde:
> On  3.02.12, Stephan Hennig wrote:
> 
>> Ich vermute, eine Verquickung von Substitution (Lang-s) und Trennung
>> wären nicht die Art von Regeln, die Taco bisher im Blick hat.
> 
> Eine Verquickung ist auch nicht nötig. Nötig ist, daß der Trennalgorithmus
> 
> * für jedes Wort "angeschmissen" werden kann (ohne daß es dazu über die
>   Zeile hinausragen muß). Für einen in Lua implementierten Trennalgorithmus
>   bedeutet dies, daß er mit einer Lua-Funktion aufzurufen sein sollte. Da
>   sehe ich kein Problem.
>
> [...]

Das geht in die Richtung eines speziell auf die deutsche Sprache
abgestimmten Pakets.  Ich weiß nicht, ob das Trennen beliebiger Wörter
in LuaTeX heute schon möglich ist.  Falls das so wäre, ...

> * Alle Trennstellen des übergebenen Wortes zurückliefert und dabei nach
>   Haupt- und Nebentrennstellen unterscheidet. 

... könnte man dies durch mehrfaches Trennen mittels verschiedener
Trennmuster erreichen, die jeweils eine bestimmte Klasse von Trennungen
repräsentieren.

Ich denke allerdings, dass Hans und Taco, wenn sie schon etwas einbauen,
an einer allgemeinen Lösung interessiert sind, die auf Seiten der
Sprachanpassung möglichst wenig Aufwand erfordert (sprich, im
entsprechenden Paket sollte möglichst wenig Lua-Kode nötig sein) und von
der verschiedene Sprachen gleichermaßen profitieren.  Explizite
ſ-s-Muster scheinen mir hier ein bewährtes Konzept aufzugreifen.

Eine Einzellösung in Lua hätte zunächst allerdings den Vorteil, dass wir
bei der Einarbeitung des langen/runden S zeitlich unabhängig von der
LuaTeX-Entwicklung wären.  Ich möchte dich da von nichts abhalten.  Im
Gegenteil.

Deshalb hier einige kurze Worte zum Duden Korrektor (DK), der bei der
Klassifikation verschiedener Trennstellen möglicherweise hilfreich sein
kann.  (Ich fürchte nämlich, ich komme sonst nicht dazu). DK unterstützt
lediglich die Reformrechtschreibung, bietet dafür aber drei Trennstile:
alle, gesprochen, ästhetisch.  'Alle' liefert den bekannten Mischmasch
aus gesprochener und etymologischer Trennung und dürfte für uns
uninteressant sein

  In-dus-t-rie

'Gesprochen' entspricht weitgehend der empfohlenen Trennung des
gedruckten Dudens.  Allerdings mit einigen Abweichungen zu meinem
gedruckten 1996er-Duden:

  DK6             Duden (1996)
  In-dus-trie     In-dust-rie

Kann bitte jemand mit einem neueren Duden prüfen, ob die Dudenredaktion
da die Meinung geändert hat?

Zum interessanten Stil 'ästhetisch': Dieser scheint zusammengesetzte
Wörter an Wortgrenzen zu trennen

  Tank-stellen-besitzer

Es werden jedoch auch Prä- und Suffixe in einer Art und Weise getrennt,
die ich nicht durchschaue

  Kinder-geburts-tag
  Ge-burts-tag
  un-ent-schieden
  un-befleckt

Ich hänge am Ende eine kurze Liste an, die ich mit LibreOffice 3.5 RC3
und DK6 über die Basic-API erstellt habe.  Könnt ihr da ein System
erkennen?  (Die Zeichenkette ---- steht für Wörter, die nicht getrennt
werden konnten.)

Falls ihr die Trennung bestimmter Wörter wissen wollt, gebt mir bitte
Bescheid.  Es ist für mich momentan leider einfacher, die selbst zu
trennen, als zu erklären, wie das geht.  LibreOffice und DK enthalten
eine Reihe von Fehlern, die die Worttrennung betreffen.  Wenn man weiß,
wo die Fallen lauern, haben diese auf die Richtigkeit des Ergebnisses
allerdings keine Auswirkung (hoffe ich jedenfalls).  Eine nähere
Beschreibung des Vorgehens versuche ich später hier oder im Wiki
nachzuliefern.


>> Wie gesagt, die Alternative wären Lang-s- bzw. Rund-s-Muster (ich bin
>> mir momentan nicht sicher, welche sinnvoller wären) als vorgeschaltete
>> Stufe zur Worttrennung.  Ich vermute, dass solche Muster -- ebenso wie
>> mögliche Ligaturmuster -- sehr klein wären.  Eine Ausnahmeliste wäre
>> dann nicht nötig.
> 
> "vorgeschaltete Stufe"? 
> 
> Ein Lang-s/Rund-s Algorithmus auf Musterbasis kann vollkommen unabhängig
> von der Worttrennung arbeiten.
> 
> Natürlich sollte die s-ſ-Ersetzung wegen der unterschiedlichen Breite der
> Glyphen vor der Absatzformatierung erfolgen.

Ja, da habe ich etwas durcheinander gebracht.  Ich meinte vor dem Umbruch.


> Für die Bestimmung optimaler Trennstellen kann ein rückgewandeltes
> Wort an den Trennalgorithmus übergeben werden, so daß keine
> zusätzlichen Lang-ſ-Trennmuster erforderlich sind.

Trennmuster mit langem S wären aber sinnvoll.  Es gibt nämlich auch den
Fall, dass Texte schon mit langem S geschrieben werden.  Man könnte ſ
natürlich auch dort zunächst in s umwandeln und das Wort so mit den
bisherigen Mustern trennen.  Der Rechenaufwand pro Zeichen im
Eingabestrom wäre mit ſ-Mustern jedoch geringer.  Da langes und rundes S
ja gut mit den Trennregeln korrespondieren, sollte sich die Menge
zusätzlicher Muster in Grenzen halten.

Oder kann man bei der Trennung s irgendwie als LC-Kode für ſ deklarieren?


>> Es gibt noch schöne Sonderregeln für die Vorsilbe 'trans'. :-) 
> 
> die aber mit den Trennregeln korrelieren :-)

Ja.

Viele Grüße,
Stephan Hennig


Tankstellenbesitzer,Tank=stellen=besitzer
Abendbrot,Abend=brot
Polterabend,Polter=abend
Zusammenhang,Zu=sammen=hang
Gesundheitswesen,Gesund=heits=wesen
Verhältnis,Ver=hält=nis
Verhältnisse,Ver=hält=nisse
Einkommensverhältnisse,Ein=kommens=ver=hält=nisse
Trunkenheit,Trunken=heit
Zukunft,Zu=kunft
Einigkeit,Einig=keit
Elektronikriese,Elektronik=riese
Demonstrationen,----
Geburt,Ge=burt
Geburtstag,Ge=burts=tag
Kindergeburtstag,Kinder=geburts=tag
Ozean,----
Industrie,----
Elektronik,----
Uniform,----
anonym,----
abstrakt,----
äußern,----
Grüße,----
größte,----
gesamt,----
insgesamt,ins=gesamt
Gesamtheit,Gesamt=heit
Gericht,Ge=richt
einsam,ein=sam
gemeinsam,ge=meinsam
gebildet,ge=bildet
eingebildet,ein=gebildet
ungebildet,un=gebildet
uneingebildet,un=ein=gebildet
abgeätzt,ab=geätzt
abtrennen,ab=trennen
aburteilen,ab=urteilen
ausbedingen,aus=bedingen
auseinander,aus=einander
ausgestalten,aus=gestalten
befleckt,be=fleckt
bekommen,be=kommen
einander,----
heraus,----
herausgegangen,heraus=gegangen
herein,----
hereingegangen,herein=gegangen
hinauf,----
hinaufgestiegen,hinauf=gestiegen
hinab,----
hinabgestiegen,hinab=gestiegen
mitbekommen,mit=bekommen
miteinander,mit=einander
wiederaufbereiten,wieder=auf=bereiten
unbefleckt,un=befleckt
unentschieden,un=ent=schieden
uninformiert,un=informiert
unzerteilt,un=zer=teilt
unternehmen,unter=nehmen
urteilen,----
verabreden,ver=abreden
veranschlagen,ver=anschlagen
veranstalten,ver=anstalten
verausgaben,ver=aus=gaben
veruntreuen,ver=untreuen
verurteilen,ver=urteilen
gefriertrocknen,ge=frier=trocknen


Hier noch der blanke Makrokode, für die, die damit spielen wollen:

Sub Main
    Dim oHyphen As Object
    Dim oLocale As New com.sun.star.lang.Locale
    Dim Props(2) As New com.sun.star.beans.PropertyValue
    Dim sWord As String
    Dim sHyphWord As String
	Dim msg As String

    Dim sFiName, sFoName As String
    Dim FiNo, FoNo As Integer

    Rem Diese Eigenschaften werden nur beachtet, sofern der Duden Korrektor
    Rem nicht geladen ist.
    oHyphen = createUnoService("com.sun.star.linguistic2.Hyphenator")
    oLocale.Language = "de"
    oLocale.Country = "DE"
    Props(0).Name = "HyphMinLeading"
    Props(0).Value = 2
    Props(1).Name = "HyphMinTrailing"
    Props(1).Value = 2
    Props(2).Name = "HyphMinWordLength"
    Props(2).Value = 4

    sFiName =
ConvertToURL("h:/home/Themen/LibreOffice/Worttrennung/woerter.txt")
    sFoName =
ConvertToURL("h:/home/Themen/LibreOffice/Worttrennung/woerter2.txt")


    FiNo = FreeFile()
    Open sFiName For Input As #FiNo
    FoNo = FreeFile()
    Open sFoName For Output As #FoNo

    Do While not eof(FiNo)
      Line Input #FiNo, sWord
      If sWord <> "" then
        sHyphWord = hyphenateWord(sWord, oHyphen, oLocale, Props())
        Write #FoNo, sWord, sHyphWord
      End if
    Loop
	Close #FoNo, #FiNo
End Sub


Function hyphenateWord(sWord as String, oHyphen as Object, oLocale as
Object, vProps as Variant)
    Dim vReturn
    Dim sHyphWord As String

    vReturn = oHyphen.createPossibleHyphens(sWord, oLocale, vProps())
    If IsNull(vReturn) Then
        sHyphWord = "----"
    Else
        sHyphWord = vReturn.getPossibleHyphens()
    End If
    hyphenateWord = sHyphWord
End Function



Mehr Informationen über die Mailingliste Trennmuster