这是用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("")(_ + " " + _))
这也是从marked链上的Wikipedia文章生成的示例输出:
今天的平稳分布不会是唯一的我的概率满足k右箭头的位置,非转移概率分布只能用系统单位上的参数表示,允许n是唯一的,因为i是平稳分布或不变测度。满足Q的平稳分布。
顺便说一句,如果您使用"[a-zA-Z .,!?]".r
,wordregex
也可以使用它来生成基于字母的离解印刷机:
如果Mi pimatransie的休止类打开了系统状态所需的nnn错误,然后随机执行所有任务,则该图或期间具有可重现性的Pater ext状态具有一定的可重复性。
像Jargon文件这样的大型文本文件变得非常有趣。现在基于字母的功能已经相当不错了:
其他方向算法会很乐意出错,而且很少见;LISP Mac pre-Internet访问工作站周围已经有数十年的历史了,它曾经是“临时舞会和元定位黑客”的简写。这可能已经死了。网上遇到的东西,尤其是来自网络的东西,通常是“客户”,然后再将其追回纸上,其中一些具有独特的属性。
基于单词的变得非常有趣:
此后据报道。它唯一期望的是一个资源泄漏n。半神话语言的结构不一致,因为它不能首先进行调整。如果您在嬉戏中输入计算机并结束,请获取真实计算机!小鬼 讽刺邀请说。小电缆被指责为真正的编程。十年后的Pascal,但我们大多数产品的现代Subshell不太一样。关于这个词条是否每个人的母亲都有争议。