Modul: Algorithmische Silbentrennung (deutsch)

Hier könnt Ihr gute, von Euch geschriebene Codes posten. Sie müssen auf jeden Fall funktionieren und sollten möglichst effizient, elegant und beispielhaft oder einfach nur cool sein.
Benutzeravatar
Kurzer
Beiträge: 1617
Registriert: 25.04.2006 17:29
Wohnort: Nähe Hamburg

Re: Module: Silbentrennung

Beitrag von Kurzer »

Klar ist das okay, RSBasic, besten Dank.

In Post 1 ist jetzt eine aktuelle Version verfügbar (1.02), die eine Wortende-Behandlung hat.
Damit wird Dein Wort "Installationseinstellungen" richtig getrennt. Deine anderen Worte muss ich dann noch testen.

Edit: RSBasic, Deine Wortliste wird jetzt korrekt getrennt. Ich habe die Datenbasis erweitert und die Beispiel alle in post 1 ein-ge-fügt. :)
"Never run a changing system!" | "Unterhalten sich zwei Alleinunterhalter... Paradox, oder?"
PB 6.02 x64, OS: Win 7 Pro x64 & Win 11 x64, Desktopscaling: 125%, CPU: I7 6500, RAM: 16 GB, GPU: Intel Graphics HD 520
Useralter in 2024: 56 Jahre.
Benutzeravatar
Kurzer
Beiträge: 1617
Registriert: 25.04.2006 17:29
Wohnort: Nähe Hamburg

Re: Module: Silbentrennung

Beitrag von Kurzer »

Kiffi hat geschrieben:
NicTheQuick hat geschrieben:Eine Idee wäre auch noch das komplette deutsche Dictionary von Hunspell zu testen. Dann kannst du sicherlich auch ganz einfach die Sonderfälle automatisiert einpflegen.
hierzu gäbe es auch einen PB-Wrapper: http://www.purebasic.fr/english/viewtop ... 12&t=49236 (weiß allerdings nicht, ob der auch funktioniert).
Danke für den link Kiffi, schaue ich mir an.
"Never run a changing system!" | "Unterhalten sich zwei Alleinunterhalter... Paradox, oder?"
PB 6.02 x64, OS: Win 7 Pro x64 & Win 11 x64, Desktopscaling: 125%, CPU: I7 6500, RAM: 16 GB, GPU: Intel Graphics HD 520
Useralter in 2024: 56 Jahre.
Nino
Beiträge: 1300
Registriert: 13.05.2010 09:26
Wohnort: Berlin

Re: Module: Silbentrennung

Beitrag von Nino »

Der Vollständigkeit halber:
Hier gibt's sowas Ähnliches. :-)
Benutzeravatar
Thorsten1867
Beiträge: 1359
Registriert: 04.02.2005 15:40
Computerausstattung: [Windows 10 x64] [PB V5.7x]
Wohnort: Kaufbeuren
Kontaktdaten:

Re: Module: Silbentrennung

Beitrag von Thorsten1867 »

Habe mich vor einiger Zeit mit dem Thema beschäftigt.
Mein Ansatz basiert auf Hyphenation Pattern (Algorithmus von Frankling Mark Liang) und funktioniert sehr zuverlässig.
http://www.purebasic.fr/german/viewtopi ... entrennung
Download of PureBasic - Module
Download of PureBasic - Programmes

[Windows 11 x64] [PB V6]

Bild
Benutzeravatar
Dadido3
Beiträge: 103
Registriert: 24.02.2007 22:15
Kontaktdaten:

Re: Module: Silbentrennung

Beitrag von Dadido3 »

Danke fürs Teilen.

Der Algorithmus funktioniert im Großen und Ganzen gut.
Hier sind aber ein paar Fehler die ich gefunden habe:
Sil|ben|tren|nung|sal|go|rith|mus anstatt Sil|ben|tren|nungs|al|go|rith|mus
Rechtsch|rei|bung anstatt Recht|schrei|bung
An|schauungskraft anstatt An|schau|ungs|kraft
Be|treuungsgeld anstatt Be|treu|ungs|geld
Bef|reiungsschlag anstatt Be|frei|ungs|schlag
Er|ge|bnis anstatt Er|geb|nis
Rö|schen anstatt Rös|chen
Rö|schen|hof wiederum wird richtig getrennt, kommt aber auch vom Eigennamen Rösch.
Falls es aber von Rose kommt wäre es aber Rös|chen|hof

