Ось дещо складніший алгоритм на основі слів, написаний у Scala , який враховує ймовірності послідовностей слів довільної довжини. (Це не оригінальний алгоритм роз'єднаної преси .)
Алгоритм такий. На кожному кроці виберіть половину тексту, що починається з випадкової позиції, знайдіть найдовшу хвостову послідовність виведених слів у цій половині (це може бути 0 слів) та виведіть наступне слово.
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("")(_ + " " + _))
Ось зразок виводу, також створений зі статті Вікіпедії про маркові ланцюги:
сьогодні стаціонарні розподіли не будуть унікальними I ймовірності задовольняють k правильному положенню стрілки, не розподіл ймовірностей розподілу може бути представлений відображенням лише в тому випадку, якщо параметри на одиниці системи, дозволяючи n бути унікальними, в тому, що я в стаціонарному розподілі або інваріантній мірі, якщо він задовольняє стаціонарний розподіл для Q.
До речі, якщо ви використовуєте це, "[a-zA-Z .,!?]".r
як wordregex
ви можете використовувати це для створення також роз'єднаної преси на основі літер:
Цей фігурант або періоди, коли відновлюваність стану Pater ext із збереженням кількості делемелей, якщо тест-клас, де Mi pimatransie, відкриває, що nnn потребує системний стан, є errords, то обмежують усе завдання.
Це стає справді цікавим з великим текстовим файлом, як файл Jargon . Зараз на основі листів вже досить непогано:
Інший алгоритм напрямку буде щасливо помилками і нечастостями; це скорочення для "виходу з випускних коней та мета-локації з десятиліттями, побудованими навколо робочої станції перед доступом до Інтернету LISP Mac. Це може бути мертвим. Міра конкурентів, популярний компілятор закінчується неодноразово, і був п'явок. з мережею, що зустрічається в мережі, особливо з клієнта, як правило, "клієнт і на чаді він повертається на папір. Деякі з них мали унікальні властивості.
База слів стає досить кумедною:
Про це з тих пір повідомляється. Єдине, чого він очікує, один витік ресурсів n. Напіміфічна мовна конструкція непослідовна, оскільки вона в першу чергу не може коригуватися. Якщо ви введете комп'ютер грайливо і закінчили Отримайте справжній комп’ютер! імп. Саркастичне запрошення сказати Говорячи. Невеликий кабель звинувачували в реальному програмуванні. Паскаль через десять років, але більшість нашого продукту не зовсім та сама сучасна подоба. Існує певна суперечка щодо того, чи є цей запис усіма матір'ю.