DEV Community

Rafi
Rafi

Posted on

8 3

Poem generation in JS

I recently came across this awesome site https://kingjamesprogramming.tumblr.com
It generates posts based on the King James Bible, Structure and Interpretation of Computer Programs, and some of Eric S. Raymond's writings.

I wanted to build something similar in JS. So I took Shakespeare sonnets and created this array

https://github.com/Rafi993/poem-generator/blob/master/poems.js

const poems = [
  [
    'From',
    'fairest',
    'creatures',
    'we',
    'desire',
    'increase',
    ',',
    'That',
    'thereby',
    "beauty's",
    'rose...
 ];

I looped through this array and for each word in the array I noted down the subsequent words that comes after. I did this for all sonnets and created an object and wrote this object to a JSON file

https://github.com/Rafi993/poem-generator/blob/master/public/ngrams.json

{ "From": 
   ["fairest", "his", "sullen", "limits", "hands",
    "whence", "where", "me", "this", "thy",
    "hence", "thee", "you", "heaven"
   ],
   "fairest: [...]
   ...
}

And now to generate poem in the UI.

  1. I fetched the JSON picked and then picked random key (this is staring word for the poem)
  2. For that word pick value (value is an array) from JSON
  3. Pick one word from that array of words randomly
  4. Now repeat from step 2 for this word

We can keep doing this till we either reach no further path or till we have number of words we need. And there you have it your own poem generator. Here is link to demo https://rafi993.github.io/poem-generator/ and here is the link to the repo https://github.com/Rafi993/poem-generator

The best part is you can use it for any text to generate essays, svgs...

Even though we just implemented things like ngram and markov chain in the above code I did not explain it in detail to keep it simple. Here are resources for those who are interested in it.

https://youtu.be/v4kL0OHuxXs
http://setosa.io/ev/markov-chains/
https://youtu.be/eGFJ8vugIWA

Sentry blog image

How I fixed 20 seconds of lag for every user in just 20 minutes.

Our AI agent was running 10-20 seconds slower than it should, impacting both our own developers and our early adopters. See how I used Sentry Profiling to fix it in record time.

Read more

Top comments (0)

Billboard image

The Next Generation Developer Platform

Coherence is the first Platform-as-a-Service you can control. Unlike "black-box" platforms that are opinionated about the infra you can deploy, Coherence is powered by CNC, the open-source IaC framework, which offers limitless customization.

Learn more