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("")(_ + " " + _))
다음은 Markov 체인에 대한 Wikipedia 기사에서 생성 된 샘플 출력입니다.
오늘 고정 분포는 고유하지 않습니다. I 확률이 k 오른쪽 화살표 위치를 충족하지 않음 전이 확률 분포는 시스템의 매개 변수가 시스템에있는 매개 변수 인 경우에만 매핑으로 표현 될 수 있으며, n이 고정 분포의 경우 i에서 고정 분포 또는 변하지 않는 경우 Q에 대한 고정 분포를 충족합니다.
당신이 사용하는 경우 그건 그렇고, "[a-zA-Z .,!?]".r
로 wordregex
당신은뿐만 아니라 편지를 기반으로 해리를 눌러 생성하기 위해 이것을 사용할 수 있습니다 :
Mi pimatransie의 나머지 클래스가 시스템 상태에 필요한 nnn에 오류가 발생하여 모든 작업을 늦추는 경우 Pater ext 상태의 backgrobability가 많은 성명을 지니고있는이 그림 또는 기간.
Jargon 파일 과 같은 큰 텍스트 파일로 정말 흥미로워집니다 . 이제 문자 기반은 이미 꽤 좋습니다.
다른 방향 알고리즘은 행복하게 오류가 발생합니다. LISP Mac 사전 인터넷 액세스 워크 스테이션을 중심으로 수십 년 동안 구축 된 "프롬 (prom)"및 메타 위치 해킹 (meta-location hack)의 약자입니다. 네트워크, 특히 네트워크에서 발생하는 네트워크와의 만남으로, 일반적으로`고객과 차드에서 종이에 다시 싣고 일부는 고유 한 특성을 가졌다.
단어 기반은 매우 재미있어집니다.
그 이후로보고되었습니다. 단 하나의 리소스 누수가 예상됩니다. 반 신화적인 언어 구조는 처음부터 조정할 수 없기 때문에 일관성이 없습니다. 당신이 장난에 컴퓨터를 입력하고 종료하면 실제 컴퓨터를 얻으십시오! 노출 수 말하는 것을 말하는 냉소적 인 초대. 작은 케이블은 실제 프로그래밍으로 비난 받았다. 10 년 후 파스칼이지만, 우리 제품의 대부분은 현대의 서브 쉘과 완전히 같지 않습니다. 이 항목이 모두 어머니인지에 대한 논쟁이 있습니다.