I've been thinking about a game, inspired by a book on graph theory I was reading, which would involve piping chocolate milkshake around the board. Rather than thinking about how the game might actually work, I got sidetracked thinking about the town names, which I thought should be quite silly in this candy-cane world. And then I got sidetracked further making a program to generate silly words.
How it works
To start with I started thinking of words, or just noises, that sounded silly: Yerp, Blumpf, Floongle, Mickle-mackle-moo, Wibble, and so on. Then I broke them down into to initial sounds, vowels, and two ending sounds. There is a definite tendency for silly words to include the consonants b, p and f.
Lists of parts
The start sound are: Dr, Dw, L, M, Qu, Thr, Tr, Tw, Scr, Sl, Sm, Sp, Spl, Squ, Wh,Y.
Or: B, F, G, P followed by l, r, w or nothing
My list of vowels was: a, e, i, o, u, ee, oo.
The first list of end sounds was: bb, ck, dd, mf, mp, mpf, ng, nk, pp, rf, rk, rp, zz.
The seconds list of end sounds was: aldo, et, et, le, le, le, o, ok.
You'll notice that some of the sounds in the last list are duplicated. This was just to bias the random picking to pick them and save me doing proper weighted random picking.
Putting the pieces together
To generate a silly word, I just pick a random item from each list and stick them together. For example, taking the first item in each list gives us: Babbaldo - pretty silly right?
I do a bit of processing, so if the last letter of the start sound is the same as the first letter in the ending sound, I remove it from the ending sound. This avoids words like Brirpet, which I found hard to pronounce; Bripet reads better. I also remove duplicate "u"s in the case of starting with Squ.
I did go through all the lists to try to ensure they couldn't generate any rude words that I could think of, though I did allow them to generate silly insults, like Muppet and Whazzok.
Adding more variation
This all works fine but, like many random word generators, it gets boring pretty quickly as your brain notices the patterns and the repetitions. So I added a small number of word patterns which built on the basic words, adding structure and texture. This also meant I could replicate the sing-song nature of lots of silly words I thought of. This approach was inspired by this article on a much more sophisticated program to generate sets of words that feel like they come from the same language.
The first type of word I added I called Yungo Spungo. This is where I repeat the a word but the initial sound is changed (the correct term for this is reduplication - thanks Guy). The second I called Mickle Mackle Moo, where the word is repeated, but the vowel changes. This pattern has its own variation where sometimes a third word is added that uses the same initial, followed by oo.
I also decided to create some shorter words. These have the same initial sounds and vowels, but only a single ending sound, taken from the this list: b, d, f, m, mp, ng, nk, p, rf, rk, rp, x, zz.
These words could also have the Yungo Spungo and Mickle Mackle Moo variations. I also made compound words by combining a short word with a long word (Mod-Squingle and Squingle-Mod), which I think have a pleasing rhythm. Finally, I made an extended versions of the short word by either adding a vowel (e.g. Modo) or by adding a vowel and then repeating the final constant and the vowel (e.g. Modidi).
For the most part, I think the words work pretty well. I think there's enough variation (though you can always add more). I've generated a load of words and not noticed any repetition. The word patterns are quite repetitive, but I think there's enough variation to get surprises. If it were used to generate place names, I think they have a cohesion that makes them feel like they all come from the same world.
Most of the words are pronounceable (Threexeexee?), though maybe too long sometimes. Although they might not all be funny, I think they are generally amusing enough. Some of the words are actual English words, like Bap, Bring, Lob, Lamp, Lick, Lung, Muzzle, Scrum, Wharf, and Flongle, but they are arguably quite silly words.
I would be interested to learn more about what makes a word silly. It seems to involve repetition and certain consonant cluster. I wonder if this is something that transcends languages like the Bouba/Kiki effect.