NameGen is a web-based name generator. Some people who may find it useful include:
- Fantasy fiction authors can use it to create character names
- Gamers can use it to generate character names
- Business users can use it to find new product names or code names
- System administrators can use it to come up with unique userids or passwords
- Linguists can use it to create words for artificial languages
- The name generator algorithm can be used by game developers to randomly generate character names on-the-fly
Name Generator in Scrivener
Scrivener is word-processing software for authors. One of its features is a robust name generator. The name generator in Scrivener can be accessed from the toolbar: Tools→Writing Tools→Name Generator…
Scrivener’s name generator allows you to generate a first and last name based on gender, origin (African, Hawaiian, Yiddish, etc.), and beginning letter. It will also give you the meanings of names it generates.
The problem with Scrivener’s name generator is that it does not actually “generate” new names. It relies on lists of existing names to randomly select first and last names from. The user merely chooses parameters to filter the names by. This works well for most uses in writing, but sometimes a unique name that does not currently exist in the world is desired. That is where the NameGen name generation method offers something different from what you will find in Scrivener.
A brief primer of name generation methods
There are several methods for generating random names. In general, more control over the type of names you get means less control over how unique the names are.
Random Letters and Lengths
One of the easiest ways to generate random names is to just randomly generate how long the name is and choose random characters. A simple algorithm is shown below:
- Get a random number for length of the name in characters. Most good names are 5-10 characters in length, so a random number from 2 to 15 is a good starting choice.
- For each character position in the name generate a random character. This should be any alphabetic character, though you can also include hyphens, apostrophes, or other non-alphabetic characters.
Example names generated using this method:
As you can see, most names generated using this methods aren’t even pronounceable! The only use I can see for this method is to generate passwords.
Vowel and Consonant Templates
This random name generation method tries to overcome the problem of unpronouceable names by only allowing consonants and vowels to be placed in certain orders. To generate names like this we first come up with some templates that look like the ones below, where c stands for consonant and v stands for vowel
A simple algorithm describing how this works:
- v represents ‘vowel’, c represents ‘consonant’.
- letters in names are replaced by v’s and c’s.
- a random vowel is chosen and placed where the v’s are
- random consonants are chosen and placed where the c’s are
Examples of names generated with this method are shown below:
These names are more pronounceable, but there are still combinations that are awkward or can’t be pronounced comfortably.
Vowel and Consonant Groupings
We know that words only use specific groupings of letters. In the English language, you will never see a word with groupings like edx or qqo. So if we compile a preset list of what groupings can be used, all the words we generate will be pronounceable.
For example, we can allow the following groupings of consonants and vowels and then alternate between consonant groups and vowel groups to make a name:
allowed consonants: c,n,l,sh,s,lf,r,lm,nst
allowed vowels: o,a,e,i
Here are simple directions on how to generate names with this method:
- Names are separated into two groups: vowel and consonant strings.
- v represents a vowel string and c represents a consonant string
- randomize and replace
Here are some examples of names generated using this method (using the allowed groupings in the example above):
All of these are pronounceable, but some of the names are still very awkward.
Random Syllable Selection
The way that NameGen generates names is that it takes a list of “good” names, scrambles their syllables, then rebuilds them. Below is the algorithm:
- Names are separated into syllables
- Each syllable must have at least one vowel
- Each syllable except the last must end with a consonant
- Only the first syllable may start with a consonant
- The names are then sorted by the number of syllables they contain. Names can only be generated using syllables within each length
- A random first syllable is chosen
- A random second syllable is chosen and connected to the preceding
For example, consider the list of seed names below:
First we split them up by their syllables and separate them by how many syllables they have:
- Lann | eth
- Phant | ar
- Thyr | ius
- Mer | ith
- Lansd | al
- Thal | am | ond
- Ul | am | yth
- Thur | ag | ar
Then we randomly select one of the groups, in this case we’re using the 2 syllable group for all of the example names. Randomly choose a first syllable, then connect it with a random second syllable. Below are the results as NameGen produced them:
These names are of the same flavor as the seed names, but different. The more seed names you use, the more unique the names will become.
I created the first prototypes of NameGen back in 1998. The most recent prototype was released in 2000 as NameGen version 1.2. To run the prototype, simply download NameGen 1.2, unzip it, and run the executable file. There is no installation process.
Once the screen above is displayed, click “Open a Name File“. You will be presented with this screen:
Select one of the included .gen files, then click “Generate” to generate a name using the file.
To create or modify a .gen file, simply open the file in a text editor and create a list of names.
The new NameGen
While the prototype NameGen is fully functional, it must be rewritten in a modern format to appeal to modern users. Much has changed in computing in the past 15 years, and a new NameGen must be presented in the form of a web page or a mobile app.
Possible improvements include:
- Include a way to generate one-syllable names
- Support for sur-names and titles
- Support for non-alphabetic characters like hyphens and foreign characters
- Drag-and-drop interface
So what do you think? Would you find a web-based NameGen useful? Would you find a NameGen iPhone or Android app useful? Let me know in the comments.