Voici un algorithme basé sur des mots légèrement plus sophistiqué écrit en Scala , qui prend en compte les probabilités de séquences de mots de longueur arbitraire. (Ce n'est pas l' algorithme de presse dissocié d'origine .)
L'algorithme est le suivant. À chaque étape, sélectionnez une moitié roulante du texte commençant à une position aléatoire, recherchez la séquence de queue la plus longue des mots de sortie qui se produit dans cette moitié (cela pourrait être 0 mots) et sortez le mot suivant.
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("")(_ + " " + _))
Voici un exemple de sortie également généré à partir de l'article de wikipedia sur les chaînes de Markov:
aujourd'hui les distributions stationnaires ne seront pas uniques I les probabilités satisfont la position k de droite non la distribution de probabilité de transition ne peut être représentée en mappant que si les paramètres sur l'unité du système, Permettant n d'être unique, en ce que i dans la distribution stationnaire ou mesure invariante si elle satisfait la distribution stationnaire de Q.
Soit dit en passant, si vous utilisez "[a-zA-Z .,!?]".r
comme wordregex
vous pouvez l'utiliser pour générer également une presse dissociée basée sur des lettres:
Cette figurrent ou périodes où une backgrobabilité l'état ext Pater avec stochare un certain nombre de façon détermente si la classe restante d'où Mi pimatransie, ouvre que le besoin nnn besoin par un état du système est des errements, puis limpor toute tâche.
Cela devient vraiment intéressant avec un gros fichier texte comme le fichier Jargon . Maintenant, la lettre est déjà assez bonne:
Un autre algorithme de direction sera heureusement des erreurs, et un rare; cela a été un raccourci pour "être des proms, et un piratage de méta-localisation avec des décennies construites autour de la station de travail d'accès pré-Internet LISP Mac. Cela peut être mort. Une mesure des concurrents, un compilateur populaire se termine à plusieurs reprises, et était sangsue. avec le rencontré sur le net, en particulier à partir d'un réseau. Habituellement `client et sur le tchad, il retour sur papier.
Basé sur les mots devient assez amusant:
Cela a depuis été signalé. La seule chose qu'il attend une fuite de ressource n. Une construction de langage semi - mythique dans un inconsistant car il ne peut pas s'adapter en premier lieu. Si vous entrez dans un ordinateur de façon ludique et terminée Obtenez un vrai ordinateur! imp. Invitation sarcastique à dire parler. Les petits câbles ont été accusés de véritable programmation. Pascal dix ans plus tard, mais la majorité de notre produit n'est pas tout à fait le même sous-shell moderne. Il y a un différend quant à savoir si cette entrée est la mère de tout le monde.