· 808 words · 4 minute read

Computer Poetry • 'My tea sounds like a brick'

Inspired by the great people at Botnik, I decided to create my own poems with code, as a synergy between man and machine. My algorithm (see below) tries to generate grammatically correct sentences that rhyme with eachother. I then combined these sentence-pairings with others to create poems out of them.

The result is a poem-book, filled with metaphors about the allegorically figurative parables of analogies 🤣

The Long Girl with the Sad Squash Rackets #

Many answers neatly echo some girls… And the long girl in those helpful teams of quicksands sadly guarantees whorls

A troubled flesh bleakly afforded a picture, But some squash racquets severely frowned a prefecture

An early crayon of the dead bucket in a shiny plant Fervently committed bad vans!

The Linen From Polouse #

Fresh men in drugs limply characterised a couple linens… While the man partially couples the linens (note: that's lazy rhyming!)

A loud patch of a breakable crib longingly trembled a hair… If a loud wear on the patches partially hares a hare!

A day in a trick sweetly invents the agreeable polouse!!

Of Whispering Stoves #

The lucky woods in a rifle solidly presumed a pail, But pales knottily unveiled a lucky veil.

A mailbox in a few whispering stoves in some alive thrones knavishly protests the apple - For those in as obediently grappled a chapel.

An ill stove in the noisy maid frantically shone a twig, For a few fake twigs in sweaters angrily qualify a murmuring zig.

The wild hydrant in those robust boys interestingly armed the defeated language And some storages bravely voyaged a sacrilege.

As the pocket wonderfully elects the tent. For an unspent a in the pocket urgently pockets the ten stent.

Jerking the usual honey #

Rats questioningly flooded those shops. While both splendid territorial dominions in the average twig willfully enlarged a couple tops sops.

The winter abnormally concentrated a clean honey But the fluid clean and jerks usually honey a difficult zucchini

A drum of a pencil of light kittens nicely rounded kites, So those flavors swiftly anticipated a couple light sights

The Violent Lettuce with delicious elbows #

A lettuce violently connected a kite. If incomes tomorrow supplemented the tonight there's a deep meaning in here somewhere

A witty tent in delicious elbows urgently faded screeching rain, So the strain on witty rain upliftingly trained a faded strain

A couple gleaming maids frantically cast the basketball, And the carpenters sometimes snowballed a spitball

The helpless toad enormously shook the adorable popcorn, While a ball searchingly shoehorns the kind shoehorn

Some random musings #

The algorithm created more interesting musings, which didn’t fit into the poems:

  • A gun in hats coolly resisted delightful beetles
  • The moms abnormally dislike the gentle plantations
  • Those brothers weakly interfere quiet fogs
  • Many cute celeries judgementally part the treatments
  • Those battles on a desk promptly murder a couple damaged oceans

The algorithm #

The algorithm is short. The algorithm consistently finds Jesus. The algorithm is written in javascript and needs Wordnet and Nonsensical.

const Nonsensical = require("nonsensical");
const nonsensical = new Nonsensical();
const Wordnet = require("wordnetjs");
const wn= new Wordnet();
var rhyme = require("rhymes");

global.window = {
	fetch: (path) => {
		return new Promise(function (resolve, reject) {
			require("fs").readFile(path, "utf8", function (err, data) {
				if (err) {
				} else {
						json: () => JSON.parse(data)
const data_file_paths = {
	noun: './data/noun.json',
	adverb: './data/adverb.json',
	adjective: './data/adjective.json',
	verb: './data/verb.json',
wn.load(data_file_paths, function () {

nonsensical.load(data_file_paths, function () {
  let s = nonsensical.generateSentence();
  let words = s.split(" ");
  let nouns = []
  let verbs = []
  let adjectives = []
  let lastWord = words[words.length - 1].replace(".", "")
  let rw = rhyme.rhymes(lastWord)
  rw.forEach(function(rhymer) { words[words.length] = rhymer.word;})
  // remove last 's' from word, so it is no longer plural...
  words[words.length] = lastWord.substr(0, lastWord.length - 1)


	let w_class = ""
    try {
	w = w.replace(".", "")
	w_class = wn.pos(w)
	// remove last letter, see if it makes a plural into non-plural so wordnet can find it...
	 let w2 = w.substr(0,w.length-1)
	 w_class = wn.pos(w2)

	w_class.forEach(function(wc){ // it's possible to be verv, noun adjective (or all of these!)

    if(wc.trim() === "Noun")
    if(wc.trim() === "Adjective")
    if(wc.trim() === "Verb")
    } catch (e) {console.log(e.message)}

  let rhyming = false;
  let ns = "";
  while (rhyming === false)
    ns = nonsensical.generateSentence({wordSuggestions: {nouns: nouns, adjectives: adjectives, verbs: verbs}, useSuggestionRelatedWordChance: 1/2,
		maxSemanticStepsRemovedFromSuggestions: 3});
    let ns_words = ns.split(" ")
    last_word = ns_words[ns_words.length - 1].replace(".", "")

    rw.forEach(function(wrd) {
      // check if the last word is not the same and rhymes
      if(last_word.trim() === wrd["word"].trim() && last_word.trim() != lastWord)
        rhyming = true
  let glue = ["And", "While", "But", "So", "If", "For", "When"]
  var item = glue[Math.floor(Math.random()*glue.length)];
  console.log(item + " " + ns.toLowerCase())

I hope one day Morgan Freeman will recite the poems