Hier ist ein etwas ausgefeilterer wortbasierter Algorithmus, der in Scala geschrieben wurde und die Wahrscheinlichkeiten von Wortsequenzen beliebiger Länge berücksichtigt. (Das ist nicht der ursprüngliche dissoziierte Pressealgorithmus .)
Der Algorithmus ist wie folgt. Wählen Sie in jedem Schritt eine fortlaufende Hälfte des Texts aus, beginnend an einer zufälligen Position, suchen Sie nach der längsten Endsequenz von Ausgabewörtern, die in dieser Hälfte vorkommt (dies können 0 Wörter sein), und geben Sie das nächste Wort aus.
import io._, collection.mutable.ArrayBuffer, util.Random
import java.io.FileInputStream
val lines = new BufferedSource(new FileInputStream("markov.txt")) getLines
val wordregex = "\\b[a-zA-Z]+\\b|[.,?!]".r
val words = lines flatMap (wordregex findAllIn _) toArray
val rollingwords = words ++ words.slice(0, words.length / 2)
val rnd = new Random()
val outwords = new ArrayBuffer[String]()
for (i <- 1 to 1000) {
val startposition = rnd nextInt (words.length * 2 / 3)
val half = rollingwords slice (startposition, startposition + words.length / 3)
var newword = ""; var n = 0; var index = 0
while (index >= 0 && n < half.length && n < outwords.length) {
index = half.indexOfSlice(outwords.takeRight(n))
if (index >= 0 && index < half.length - n) {
newword = half(index + n)
}
n = n + 1
}
outwords += newword
}
println(outwords.foldLeft("")(_ + " " + _))
Hier ist eine Beispielausgabe, die auch aus dem Wikipedia-Artikel über Markov-Ketten generiert wurde:
Heute werden stationäre Verteilungen nicht eindeutig sein. I Wahrscheinlichkeiten erfüllen k die richtige Position, ohne dass die Übergangswahrscheinlichkeitsverteilung nur dann dargestellt werden kann, wenn die Parameter auf der Einheit des Systems eindeutig sind, dh in der stationären Verteilung oder wenn dies invariant ist erfüllt die stationäre Verteilung für Q.
By the way, wenn Sie verwenden , "[a-zA-Z .,!?]".r
wie wordregex
können Sie diese verwenden Brief basierte dissoziierte Presse als auch zu generieren:
Diese Figur oder Perioden, in denen eine Backgrobability des Pater-Ext-Zustands mit einer Anzahl von Fehlern auftritt, wenn die Klasse, in der Mi pimatransie auftritt, öffnet, dass die von einem Systemzustand benötigte NNN-Anforderung fehlerhaft ist, dann alle Aufgabe beschränkt.
Bei einer großen Textdatei wie der Jargon-Datei wird es wirklich interessant . Jetzt ist letter based schon ganz gut:
Anderer Richtungsalgorithmus wird glücklich Fehler, und ein seltener; Es ist eine Abkürzung für "out being proms" und ein Meta-Location-Hack mit Jahrzehnten, der auf der LISP Mac-Workstation vor dem Internetzugang aufgebaut ist. Dies mag tot sein. Ein Maß an Konkurrenten, ein beliebter Compiler endete immer wieder auf dem zweiten Platz, und es wurde Blutegel arrangiert mit dem im netz angetroffenen, insb. aus einem netzwerk. in der regel `kunde und auf dem chad es wieder auf papier. mehrere hatten in den eigenschaften.
Wortbasiert wird ziemlich amüsant:
Dies wurde seitdem gemeldet. Das einzige, was es erwartet, ist ein Ressourcenleck n. Ein halbmythisches Sprachkonstrukt in einem inkonsistenten, weil es sich überhaupt nicht anpassen kann. Wenn Sie einen Computer in einem spielerischen eingeben und beendet Holen Sie sich einen echten Computer! Kobold Sarkastische Einladung zum Sprechen. Kleine Kabel wurden für echte Programmierung verantwortlich gemacht. Pascal zehn Jahre später, aber die Mehrheit unserer Produkte nicht ganz die gleiche moderne Unterschale. Es ist umstritten, ob dieser Eintrag jedermanns Mutter ist.