Computer Poetry β€’ 'My tea sounds like a brick'

Β· 808 words Β· 4 minute read

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) {
					reject(err);
				} else {
					resolve({
						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();
  console.log(s)
  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)

  words.forEach(function(w){

	let w_class = ""
    try {
	w = w.replace(".", "")
	w_class = wn.pos(w)
	if(!w_class)
	{
	// 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)
	 console.log(w2)
	}

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

    if(wc.trim() === "Noun")
	{
	nouns[nouns.length]=w
	}
    if(wc.trim() === "Adjective")
	{
	adjectives[adjectives.length]=w
	}
    if(wc.trim() === "Verb")
	{
	verbs[verbs.length]=w
	}
});
    } 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