Und weil das noch nicht verwirrend genug war, lautet es:
Wach|stube
oder
Wachs|tube
?
Hier habe ich ein online Silbentrenner gefunden:
http://www.softhyphen.com/hyphenate
Den entsprechenden Code (in Python) und die dictionaries gibt es hier:
https://github.com/fortes/softhyphen
Dieser Algorithmus wird auch in OpenOffice verwendet, und wenn ich mich nicht irre
dann ist es der gleiche welcher auch von Thorsten verwendet wird.

zu gu­ter Letzt:
https://www.youtube.com/watch?v=M7R35mhPaaI
Benutzeravatar
Kurzer
Beiträge: 1617
Registriert: 25.04.2006 17:29
Wohnort: Nähe Hamburg

Re: Module: Silbentrennung

Beitrag von Kurzer »

Vielen Dank für Euer feedback.

Wie ich sehe kommt der von mir verwendete Algorithmus auch nicht ohne größere Vorsilben-, Ausnahme- und Endungslisten aus.
Vermutlich werde ich die Daten in externe Dateien auslagern, damit man sie bequemer pflegen kann.

Vielleicht mal zur Erklärung: Mir liegt nur der Algorithmus zu meiner Umsetzung vor. Die Qualität der Trennungen hängt aber weitestgehend von der Vollständigkeit der benötigten Vokale und konsonaten-Gruppen in den Variablen sVokale... und sKonsonaten... sowie der verwendeten Vorsilben in sVorsilben ab. Diese Daten liegen mir nicht komplett vor und die gilt es jetzt durch die fehlerhaften Trennungen zu vervollständigen.

Die zusätzlich verwendeten Ausnahme-Daten, die ganze Wortteile beschreiben, sollten dabei so wenig wie möglich Verwendung finden (das sind die Datatzeilen am Ende des Moduls). Das sollte dan nnur das letzte Mittel sein - quasi die Holzhammermethode.
"Never run a changing system!" | "Unterhalten sich zwei Alleinunterhalter... Paradox, oder?"
PB 6.02 x64, OS: Win 7 Pro x64 & Win 11 x64, Desktopscaling: 125%, CPU: I7 6500, RAM: 16 GB, GPU: Intel Graphics HD 520
Useralter in 2024: 56 Jahre.
Benutzeravatar
Kurzer
Beiträge: 1617
Registriert: 25.04.2006 17:29
Wohnort: Nähe Hamburg

Re: Module: Silbentrennung

Beitrag von Kurzer »

Dadido3 hat geschrieben:
Sil|ben|tren|nung|sal|go|rith|mus anstatt Sil|ben|tren|nungs|al|go|rith|mus
Rechtsch|rei|bung anstatt Recht|schrei|bung
An|schauungskraft anstatt An|schau|ungs|kraft
Be|treuungsgeld anstatt Be|treu|ungs|geld
Bef|reiungsschlag anstatt Be|frei|ungs|schlag
Er|ge|bnis anstatt Er|geb|nis
Rö|schen anstatt Rös|chen
Rö|schen|hof wiederum wird richtig getrennt, kommt aber auch vom Eigennamen Rösch.
Falls es aber von Rose kommt wäre es aber Rös|chen|hof
Danke.
In der neuen Version 1.03 wurde eine Trennung an Doppelkonsonanten und Mehrfachvokalen zugefügt. Außerdem ist die Datenbasis erweitert worden, so dass alle bisherigen Beispiele aus dem Thread korrekt übersetzt werden.
"Never run a changing system!" | "Unterhalten sich zwei Alleinunterhalter... Paradox, oder?"
PB 6.02 x64, OS: Win 7 Pro x64 & Win 11 x64, Desktopscaling: 125%, CPU: I7 6500, RAM: 16 GB, GPU: Intel Graphics HD 520
Useralter in 2024: 56 Jahre.
Benutzeravatar
Kurzer
Beiträge: 1617
Registriert: 25.04.2006 17:29
Wohnort: Nähe Hamburg

Re: Module: Silbentrennung

Beitrag von Kurzer »

Hallo zusammen,

