Ich habe vor ein paar Jahren einen Markov-Ketten-Chatbot für IRC in Python erstellt und kann etwas Licht ins Dunkel bringen, wie ich es gemacht habe. Der generierte Text macht nicht unbedingt Sinn, aber es kann wirklich Spaß machen, ihn zu lesen. Lassen Sie es uns in Schritten zerlegen. Angenommen, Sie haben eine feste Eingabe, eine Textdatei (Sie können Eingaben aus Chat-Text oder Texten verwenden oder einfach Ihre Fantasie verwenden).
Durchlaufen Sie den Text und erstellen Sie ein Wörterbuch, dh einen Schlüsselwertcontainer. Und setzen Sie alle Wortpaare als Schlüssel und das folgende Wort als Wert. Zum Beispiel: Wenn Sie einen Text "abcab k" haben, beginnen Sie mit "ab" als Schlüssel und "c" als Wert, dann "bc" und "a" als Wert ... der Wert sollte eine Liste oder eine Sammlung sein 0..Viele 'Elemente', da Sie für ein bestimmtes Wortpaar mehr als einen Wert haben können. Im obigen Beispiel haben Sie zweimal "a b", gefolgt von "c" und am Ende von "k". Am Ende haben Sie also ein Wörterbuch / einen Hash, der wie folgt aussieht:{'a b': ['c','k'], 'b c': ['a'], 'c a': ['b']}
Jetzt haben Sie die erforderliche Struktur zum Erstellen Ihres funky Textes. Sie können wählen, ob Sie mit einem zufälligen Schlüssel oder einem festen Ort beginnen möchten! Wenn wir also die Struktur haben, die wir haben, können wir beginnen, indem wir "ab" speichern und dann zufällig ein folgendes Wort aus dem Wert c oder k nehmen, also das erste Speichern in der Schleife "ab k" (wenn "k" der gewählte zufällige Wert war ) Dann fahren Sie fort, indem Sie einen Schritt nach rechts bewegen, der in unserem Fall "bk" ist, und einen zufälligen Wert für dieses Paar speichern, wenn Sie in unserem Fall nein haben, damit Sie aus der Schleife ausbrechen (oder Sie können andere Dinge entscheiden wie von vorne anfangen). Wenn die Schleife fertig ist, drucken Sie Ihre gespeicherte Textzeichenfolge.
Je größer die Eingabe, desto mehr Werte haben Sie für Ihre Schlüssel (Wortpaar) und dann einen "intelligenteren Bot", damit Sie Ihren Bot "trainieren" können, indem Sie mehr Text hinzufügen (möglicherweise Chat-Eingabe?). Wenn Sie ein Buch als Eingabe haben, können Sie einige schöne zufällige Sätze konstruieren. Bitte beachten Sie, dass Sie nicht nur ein Wort, das einem Paar folgt, als Wert verwenden müssen, sondern 2 oder 10. Der Unterschied besteht darin, dass Ihr Text genauer erscheint, wenn Sie "längere" Bausteine verwenden. Beginnen Sie mit einem Paar als Schlüssel und dem folgenden Wort als Wert.
Sie sehen also, dass Sie grundsätzlich zwei Schritte ausführen können: Erstellen Sie zunächst eine Struktur, in der Sie zunächst zufällig einen Schlüssel auswählen, nehmen Sie dann diesen Schlüssel, drucken Sie einen zufälligen Wert dieses Schlüssels und fahren Sie fort, bis Sie keinen Wert oder eine andere Bedingung mehr haben. Wenn Sie möchten, können Sie ein Wortpaar aus einer Chat-Eingabe aus Ihrer Schlüsselwertstruktur "säen", um einen Anfang zu haben. Es liegt in Ihrer Fantasie, wie Sie Ihre Kette starten.
Beispiel mit echten Worten:
"hi my name is Al and i live in a box that i like very much and i can live in there as long as i want"
"hi my" -> ["name"]
"my name" -> ["is"]
"name is" -> ["Al"]
"is Al" -> ["and"]
........
"and i" -> ["live", "can"]
........
"i can" -> ["live"]
......
Erstellen Sie nun eine Schleife:
Wählen Sie einen zufälligen Schlüssel, sagen Sie "Hallo mein" und wählen Sie zufällig einen Wert, nur einen hier, also seinen "Namen"
(SPEICHERN von "Hallo mein Name") . Gehen Sie
nun einen Schritt nach rechts und nehmen Sie "Mein Name" als nächsten Schlüssel und wählen Sie einen zufälligen Wert ... "ist"
(SPEICHERN "Hallo, mein Name ist") .
Bewegen Sie sich jetzt und nehmen Sie "Name ist" ... "Al"
(SPEICHERN "Hallo, mein Name ist AL") .
Nehmen Sie nun "ist Al" ... "und"
(SPAREN SIE "Hallo, mein Name ist Al und") .
...
Wenn Sie zu "und i" kommen, wählen Sie zufällig einen Wert aus, sagen wir "können", dann wird das Wort "ich kann" gemacht usw. Wenn Sie zu Ihrem Stoppzustand kommen oder wenn Sie keine Werte haben, drucken Sie den konstruierten Wert Zeichenfolge in unserem Fall:
"Hallo, mein Name ist Al und ich kann dort leben, solange ich will."
Wenn Sie mehr Werte haben, können Sie zu beliebigen Tasten springen. Je mehr Werte Sie haben, desto mehr Kombinationen haben Sie und desto zufälliger und unterhaltsamer wird der Text.