Markov Name Generator

Create some weird sounding names, using rules established by not so weird sounding names.

launch button

You've heard of Markov Chains right? No? Good, I can just just make the rest of this up than. Rather than go into a lot of mathematical detail I'll just explain it in the simplest terms possible.

The theory is that you have a system that can move from one state to one of a number of similar possible states. Which states we can go to are limited by the current state, and each has a probability which also depends on the current state.

What does that have to do with anything?

I'm going to use this to generate random names. To do this I start with a single letter. This is the current state. It will be followed by another random letter, however it can't just be any letter. It must be one that normally follows the first letter. For example, in the English language "Q" is normally followed by "U". Not always, but the chances are very high. Other letters such as "C" have different letter which normally follow them, such as "H".

Did I just pull those rules from thin air?

Actually, no I did not. What's more important is that I don't need to write an algorithm to implement these rules. All I need to do is examine a large list of peoples' names and look at the patterns contained within. This is as simple as recording how frequently each possible pairing of letters occurs within all of the names. The end result is a set of rules (or chains) that can be used to generate names that follow the same patterns.

Ok then, let's have at this name generator!

Click the link at the top of this page. The application is implemented using Java Web Start, so you'll get a few security warnings. Essentially it means that the application isn't digitally signed, so does not have permission to do much by default.

Once it has started up you can just click the Generate button. The field next to it lets you decide how many names to generate. There are a few other parameters you can adjust:

Words
The maximum number of "words" in each name. A value of "3" will give you a first, middle and last name.
Soft Limit
Sometimes the individual names get really long. If the full name reaches this length, it will finish the current word regardless of the number of words requested.
Hard Limit
Once the full name gets to this length it will terminate. No ifs, no buts, no coconuts.

You also have the option of loading your own rules from a text file. Almost any file type will do, but it's best to use something that has a lot of words in it. It doesn't matter if they are separated by spaces, new lines or other separators. I did originally have a version that allowed some of the parameters that affected learning to be adjusted, but this had to be removed in the Java Web Start version. I'll bring it back some time.

That's all there is to it. Feel free to use the generated names for any purpose you see fit. You can also find some of the source code for it here.