Awkwords is a simple online application that randomly generates words from a given pattern. You can use it to make words for a constructed language, to get an original nickname, generate your own style hard-to-guess yet rememberable passwords, just for fun or whatever.
note: Awkwords the word generator has nothing to do with AWKwords the documentation markup language nor with the awk text processing language as such. The matching names are purely coincidental.
The most notable parts of the generator's interface are the parts labeled subpatterns and pattern. The pattern (or "main pattern" - I'll occassionaly use this term to clearly distinguish it from subpatterns) is the essential thing - it defines how the word will be constructed. It is written using a specific syntax.
Besides the main pattern, there are up to 26 subpatterns available, each of them can be named with one capital letter. A subpattern is essentially a pattern that can be inserted in any place in the main pattern or other subpatterns. The content assigned to the subpattern will be used in every place you put its letter.
A usual use for subpatterns when making a pattern to generate words of a constructed language is for different sounds (phonemes) of the language. There are several predefined groups of sounds - V for vowels, C for consonants, and N for nasals - with a few very common sounds filled in, but you can change these assignments to whatever you desire and use any letter for any group of sounds or other fragment that is needed repeatedly in the word. A subpattern can be used also to represent syllable onset, coda and other clusters. Simply make subpatterns you find useful when making the main pattern.
You can use everything the same way in the subpatterns as in the main pattern - slashes, brackets, weighting, escaping. These will be discussed next.
The content of the field named pattern defines how the word will be formed. Lower case (small) letters represent these letters in the word, while capital letters refer to subpatterns. To write the structure, there are these characters:
/ Slashes divide the text into options, from which one is randomly chosen.
tu/top/kan generates either tu, top, or kan
By default, all of them have the same chance of being chosen. This can be changed by giving each option a weight.
[ ] What's inside square brackets is treated as a single unit.
s[tu/top/kan] generates either stu, stop or skan
( ) Round brackets work the same way as square brackets, the only difference is that what's inside them can either appear in the word or not. Both variants are equally probable.
s(tu/top/kan) renders a word that always begins with s and in half of
the cases continues with either of tu, top, or kan - so the possible results are:
s, stu, stop, skan
Brackets can be unlimitedly nested one into another.
at(a(z)) in half of the cases renders only at.
In the other half, the result can be equally probably ata or ataz. atz is impossible
because the block
(z) is inside requires
a to be rendered.
Weight is a number that multiplies the chance of being chosen of the option it applies to. Weight is written after an asterisk in the option it applies to.
This generates a, c, or d each with the same probability. Compared to each of these, the probability of generating b is three times higher and for kek six times higher (that means, kek is twice as probable as b). That's because b has weight 3 and kek has weight 6. Options without specified weight have weight 1. The number used as weight must be an integer between 1 and 128.
Double quotes ("") have a special function: characters enclosed by them are simply put into the word, ignoring the meaning they would otherwise have for the generator. This way anything including capital letters, slashes, brackets, etc. can be generated.
heh"[mY/worD)]" generates literally heh[mY/worD)]
When using a pattern to generate words, you may want to somehow restrict it so that some combinations in certain places are forbidden. This is what filters can do. If a filter is set for some part of the pattern it is always checked whether what generated by that part of the pattern matches the filter. If it does the word is filtered out - it will not appear in the output.
Filters are defined by writing the
^ character right after the fragment of the pattern to be filtered
followed by the content to filter out: [pattern fragment]^filter .
Multiple filters can be set for the same fragment: [pattern fragment]^filter2^filter2^filter3 .
(let V be subpattern [a/i/u])
In this example, the first
[VV] yields any of all the nine combinations - for any of the three letters
for the first V there may appear any of them for the second V. Thus the possibilities are:
aa, ai, au, ia, ii, iu, ua, ui, uu .
For the second [VV], there are three filters applied: these exclude cases when the [VV] yields aa, ii, or uu, i.e. when the letters happen to be the same. Thus, just ai, au, ia, iu, ua, ui are accepted results.
Double quotes can be used inside filters to escape characters. However other syntactic elements (brackets, slashes, weights) and subpattern letters cannot -- any of them ends the filter. This is because each filter is a fixed string, not a randomly generated pattern.
When everything is set up, click the Generate button to generate the words. There are several adjustments:
After the words are generated, some statistics are shown below them. These tell how many words were printed to the output, how many words were filtered out, how much time it took, and how many possible ways the pattern can render. Note that the number of actually different words possible to get with the pattern may be actually lower because of there being more ways to get the same word; also limits imposed by pattern filters are not reflected in this statistic.
By clicking the Save... button you get a file with the current settings of Awkwords. Save this file to your disk. Next time when you need these settings again, click on Open > , select the file and confirm by clicking Open.
Awkwords 1.2 © Petr Mejzlík | e-mail: firstname.lastname@example.org ICQ: 331953665
Everyone is allowed to freely use and distribute this software. It can be incorporated into other software without any limitations. Modifying the software and distributing a modified version is allowed as long as the modified version is clearly marked distinct from the original one. This license is GNU LGPL compatible.
Some graphics that are work of other authors are used in Awkwords. Namely:
|error.png, warning.png||Ray Cheung||Creative Commons Attribution 3.0 License|
Summary of notable changes in Awkwords versions:
The complete source code of Awkwords is available here: awkwords-1.2.zip
Awkwords is written in PHP, it needs a server with PHP hypertext preprocessor installed. To work correctly, Awkwords also requires the magic_quotes_gpc PHP directive to be off or .htaccess must be allowed (the .htaccess file turns magic_quotes_gpc off). With magic_quotes_gpc on and .htaccess not allowed, patterns containing quotes or apostrophes would get corrupted.
iconv module is needed to automatically convert old Awkwords files (which were encoded in cp1250) to utf-8 (which is used in version 1.2 and later). Iconv is included by default on POSIX-compliant systems (Unix, Linux, etc.) but may not be installed on Windows.