ich habe nach langer Zeit mal wieder was an dem Modul gemacht.
Ein kleiner fix (eine ungenutzte Variable aus dem code entfernt) sowie die Trennungsleistung verbessert indem ich die Datenbasis erweitert und eine neue Sonderfallfunktion für ganze Wortkombinationen zugefügt habe.

Als kleines Hilfsmittel habe ich im Beispielvode des Moduls nun eine Funktion zugefügt, die (versucht) die Korrektheit des von dem Modul getrennten Wortes direkt auf http://www.duden.de zu prüfen. Da duden.de keine API dafür hat oder ich davon nichts weiß, versuche ich das Ergebnis aus dem HTPRequest heraus zu parsen. Das funktioniert vermutlich nur so lange bis duden.de den Aufbau ihrer Seite verändert - also nichts für die Ewigkeit. :wink:

Der Aufruf dafür lautet:

Code: Alles auswählen

Check("Überschallflugzeug")
Im Debugfester gibt es darauf hin diese drei möglichen Ergebnisse:

Code: Alles auswählen

Über|schall|flug|zeug          Korrekt!
oder 
Über|schall|flug|zeug          ist nicht im Duden vorhanden
oder
Über|schall|flug|zeug          luss lt. Duden heißen: <korrekte Trennweise>

Code: Alles auswählen

;* 1.04 - 14.04.19:
;*        fix Nicht benutzte Variable entfernt und Trennungsgenauigkeit verbessert (Datenbasis erweitert)
;*        add SonderfallGanzesWort() hinzugefügt für nicht algorithmisch trennbare Wortkombinationen
;*            z.B. für Sil|ber|ei|sen statt falsch Sil|be|rei|sen (Silbe & Reisen)
;*        add Im Beispielcode des Modules wurden Funktionen zugefügt, die die Korrektheit der Trennung online
;*            bei www.duden.de überprüfen.
Der aktuelle Code befindet sich im ersten Post dieses Threads.

Gruß Kurzer
"Never run a changing system!" | "Unterhalten sich zwei Alleinunterhalter... Paradox, oder?"
PB 6.02 x64, OS: Win 7 Pro x64 & Win 11 x64, Desktopscaling: 125%, CPU: I7 6500, RAM: 16 GB, GPU: Intel Graphics HD 520
Useralter in 2024: 56 Jahre.
Benutzeravatar
Sicro
Beiträge: 955
Registriert: 11.08.2005 19:08
Kontaktdaten:

Re: Modul: Algorithmische Silbentrennung (deutsch)

Beitrag von Sicro »

Fix für Procedure AskDuden():

Code: Alles auswählen

; Status prüfen und die korrekte Trennungsschreibweise aus der duden.de webseite extrahieren und übergeben
If FindString(sResponse, "Es ist leider ein Fehler aufgetreten") = 0
  If FindString(sResponse, "Von Duden empfohlene Trennung") > 0
    sResponse = GetStringPart(sResponse, ~"Von Duden empfohlene Trennung</dt><dd class=\"tuple__val\">", "</dd>")
  Else	
    sResponse = GetStringPart(sResponse, ~"Worttrennung</dt><dd class=\"tuple__val\">", "</dd>")
  EndIf
  ProcedureReturn sResponse
EndIf
Bild
Warum OpenSource eine Lizenz haben sollte :: PB-CodeArchiv-Rebirth :: Pleasant-Dark (Syntax-Farbschema) :: RegEx-Engine (kompiliert RegExes zu NFA/DFA)
Manjaro Xfce x64 (Hauptsystem) :: Windows 10 Home (VirtualBox) :: Neueste PureBasic-Version
Benutzeravatar
Kurzer
Beiträge: 1617
Registriert: 25.04.2006 17:29
Wohnort: Nähe Hamburg

Re: Modul: Algorithmische Silbentrennung (deutsch)

Beitrag von Kurzer »

Vielen Dank für die Anpassung Sicro. :allright:
Ich habe das Modul angepasst und den Code im ersten Posting aktualisiert.

Gruß Kurzer
"Never run a changing system!" | "Unterhalten sich zwei Alleinunterhalter... Paradox, oder?"
PB 6.02 x64, OS: Win 7 Pro x64 & Win 11 x64, Desktopscaling: 125%, CPU: I7 6500, RAM: 16 GB, GPU: Intel Graphics HD 520
Useralter in 2024: 56 Jahre.
Antworten