diff options
Diffstat (limited to 'js/bird-words/beak.js')
-rw-r--r-- | js/bird-words/beak.js | 46 |
1 files changed, 46 insertions, 0 deletions
diff --git a/js/bird-words/beak.js b/js/bird-words/beak.js new file mode 100644 index 0000000..38a2584 --- /dev/null +++ b/js/bird-words/beak.js @@ -0,0 +1,46 @@ +const fs = require('fs'); + +const wrap = (str, width) => { + const words = str.split(' '); + return words.reduce((output, word) => { + if (output.length === 0 || output[output.length - 1].length + word.length + 1 > width) { + output.push(word); + } else { + output[output.length - 1] += ' ' + word; + } + return output; + }, []).join('\n'); +}; + +const prettyItUp = string => { + return string.charAt(0).toUpperCase() + string.slice(1) + "!"; +} + +let corpus = fs.readFileSync('input.txt', 'utf8'); +let words = corpus.toLowerCase().replace(/[.,\/#!$%\^&\*;:{}=\-_`~()]/g,"").replace(/\n/g, " ").replace(/\s{2,}/g, " ").split(" "); + +let markovChain = new Map(); + +for (let i = 0; i < words.length - 2; i++) { + let pair = words[i] + ' ' + words[i + 1]; + if (!markovChain.has(pair)) { + markovChain.set(pair, []); + } + markovChain.get(pair).push(words[i + 2]); +} + +let pairs = Array.from(markovChain.keys()); +let randomPair = pairs[Math.floor(Math.random() * pairs.length)]; +let story = randomPair; +const storyLength = 100; + +for (let i = 0; i < storyLength; i++) { + let nextWords = markovChain.get(randomPair); + if (!nextWords) { + break; + } + randomPair = randomPair.split(' ')[1] + ' ' + nextWords[Math.floor(Math.random() * nextWords.length)]; + story += " " + randomPair.split(' ')[1]; +} + +console.log(wrap(prettyItUp(story), 40)); |