Skip to main content

Easy Markov chain text generator.

Project description

Markovchatter

Easy Markov chain text generator. (CLI / Web API)

Developed on: emptypage / markovchatter — Bitbucket

Table of contents

Install

pip install markovchatter

This installs The markovchatter Python module and the markovchatter command line program. You can run the program like both

$ python3 -m markovchatter ...

and

$ markovchatter ...

Usage

Use as a command

usage: markovchatter.py run [-h] [-d] [-l] [-m MAX_CHARS] [-t TRIES] file [file ...]

positional arguments:
  file                  text file(s) to learn

options:
  -h, --help            show this help message and exit
  -d, --no-divider      join words without spaces
  -l, --new-line        files are in new-line text format
  -m MAX_CHARS, --max-chars MAX_CHARS
                        Maximum number of characters [0]
  -t TRIES, --tries TRIES
                        Maximum times to make a sentence [10]

Example:

$ markovchatter run source.txt
Enim ut sem nulla pharetra diam sit amet risus nullam eget felis eget nunc scelerisque viverra.

(Of course, the output text is depends on your source.)

Run as a Web API server

usage: markovchatter.py server [-h] [-l] [-d] [-p PORT] file [file ...]

positional arguments:
  file                  text file(s) to learn

options:
  -h, --help            show this help message and exit
  -l, --new-line        files are in new-line text format
  -d, --no-divider      join words without spaces
  -p PORT, --port PORT  listen port number [8080]

Start the server:

$ markovchatter server source.txt
 * Serving Flask app 'markovchatter'
 * Debug mode: off
WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead.
 * Running on all addresses (0.0.0.0)
 * Running on http://127.0.0.1:8080
 * Running on http://...:8080
 Press CTRL+C to quit

And send GET request to http://hostname:port/text in another terminal:

$ curl http://localhost:8080/text
Cursus sit amet consectetur adipiscing elit ut aliquam purus sit amet nisl suscipit adipiscing bibendum est.

(The response text is depends on your source, again.)

Maximum length of characters and count of tries can be controlled by query string like /text?max_charas=140&tries=20.

Options details

Files

The files given to the program is the source text file, which contain sentences it uses as the model. They are normally well-punctuationed text which terminates its sentence with a dot ('.').

If your source text is not suitable for the style; e.g. languages doesn't use dots for its period, you can use new-line format text file with --new-line option. See option details bellow.

-d, --no-divider

The markovify library suppose languages that separate words with spaces, and its output is in the same way too. This is annoying when the language doesn't use spaces for its word divider. When the option is set, markovchatter joins words without spaces; which is more suitable for languages like Japanese.

-l, --new-line

If this option is set, given files are treated as new-line formatted text; which has each sentence on a newline. This is suitable for languages that doesn't use dot (".") for its sentence period.

The feature comes from a library implementation:

Markovify works best with large, well-punctuated texts. If your text does not use .s to delineate sentences, put each sentence on a newline, and use the markovify.NewlineText class instead of markovify.Text class.

jsvine/markovify: A simple, extensible Markov chain generator.

When the option is set, marcovchatter uses markovify.NewlineText class instead of markovify.Text as described above.

-m MAX_CHARS, --max-chars MAX_CHARS

Available in run sub-cpmmand.

Tries making a sentence of no more than MAX_CHARS characters. If it is specified to 0, Its length is not limited. The default is 0.

-t TRIES, --tries TRIES

Available in run sub-cpmmand.

Maximum count of tries to generate a valid sentense. If it can not be done in specified trials, it returns empty string.

Docker image

The image containing Linux that the library is already installed is also availabe on Docker Hub.

$ docker run --rm -v $(pwd)/text:/etc/markovchatter emptypage/markovchatter run /etc/markovchatter/dict.txt
Vel fringilla est ullamcorper eget nulla facilisi cras fermentum odio eu feugiat pretium nibh ipsum consequat.

Notice that the image doesn't contain any source text file so you have to explicitly mount it and specify its path as an argument.

License

MIT. See LICENSE.

Thanks

This program uses markovify by Jeremy Singer-Vine and Flask by Armin Ronacher. Thank you for these libraries and its developers.

Changes

1.1.0

  • Add control ways for maximum character length and count of tries.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

markovchatter-1.1.tar.gz (5.7 kB view details)

Uploaded Source

Built Distribution

markovchatter-1.1-py3-none-any.whl (6.1 kB view details)

Uploaded Python 3

File details

Details for the file markovchatter-1.1.tar.gz.

File metadata

  • Download URL: markovchatter-1.1.tar.gz
  • Upload date:
  • Size: 5.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.1 CPython/3.10.6

File hashes

Hashes for markovchatter-1.1.tar.gz
Algorithm Hash digest
SHA256 5a24a07499ed05a4f78e530ab9082782eed7849afb4e4b42e9dd13b975af69f5
MD5 b738433dd96d92bf030046a3c5ccfea7
BLAKE2b-256 4347e89f55b0cce5e3d035f9f907ee2bcc3156d6305cb62fffdef975979dcdb0

See more details on using hashes here.

File details

Details for the file markovchatter-1.1-py3-none-any.whl.

File metadata

  • Download URL: markovchatter-1.1-py3-none-any.whl
  • Upload date:
  • Size: 6.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.1 CPython/3.10.6

File hashes

Hashes for markovchatter-1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 c3595798477a8e55870a783ed78b528d897f3a0411520c42d2d1da7bc8d788da
MD5 9c6eda913e2da55192db35728aa8dbb2
BLAKE2b-256 0b5228185237f6c879e39bc002aadf7fc467b1b045c08eb04b3c54d805d482fb

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page