Linguistik goes RegEx?

mueslirocker

Mitglied
Hallo Leute...

ich stehe gerade vor einer interessanten Frage (also für mich). Eigentlich sogar zwei Fragen. Ich stehe ziemlich am Anfang und dachte mir, dass es sinnvoll sein könnte, direkt die Öffentlichkeit mit einzubeziehen, um nicht das Rad neu zu erfinden.

Es geht um Regeln der Linguistik für den Aufbau von Wörtern.

1.) Ich möchte Regeln in einer Programmiersprache formulieren, die zu einer Zeichenkette erkennen, ob es wohl ein aussprechbares Wort ist.

2.) Ich möchte Regeln in einer Programmiersprache formulieren, die zu einer Zeichenkette erkennen, ob das Wort, das sie darstellen, sich auf ein anderes Wort oder einen Ausdruck in einer Lautsprache reimt.

Tatsächlich geht es in beiden Fällen im Endeffekt sogar um die Generierung solcher Wörter. Aber ich bin auch erstmal mit der Erkennung zufrieden.

Folgende Überlegungen habe ich bereits angestellt:

a) Ich denke, es gibt zu jenen Regeln jede Menge Ausnahmen, die man mit formulieren müsste.

b) Mindestens die erste Frage ist wohl von der Sprache (also nicht Programmiersprache) abhängig. Man müsste sowas wohl für verschiedene Länder einzeln formulieren.

c) Ich bin mir nicht sicher, ob es theoretisch reguläre Ausdrücke geben könnte, mit denen man solche Regeln formulieren kann. Das wäre aber mein erster Ansatz.

d) Falls es über RegEx's geht, würde ein vollständiger Regelsatz wohl verdammt kompliziert werden. Ich würde aber gerne kleine Probleme streichen (und damit keinen vollständigen Regelsatz erstellen), die zur Folge hätten, dass der Regelsatz sich erheblich verkleinert. Es sollen natürlich weiterhin nur korrekte Zeichenketten erkannt werden, aber ich kann damit leben, wenn nicht jede korrekte Zeichenkette als korrekt erkannt wird. Erweitern kann ich das Ganze später immernoch.

e) Ich schätze, dass es bereits solche Regeln gibt (wenn auch vielleicht nicht als RegEx formuliert), aber ich wusste nicht so wirklich, wonach ich da (bei Google) suchen sollte (bin mir schon bei dem Wort Linguistik nicht sicher, ob es passend ist, aber es erschien mir allgemein genug).
Dass nach einem Vokal ein Konsonant folgen sollte, könnte eine solche Regel sein, wobei selbst da schon x Ausnahmen existieren. Mir fehlt da irgendwie ein Einstieg.

Ich wäre dankbar für allgemeine Überlegungen zu dem Thema und natürlich besonders für Quellen, die das Thema bereits behandeln. (Ich hab ein Bild vor Augen von deinem Forum voller Sprachwissenschaftler, die das Problem schon genau diskutiert haben und mir eine Antwort geben können, die ich "nur noch" in eine Programmiersprache übersetzen muss. :D)
Oder gibt es sowas vielleicht sogar schon als Projekt/Programm/Algorithmus?
 

mueslirocker

Mitglied
Okay, ich habe mich nun etwas eingelesen und ich habe tatsächlich einen regulären Ausdruck gefunden, der Wörter für die deutsche Sprache generiert. So schwer ist er gar nicht. Es gibt im Deutschen wohl drei Arten von Silben. Jene, mit denen ein Wort anfangen muss, jene, die in der Mitte eines Wortes stehen können und jene, mit denen ein Wort aufhören muss. Aufbau besteht immer aus drei Teilen. Phoneme, wenn ich grad nicht irre. In der Mitte ein Vokal (oder was man da so drunter versteht...), Unterschied bei den Silbenarten sind die Phoneme vor und hinter dem Vokal. Onset, Gipfel und Koda... oder so. Onsets und Kodas gibt es zwei Arten. Jede Silbe kann auf Onset und Koda (oder auf eins von beidem) verzichten. Daraus ergibt sich dieses Muster (das Minus steht für eine Silbentrennung und ist für die Wortbildung nicht wichtig):

für eine Silbe:
Code:
Onset[a]? Gipfel Koda[b]?


für zwei Silben:
Code:
Onset[a]? Gipfel Koda[a]? - Onset[b]? Gipfel Koda[b]?


mehr als zwei Silben:
Code:
Onset[a]? Gipfel Koda[a]? - (Onset[b]? Gipfel Koda[a]?)* - Onset[b]? Gipfel Koda[b]?


Daraus ergibt sich dieser reguläre Ausdruck:
Code:
Onset[a]? (Gipfel Koda[a]? - Onset[b]?)* Gipfel Koda[b]?


War jetzt aus dem Gedächtnis und so, wie ich es verstanden habe. Kann das jemand soweit bestätigen? Wie die Mengen
Code:
Onset[a], Onset[b], Gipfel, Koda[a] und Koda[b]
aussehen, kann man über Google finden, denke ich.

Ich habe nach diesem Ausdruck Wörter erzeugt (das * ersetzt man durch die gewünschte Silbenzahl minus eins). Ich denke, ich konnte wirklich alle aussprechen, aber... einige waren verdammt komisch. Ich denke, einige Phoneme gibt es in der deutschen Sprache öfter als andere. Umlaute gibt es z.B. bestimmt nicht so oft wie normale Vokale. Vielleicht sollte ich eine Gewichtung bei der Wahl aus den Mengen benutzen. Nun könnte ich nach dem RegEx wohl deutsche Wörterbücher durchgehen und die Phoneme zählen und für die drei Silbenarten zählen, welches Phonem wie häufig ist, wobei ich nicht vergessen darf, dass Onset und Koda auch manchmal fehlen... diese leeren Wörter müsste ich mit zählen und gewichten.. vermutlich würden sie ein hohes Gewicht bekommen. Aber ist das praktikabel? Gibt es da nicht einen besseren Ansatz?

Reime habe ich mir noch nicht angeschaut. Ich denke, da geht es um Lautschrift, aber wie gesagt, ich bin da noch nicht eingestiegen.