trimill.xyz/flaskr/templates/projects/markov/markov.js

41 lines
903 B
JavaScript

var chain = {
'!':[]
}
function runChain() {
var index = '!';
var word = '';
while(index != '') {
var exits = chain[index];
var next = exits[Math.floor(Math.random() * exits.length)];
if(next == '') break;
if(order == 1)
index = next;
else
index = index.slice(-order+1) + next;
word += next;
}
return word;
}
function populateChain(corpus) {
chain = {'!':[]};
corpus = corpus.replace(/[^A-Za-z\s]|_/g, '').replace(/\s+/g, ' ').trim().toLowerCase();
corpus = ' ' + corpus + ' ';
for(var i = 1; i < corpus.length; i++) {
var cur = corpus[i];
var prev = '';
for(var j = 0; j < order; j++) {
if(corpus[i-1-j] == ' ') {
prev = '!' + prev;
break;
}
prev = corpus[i-1-j] + prev;
}
if(cur == ' ') cur = '';
if(chain[prev] == undefined) chain[prev] = [];
chain[prev].push(cur);
}
console.log(chain);
}