3.2 KiB
markov
Generate markov chains for chatbots and freestyle rap contests.
examples
qwantz
qwantz.js:
var util = require('util');
var fs = require('fs');
var markov = require('markov');
var m = markov(1);
var s = fs.createReadStream(__dirname + '/qwantz.txt');
m.seed(s, function () {
var stdin = process.openStdin();
util.print('> ');
stdin.on('data', function (line) {
var res = m.respond(line.toString()).join(' ');
console.log(res);
util.print('> ');
});
});
output:
$ node example/qwantz.js
> Hello friend.
Oh, that hurts me. How could fall apart, not unlike this tiny house. remains a danger when you? As I see him (quite often, Yes, As Thank I you? take have on! forgotten male, That oppression is is a A friend
> That is troubling news!
I've I had must to guard do against with such the a irony part of of their their fundamental fundamental injustices.
> Justice eh? SOMEBODY LIGHT UP THE BATSIGNAL
crazy I Utahraptor feel slipped alot in better! your about problems the put future! behind full You? of go My down perspective. The
methods
markov(order)
Create a new markov object of order order
, which defaults to 2.
.seed(s, cb)
Seed the markov object with a string or stream s
.
If s
is a string, transition probabilities will be updated for every grouping
of the previously specified order with dangling links at the front and end in
the appropriate direction.
If s
s is a stream, data events will be line-buffered and fed into .seed()
again
line-by-line.
If cb
is specified it will fire once the seed text is fully ingested.
.search(text)
Search for and return some key found in the text body text
.
Return undefined
if no matches were found.
.pick()
Choose a key at random.
.next(key)
Find a key likely to follow after key
.
Returns a hash with keys key
, the canonical next key and word
, a raw form of
key
as it appeared in the seed text.
.prev(key)
Find a key likely to come before key
.
Returns a hash with keys key
, the canonical next key and word
, a raw form of
key
as it appeared in the seed text.
.forward(key, limit)
Generate a markov chain forward starting at key
and returning an array of the
raw word forms along the way.
Stop when the traversal hits a terminal entry or when limit words have been generated if limit is specified.
.backward(key, limit)
Generate a markov chain backward starting at key
and returning an array of the
raw word forms along the way.
Stop when the traversal hits a terminal entry or when limit words have been generated if limit is specified.
.fill(key, limit)
Generate a markov chain in both directions starting at key
. Return an array of
the raw word forms along the way including the raw word form of the supplied
key
.
Stop when the traversal hits a terminal entry or when limit words have been generated if limit is specified.
.respond(text, limit)
Search for a starting key in text
and then call .fill(key, limit)
on it.