Starts With

Ends With

Includes

Excludes

Similar To

Matches Regex

Names

How It Works

This page uses Markov chains to procedurally generate original names. Given a set of words as training data, the name generator calculates the probability of a letter appearing after the sequence of letters chosen so far. There are dozens of training presets, and the corpus can be manually edited through the "Settings" dropdown section above.

The generator maintains models that look up to "n" characters back, where "n" is the "Order" option value in the settings section. It starts by checking the highest order model, falling back to lower order models as necessary, using an approach called Katz's back-off model. As you increase the "Order" setting, larger chunks of the training words will appear in the generated output.

The Dirichlet "Prior" setting adds a constant probability that any letter may be picked as the next letter. It acts like an additive smoothing factor, making the generated name content a bit more "random". Keep this parameter small, it can be useful to increase this to get more results.

The generator generates as many names as possible, then filters and sorts the results according to tweakable criteria in the settings section. The "Length" range slider limits how many characters long the words are. The "Start", "End", "Includes", "Excludes" and "Regex" options are used to filter the generated words.

The "Similar To" parameter allows you to sort the generated names by their similarity to the name that you enter. The similarity of the words is determined by the Damerau-Levenshtein distance.

This generator is suitable for generating all sorts of names. Hundreds of preset training datasets are embedded, and you can provide your own word data through the settings section. Presets include funny names, fantasy names, Scottish names, German names, Irish names, names of towns, animal names, theological names, werewolf names etc.

The name generator was written using Haxe. If you have any suggestions, requests or comments then contact me or open an issue.