Oto nieco bardziej wyrafinowany algorytm oparty na słowach napisany w Scali , który uwzględnia prawdopodobieństwa sekwencji słów o dowolnej długości. (To nie jest oryginalny zdysocjowany algorytm prasy ).
Algorytm jest następujący. W każdym kroku wybierz ruchomą połowę tekstu, zaczynając od losowej pozycji, wyszukaj najdłuższą sekwencję ogona słów wyjściowych, która występuje w tej połowie (może to być 0 słów) i wyślij następne słowo.
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("")(_ + " " + _))
Oto przykładowe wyniki wygenerowane również z artykułu w Wikipedii na temat łańcuchów markowskich:
dziś rozkłady stacjonarne nie będą unikalne I prawdopodobieństwa spełniają pozycję k strzałki w prawo, a rozkład prawdopodobieństwa przejścia może być reprezentowany odwzorowaniem tylko wtedy, gdy parametry w jednostce systemu, Zezwalając n na unikalność, to znaczy w rozkładzie stacjonarnym lub niezmiennej miary, jeśli to spełnia rozkład stacjonarny dla Q.
Nawiasem mówiąc, jeśli używasz "[a-zA-Z .,!?]".r
jak wordregex
można to wykorzystać do wytworzenia się zdysocjowanego prasy w oparciu, a także:
Ten okres lub okresy, w których możliwość rozszerzenia Pater ext ze stochare są godne uwagi, jeśli istnieje klasa, w której Mi pimatransie, otwiera, że nnn potrzebuje stanu systemowego to błędy, a następnie limpor wszystkie zadania.
To staje się naprawdę interesujące z dużym plikiem tekstowym, takim jak plik Jargon . Teraz oparty na liście jest już całkiem dobry:
Inny algorytm kierunku będzie na szczęście błędami i niezbyt często; jest to skrót od „bycia promem” i hakowania meta-lokalizacji z dziesięcioleciami zbudowanymi wokół stacji roboczej LISP Mac przed dostępem do Internetu. To może być martwe. Miara konkurentów, popularny kompilator kończący się wielokrotnie na sekundę, i był pijawką. z napotkanymi w sieci, zwłaszcza z sieci. Zwykle `klient i czad to z powrotem na papier. Kilka miało unikalne właściwości.
Bazowanie na słowie staje się dość zabawne:
Zostało to zgłoszone. Jedyne, czego oczekuje, to wyciek jednego zasobu n. Na wpół mityczny konstrukt języka jest niespójny, ponieważ nie można go w pierwszej kolejności dostosować. Jeśli wejdziesz do komputera w zabawny i zakończony Zdobądź prawdziwy komputer! imp. Sarkastyczne zaproszenie do mówienia. Mały kabel obwiniano za prawdziwe programowanie. Pascal dziesięć lat później, ale większość naszych produktów to nie ta sama nowoczesna podpowłoka. Istnieje spór, czy ten wpis jest matką wszystkich.