Aquí hay un algoritmo basado en palabras ligeramente más sofisticado escrito en Scala , que tiene en cuenta las probabilidades de secuencias de palabras de longitud arbitraria. (Ese no es el algoritmo original de la prensa disociada ).
El algoritmo es como sigue. En cada paso, seleccione una mitad rodante del texto que comience en una posición aleatoria, busque la secuencia de cola más larga de las palabras de salida que se produce en esa mitad (puede ser 0 palabras) y envíe la siguiente palabra.
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("")(_ + " " + _))
Aquí hay una salida de muestra también generada a partir del artículo de Wikipedia sobre las cadenas de Markov:
hoy las distribuciones estacionarias no serán únicas I las probabilidades satisfacen k la posición de la flecha derecha no la distribución de probabilidad de transición se puede representar mapeando solo si los parámetros en la unidad del sistema, permitiendo que n sea único, en el sentido de que i en la distribución estacionaria o medida invariante si satisface la distribución estacionaria para Q.
Por cierto, si usa "[a-zA-Z .,!?]".r
como wordregex
puede usar esto para generar una prensa disociada basada en letras también:
Esta cifra o períodos en los que una capacidad de backgrobabilidad del estado de Pater ext con almacenamiento es un número de casos detestablemente si la clase de descanso de donde Mi pimatransie abre, la necesidad de un estado del sistema es errords, luego limitan todas las tareas.
Se vuelve realmente interesante con un archivo de texto grande como el archivo Jargon . Ahora basado en cartas ya es bastante bueno:
Otro algoritmo de dirección felizmente errores, y un poco común; ha sido la abreviatura de "ser proms y hackeo de meta-ubicación con décadas construidas alrededor de la estación de trabajo de acceso previo a Internet LISP Mac. Esto puede estar muerto. Una medida de competidores, un compilador popular terminó repetidamente en segundo lugar, y fue sanguijuela. con lo encontrado en la red, especialmente de una red. Por lo general, el cliente y el chad lo devuelven al papel. Varios tenían propiedades únicas.
Wordbased se vuelve bastante divertido:
Esto ya ha sido reportado. Lo único que espera es una fuga de recursos n. Una construcción de lenguaje semimítico de una manera inconsistente porque no puede ajustarse en primer lugar. Si ingresas a una computadora de una manera lúdica y termina ¡Obtén una computadora real! imp. Invitación sarcástica para decir hablar. Se culpó al cable pequeño de la programación real. Pascal diez años después, pero la mayoría de nuestro producto no es exactamente el mismo subshell moderno. Hay alguna disputa sobre si esta entrada es la madre de todos.