# markov

> Silly markov chatbot module

Latest version **0.0.7** (published 2013-09-28) · MIT license · 0 weekly downloads

## Install

```sh
npm install markov
pnpm add markov
yarn add markov
bun add markov
```

## Health

**Score 15/100 (F)** — status: abandoned.

Positive: no vulnerabilities.

Warnings: low downloads; no types; no esm support; pre 1.0.

Negative: abandoned; low maintenance score.

## Facts

| | |
|---|---|
| Version | 0.0.7 |
| Published | 2013-09-28 |
| First published | 2011-05-01 |
| Weekly downloads | 0 |
| License | MIT |
| TypeScript types | none |
| Module format | CommonJS |
| Node | >=0.4.0 |
| Dependencies | 3 |
| Known vulnerabilities | 0 |
| Install scripts | no |
| Author | James Halliday |
| Maintainers | substack |

## Links

- npm: https://www.npmjs.com/package/markov
- Repository: https://github.com/substack/node-markov
- Issues: https://github.com/substack/node-markov/issues
- npm.io page: https://npm.io/package/markov

## Dependencies (3)

- [deck](https://npm.io/package/deck.md) >=0.0.3
- [lazy](https://npm.io/package/lazy.md) >=1.0.3
- [hashish](https://npm.io/package/hashish.md) >=0.0.2

## Recent versions

- 0.0.7 (latest) — 2013-09-28
- 0.0.6 — 2011-05-04
- 0.0.5 — 2011-05-04
- 0.0.4 — 2011-05-02
- 0.0.3 — 2011-05-02
- 0.0.2 — 2011-05-02
- 0.0.1 — 2011-05-01

## README

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.

---
_Source: https://npm.io/package/markov · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
