SG Forum Bot

A Twitter Bot which procedurally generates satirical letters to the editor

SG Forum Bot is a twitter bot that procedurally generates parody Straits Times Forum letter titles, using the vocabulary of existing letters.

This twitter bot was lovingly created by Teo Kai Xiang, Stormaggedon (pseudonym used for anonymity) and Flamageddon (no relation to Stormaggedon). If you’re curious about our vocabulary or want to play with it yourself, you can find it on Github or via cheapbotsdonequick.

If you ever wanted to make your own satirical twitter bot, below’s a silly guide by us, a trio of incredibly code-dumb folk. If we can do it, so can you!

TL;DR: the short version: cheapbotsdonequick provides a quick overview of how you can create and launch your own twitter bot in literally five minutes or less, and does not require experience with coding. Highly recommend.

Here's the long version

Our starting point: We set out to create a forum bot that could create parodies of ST forum letters. We didn't want this parody to be completely unrecognisable, and wanted it to generate content with that all-too-familiar tone (between nanny state advocate and kopitiam academic) used by the writers of ST's letters.

Using Cheapbotsdonequick / Tracery, our twitter bot generates sentences using a structure like "#noun# #verb# #noun#", so we needed to find nouns, verbs and everything in between to feed our baby bot:

Step 1: Assembling a Vocabulary

We compiled a list of letter titles from the period of 27 November 2019 to 28 May 2020, resulting in 918 letter titles as our source.

From the 918 letter titles, we extracted words and categorised them under groups such as verbs, nouns and connectors over Google Sheets.

Our favourite words from the bunch include:

  • Joseph Schooling’s Physique

  • The Empress of Asia Wreck

  • Jobs that Singaporeans can’t handle

  • Multi-pronged approach

With our vocabulary assembled, we now needed to bring some structure to our chaos.

Step 2: Structuring Sentences

We came up with a few potential sentences we could have the bot generate, before figuring out what word groups might constitute this sentence. For example, if we wanted to have the bot generate something like forum: focus on Joseph Schooling's physique to fight workplace bias, we would need…

  • a sentence start (something like a call to action) - focus on

  • a noun (this can vary between abstract concepts, things and people) - Joseph Schooling’s physique

  • a sentence conclusion (perhaps a problem) - to fight workplace bias

From this, we created Word Groups to organise our extensive vocabulary. Some examples: noun_people / noun_object / sentence_start / verb_present.

Collaboratively filtering 6039 total words into these groups on Google Sheets was by far the most time-consuming process. This was the part where we really wished we weren’t as code-dumb as we were.

Through the magic of Excel, we combined this accumulated text from Google Sheets into the Tracery code we would feed (copy-paste) into cheapbotsdonequick. Thank you Concatenate function!

Step 3: Testing and Reworking

Our first attempts at the bot produced some hilarious results in line with what we were hoping for, but only less than 5 out of 10 times.

The other half were tweets that made no grammatical or logical sense, and we soon realised the flaws of not having...

  • separated the word groups into singular / plural forms

  • standardised better our understandings of what words these groups should consist of

Once that was done (cue yet another time-consuming process), we started laying down our final touches: testing the bot's output and creating…

  • a list of lemons (sentences containing errors which we needed to correct)

  • and a list of suggested vocabulary (words from ST Forum we wanted to include but were outside the November to May period from which we compiled our initial vocabulary from).

After this, we started fine-tuning until we reached our goal of at least 8 out of 10 tweets making some semblance of sense. Put that together, and *chef's kiss*— wala!

SG Forum Bot is born: