Markovian Parallax Generate: On digital writing and poetics

The Programs – Info and Screenshots

This page describes and showcases the digital writing programs which I have used in my own writing over the past few years. You can obtain them yourself by following the instructions in the howto pages linked on the right of this blog. Along with the screenshots you will find some notes on my own use of the programs in my writing processes.

Gnoetry 0.2


From the Beard of Bees Gnoetry page:

Gnoetry is an on-going experiment in human/computer collaborative poetry composition.

Gnoetry synthesizes language randomly based on its analysis of existing texts. Any machine-readable text or texts, in any language, can serve as the basis of the Gnoetic process. Gnoetry generates sentences that mimic the local statistical properties of the source texts. This language is filtered subject to additional constraints (syllable counts, rhyming, etc.) to produce a poem.


A key aspect of the Gnoetry software is the ability of a human operator to intervene in the language generation cycle, helping to “guide” the artistic process and to produce a result that is a true collaboration of equals.


Here are some screenshots of me setting up a Gnoetry session.

1. Choose the base form for your gnoem.

1. Choose the base form for your gnoem.

I’m having some fun with blank verse on my current project, but it is not nearly as flexible as the syllabic form.

2. Select the source texts that you want Gnoetry to "analyse."

2. Select the source texts that you want Gnoetry to "analyse."

I’ve added a lot of sources to Gnoetry’s library for the various projects. I’ll post a howto soon explaining how to add any text to Gnoetry. It’s pretty simple.

3. Set the weight (by %) that each source will have in the output.

3. Set the weight (by %) that each source will have in the output.

The weighting process becomes very significant if you plan on writing a poem in sections during different sessions. It is very difficult to achieve the same combination of weightings, but this also means that each session can be quite different even if the same texts are chosen.

4. Collaborate with Gnoetry. Enjoy!

4. Collaborate with Gnoetry. Enjoy!

Note the highlighted text in yellow. The user collaborates with the machine by selecting portions of the text (as much as you like) and then hitting the Regenerate button at the top to pull other options out of Gnoetry’s statistical analysis database. There are also Undo, Redo, and Deselect buttons. It is my practice to only select single contiguous blocks of text when I regenerate, but you don’t have to.

When you save, keep in mind that Gnoetry 0.2 does not allow you to reopen the gnoem in the program for re-editing. Therefore, you have to finish each gnoem in a single session. Another constraint that makes the Gnoetic process unique.

Mchain 0.3

[Description still under revision]:

Below is an e-mail response I wrote the other day that attempts to explain the mchain program to a new user. I’m reprinting it here until I run it by the programmer and correct any inaccuracies.

Hi ________,

I’m glad you’re enjoying the program. My brother wrote it (I’m an English major too), so I don’t know everything about how it works, but I know in general what the variables all mean and how the program works. It may help you to read the following page, “Generating Text”: <;.

First, what the program does with your source text – Paradise Lost in your case – is to break it apart into little bits, a set number of words, called keys. The keylength is the length you specify for how many words each bit will be. The program then creates a database of every distinct word in the text linked to a list of every key that begins with that word. Finally the program starts to chain these together, first selecting a random key, say “there in the,” and second searching the database for all keys that begin with the last word in the previous key – “the” in this case – and randomly choosing one of those keys, say “the lady is.” The first two “links” in this chain, then, would result in “there in the lady is.” Note: the words in each key followed each other in the original text. This is how the output can be semi-grammatical, and also how a Markov chain of Paradise Lost with a keylength of 3 or higher will retain much more of the style and feel of the original text than a lower keylength.

Got that? It’s a little confusing, and I may be a little off, but that’s the general idea.

Now, the commands:

The -v option simply spits out some text about the program and any error messages that might not normally appear. It’s useless for any other purpose, so you can ignore it.

The -r option is what makes version 0.3 so much better than the original two versions of the python script. If you set a keylength of 3, it will randomly choose a key of length 1-3 for every new chain. This basically varies the level of randomness in the markov chain at each point in the chain, 3 being less random/cut-up and 0 being basically grabbing words out of a hat one at a time.

The -k option tells the program what keylength you want, which determines how long each key in the database is, and thus how cut-up the text is.

The -n option tells the program how many words (approximately) you want in the output chain.

So, to translate an mchain command into plain English, I’ll use a simple example:

escovel@escovel-laptop:~/mchain/sources$ mchain -k 3 -n 9 moby10b.txt

of room for two to kick about in that

The command tells mchain to cut Moby Dick into pieces of 3 and chain it together into a length of approximately 9 words (depends on the keylength). If you analyze the output, you can see the seams. “of room for” is joined with “for two to” is joined with “to kick about” is joined to “about in that.”

Now, here’s the same command run with the -r option:

escovel@escovel-laptop:~/mchain/sources$ mchain -r -k 3 -n 9 moby10b.txt

freebooters that they seemed to stagger. Standing behind him

There are still 9 words in the output, but now the seams are less easy to determine, as each “chain” at any point could be 1-3 words in length – thus it is unclear which words followed each other in the orignal text and which came from some other part of the text. Output from -r mchain instances read differently, have a different feel and rhythm, from ordinary Markov chains. I consider it an improvement for my purposes.

I hope I haven’t just confused you more. Just ask me about anything you don’t get, and I’ll try to clarify more. I need to post an explanation similar to this one on the mchain blog, and I’ll get my brother to proofread it to make sure that I’m explaining it correctly.

Enjoy the program, and share it with others who might be interested.




Mchain is not nearly as visually stimulating as Gnoetry, but the screenshots I’ve taken will show you the basics of my writing process.

1. Running a source text(s) through Mchain in the Terminal.

1. Running a source text(s) through Mchain in the Terminal.

After I get to the directory containing your source text(s), I run Mchain twice using the His & Hers source text as input. The first has a randomized keylength of 2, and the second a randomized keylength of 3. I usually use the latter, but it’s fun to mix it up.

After I’ve run the program, I read through the output and copy phrases that grab/amuse/interest me.

2. Collect the output selections in a word processor for later use.

2. Collect the output selections in a word processor for later use.

Once you’ve collected a good deal of selections from the Mchain output, then you can do whatever you like with it. At this point, Mchain is no longer used in the writing process. I usually look through pages of selections until I intuit some constellation of phrases that will begin a poem, and then continue to go back to the selections and to Mchain to get new text to work into the poem.

Another option besides going back to Mchain or using only a file of selections is to generate a very large block of output by running Mchain with, say, -n 10000 several times and pasting them all into a large text file. I call such a file “the pool,” and will then use the Find function of OpenOffice (my preferred word processer) to seek out particular words or phrases in the Mchain output. It crudely reproduces the Regenerate function of Gnoetry in some ways, and can help you add repetition and anaphora to your poem.

3 Responses

Subscribe to comments with RSS.

  1. Ian Hays said, on March 4, 2010 at 7:11 am

    A superb site which has added to my own work on James Joyce’s Finnegans Wake and the Writings of Marcel Duchamp at

    Many thanks for this on-going research and work.



  2. […] More information about Gnoetry including building language models by adding source texts […]

  3. […] the train home from my trip to Orkney and the highlands, I fed the contents of my travel diary into Gnoetry, along with Ian Hamilton Finlay’s Orkney-centric collection of lyric poetry The Dancers […]

Leave a Reply

Fill in your details below or click an icon to log in: Logo

You are commenting using your account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

%d bloggers like this: