Texterzeugung mit Herrn Markow

Ein Markow-Prozess - benannt nach dem russischen Mathematiker Andrei Andrejewitsch Markow - ist ein mathematisches Modell, das verwendet wird, um die zukünftige Entwicklung eines Systems vorherzusagen. Es basiert auf der Idee, dass die zukünftige Entwicklung des Systems nur von seinem aktuellen Zustand abhängt und nicht von seiner gesamten Vergangenheit.

Nonsense-Texterzeugung

Wir können einen Markow-Prozess verwenden, um vorherzusagen, welche Buchstaben(folge) als nächstes ausgegeben werden soll, basierend auf dem aktuellen Buchstaben(folge) im Text.

Einen solchen Markow-Prozess kann man sich sehr gut als Graph veranschaulichen:

Man beginnt bei einem beliebigen Buchstaben, die Pfeile des gerichteten Graphen geben die erlaubten Übergänge an. So kann man Worte bilden, die gewissen Regeln unterliegen - die erlaubten nächsten Buchstaben hängen davon ab, was der gerade aktuelle Buchstabe ist.

HAU

LAU

LAUB

RAUB

RAUS

HAUS

AUA

UAUB

Sind "erlaubte" Worte, die so erzeugt werden können.

Die tatsächlich gewählten Übergange sind dabei zufällig, die so erzeugten Worte unterliegen also den Regeln welche der Graph vorgibt, es ist aber gleich wahrscheinlich, ob nach einem U ein B, ein S oder ein A angefügt wird.

Ausprobieren

Das BlueJ-Projekt "Markow-Texter" erlaubt es, einen solchen Textgenerator auszuprobieren und zu untersuchen.

Lade das Bluej-Projekt herunter1) oder klone es . Um das Programm zu verwenden, öffnet man das BlueJ-Projekt und führt die JavaFX Anwendung aus, indem man mit der rechten Maustaste auf die Klasse "MarkowFX" klickt und im Menü den Punkt "Run JavaFX Application" auswählt - dann sollte sich das Programmfenster öffnen:

(A1)

Teste das Programm mit der "Trainingsdatei" laub.txt.

Wichtig: Beim einlesen des Trainingstextes werden alle Zeichen in Kleinbuchstaben konvertiert, paarige Zeichen wie Anführungszeichen entfernt und Zeilenumbrüche durch ein großes "N" ersetzt.

Wähle als Grad 1

Klicke dann auf Text lernen

Analysiere die Ausgabe im Textfeld. Notiere, was diese Bedeuten könnte.

Wähle als Textlänge 40 Zeichen

Klicke anschließend auf Text erzeugen

Wie funktionierts?

Die Funktionalität des Markow Texters findet sich in der Klasse Markow2) Die MarkowFX Klasse ist vor allem für die GUI zuständig, aber natürlich arbeiten die beiden zusammen. .

Die wichtigsten Bestandteile:

uebergaenge: Das ist eine HashMap, das den Übergangsgraphen speichert. Dort wird festgehalten, welche Folgezeichen zu einem aktuellen Zustand erlaubt sind.

private Map<String, Map<Character, Integer>> uebergaenge;

Beim Lernen des Texts wird hier z.B. folgendes eingetragen:

"a": u(6) N(2)

Das bedeutet, dass uebergaenge["a"] eine Liste von Zeichen mit ihrer zugehörigen Häufigkeit enthält, mit der sie im Anschluss an "a" aufgetreten sind: u 6 mal, ein Zeilenumbruch folgte 2 mal auf ein "a".