markovchain generates a markov chain based on text passed into it.
var MarkovChain = require('markovchain')
, fs = require('fs')
, quotes = new MarkovChain(fs.readFileSync('./quotes.txt', 'utf8'))
console.log(quotes.start('The').end(5).process())
This will read a file, "quotes.txt", generate a word chain, then attempt to generate sentences starting with the word
"The" that are 5 words long, and then output to console.
content
: the content that you want passed into the markov chain
normalizeFn
: the function to apply to every word (generally to clean it up,
e.g. removing commas and other non-letter words)
The start
method can take in either a string
str, in which case it will look
to use that word to start the sentence.
If you instead pass a function
func with one parameter, wordList
, you will
be given the entire list of word chains in which you can decide what words to
use to start a sentence. For example, you can generate sentences based on the
number of times a word occurs, or if the word starts with a capital letter.
Example:
var useUpperCase = function(wordList) {
var tmpList = Object.keys(wordList).filter(function(word) {
return word[0] >= 'A' && word[0] <= 'Z'
})
return tmpList[~~(Math.random()*tmpList.length)]
}
console.log(quotes.start(useUpperCase).end().process())
The end
method can take a String
, Integer
, or Function
str
, the markov chain will generate words until the
word matches str
or the generator can no longer find words to chain.int
, the markov chain will generate words until the
sentence length (as measured by word count) matches int
or the generator can no longer find words to
chain.func
, the markov chain will generate words until
function func
returns true. func
will be passed one parameter, sentence
that returns the generated sentence so farExample:
// same as passing value, 5 to end function
var stopAfterFiveWords = function(sentence) {
return sentence.split(" ").length >= 5
}
console.log(quotes.start(useUpperCase).end(stopAfterFiveWords).process())
end
, the markov chain will generate words until it
can no longer find words to chain.The parse
function adds more content to the markov chain. This allows you to
content later on, rather than needing all the next when you instantiate the
markov chain.
If you pass a second parameter, parseBy
, it specifies how the content will be
parsed into sentences (which are then further parsed down into words). By
default parseBy
will parse into newlines, periods, and question marks.
Example:
var m = new MarkovChain('some text here')
m.parse('add additional text')
console.log(m.parse('more and more text').end(5).process())
1.0.0
var MarkovChain = require('markovchain').MarkovChain
0.0.6
end()
0.0.5
0.0.4
0.0.3
end()
has changed a little bit, before the markov
chain would continue until the Function passed returned false, now the Function
being passed into end()
should only return true when you want the markov chain
generator to stop generating the sentence.start
can now accept a Function instead of just a String0.0.2
0.0.1