Web-based Na'vi Name Generator!

Started by Irtaviš Ačankif, January 12, 2012, 01:12:24 AM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

Irtaviš Ačankif

I hacked this up in around 20 minutes:
http://tirea.learnnavi.org/?p=generator
Weighted random name generator that gives full names like Tsotsìsra te Pismä Frakxerorä'ite

IMPORTANT NOTICE ABOUT USAGE - **READ -FIRST- BEFORE USING**
Use the following syntax:
http://tirea.learnnavi.org/?p=generator&a=<a number>&b=<a number>&c=<a number>

The number following a= is the number of syllables for the given name, b is the number of syllables for the family name (following te), and c is the number of syllables for the patronymic/matronymic name.

a=3, b=2, and c=4 usually works best - try generating with this link:
http://tirea.learnnavi.org/?p=generator&a=3&b=2&c=4

Since the entire thing is web-based, there is no platform requirement like Ikran Ahiyìk's tool. However, unlike his, my tool sometimes produces hard to pronounce (though legal) word combinations.

There is no limit for a, b, and c. You can even try url=http://tirea.learnnavi.org/?p=generator&a=10&b=10&c=15!

* broken links updated -- Tirea Aean
Previously Ithisa Kīranem, Uniltìrantokx te Skxawng.

Name from my Sakaš conlang, from Sakasul Ältäbisäl Acarankïp

"First name" is Ačankif, not Eltabiš! In Na'vi, Atsankip.

Irtaviš Ačankif

Previously Ithisa Kīranem, Uniltìrantokx te Skxawng.

Name from my Sakaš conlang, from Sakasul Ältäbisäl Acarankïp

"First name" is Ačankif, not Eltabiš! In Na'vi, Atsankip.

Tirea Aean

#2
needs reasonable syllable limit governor. (in the code; I saw your suggestion in your post but as seen in 90k+2, you generated an unnaturally large name.)

other than that, good job avoiding illegal consonant clusters and illegal syllables. :D

EDIT: just did on my phone, and the word gets generated and displayed, but there is an encoding failure on the special characters ì and ä. did you put a meta tag declaring utf8 page?

<meta http-equiv="content-type" content="text/html; charset=utf-8" />

Irtaviš Ačankif

Putting no limit is simply just for fun. Using small values for a, b, and c would work well. Sometimes you just want a über-long name of a clan leader just for it to sound super pompous.

In addition, a new feature has been added - the k=NUMBER argument. Add &k=NUMBER (replace with your number) and you will get a whole bunch of names. For example:
http://alusoft.tk/nngen/generate.php?a=2&b=3&c=2&k=5000

I just added the META tag. Sorry for the encoding problems!
Previously Ithisa Kīranem, Uniltìrantokx te Skxawng.

Name from my Sakaš conlang, from Sakasul Ältäbisäl Acarankïp

"First name" is Ačankif, not Eltabiš! In Na'vi, Atsankip.

Tirea Aean


'Oma Tirea

Kosman lu.  Only a couple of issues now:

What about names with pseudovowels ('LL and 'RR)?  Keep in mind that pseudovowels cannot end with a consonant.
What about the double W and double Y from the diphthongs?  They shouldn't occur.
Finally, keep in mind the gender of the user, and maybe add an additional parameter for 'itan, 'ite, or both.

All of this shouldn't be too hard to code in :)

[img]http://swokaikran.skxawng.lu/sigbar/nwotd.php?p=2b[/img]

ÌTXTSTXRR!!

Srake serar le'Ìnglìsìa lì'fyayä aylì'ut?  Nari si älofoniru rutxe!!

Ikran Ahiyìk

#6
Oh no my things are keeping on compared by you ::)

I would like to make one web-based too.. since I have the formula, it would be easy if I have the way to make it... (but surely you know I don't have it)

I see you've done something there but still thinking the probability of creating syllable cluster is too high.. How about names starting with a vowel? I can't find any..

And I think you should tell us the generator won't let you pick a first name with one syllable, it's forced to be two, or it's a bug? Since you sounds to promote the variety of number of syllables. ;)


Quote from: 'Oma Tirea on January 12, 2012, 11:51:43 PM
Kosman lu.  Only a couple of issues now:

What about names with pseudovowels ('LL and 'RR)?  Keep in mind that pseudovowels cannot end with a consonant.
What about the double W and double Y from the diphthongs?  They shouldn't occur.
Finally, keep in mind the gender of the user, and maybe add an additional parameter for 'itan, 'ite, or both.

All of this shouldn't be too hard to code in :)



.. and n + p -> mp




Since you've included the sex, there maybe more constrains..
Plltxe nìhiyìk na ikran... oe fmeri sìltsan nì'ul slivu, ngaytxoa...


See the new version with fingerings!
Avatar credits to O-l-i-v-i.

Tirea Aean


Kamean

Tse'a ngal ke'ut a krr fra'uti kame.


Irtaviš Ačankif

@Ikran Ahiyìk

I followed exactly the probabilities in your thread at first, but I found that your stated algorithm was EXTREMELY fond of consonant clusters (spìktspxang?) especially between words, where three consonants could end up jammed each other. I ended up deciding that syllables except the last one in a word shouldn't have codas (though they can) and vastly lowered the probability for getting consonant clusters. If I lower it even more it will sound like Japanese (CVCVCVCV) pattern and not good.

By the way, when I implement sanity checking (like double letter removal and np->mp) I will make vowel starting a syllable possible. Now the problem is if I allow vowels to start syllables then I end up with many double letters (aa, oo, ii, even iaaaaaa).

Is there an algorithm you use to avoid triple and quadruple letters? Since for example if you delete double letters on aaaaaaaa you get aaaa. You of course can iterate it over and over, but how should you know when to end?
Previously Ithisa Kīranem, Uniltìrantokx te Skxawng.

Name from my Sakaš conlang, from Sakasul Ältäbisäl Acarankïp

"First name" is Ačankif, not Eltabiš! In Na'vi, Atsankip.

Irtaviš Ačankif

Quote from: Tirea Aean on January 13, 2012, 01:40:27 PM
n+p does not always -> mp.
My code doesn't produce np nor mp due to algorithmic constraints. You can try doing a Ctrl+F for "np" match case in:
http://alusoft.tk/nngen/generate.php?a=20&b=5&c=7&k=5000
which produces super long names and 5000 of them. There are no np or mp generated
Previously Ithisa Kīranem, Uniltìrantokx te Skxawng.

Name from my Sakaš conlang, from Sakasul Ältäbisäl Acarankïp

"First name" is Ačankif, not Eltabiš! In Na'vi, Atsankip.

Ningey

Quote from: Uniltìrantokx te Skxawng on January 13, 2012, 06:53:42 PM
Is there an algorithm you use to avoid triple and quadruple letters? Since for example if you delete double letters on aaaaaaaa you get aaaa. You of course can iterate it over and over, but how should you know when to end?

The point would be to do the checks on word creation, not after you are done. In this case you have three options on how to deal with an offending syllable (i. e. the new syllable starts with the exact same vowel the preceding one ended with):
1. Recreate the offending syllable
2. Dismiss the vowel of the new syllable and append the remaining consonant to the preceding one, then generate anew
3. Prepend a consonant (cluster)
No matter which option you choose, you easily break up multiple vowels of the same type.

I have a name generator myself (although still an early, quite crude version that still requires some tinkering), but it includes all these sanity checks (triple consonants, multiple sìftang, and even pseudovowel collisions). To make things easier, I made this a six-stage process:
1. Come up with a vowel (can also be a diphthong or a pseudovowel)
2. Attempt to get an onset consonant (cluster), which is mandatory for pseudovowels, and check for collisions (i. e. r and l cannot come up with rr or ll respectively). If necessary, get a new one
3. Attempt to get a coda consonant (not valid with a pseudovowel)
4. Check for vowel collisions - if the vowels are the same, discard and generate anew (alternatively put a consonant (cluster) in front of the vowel in the new syllable)
5. Check for pseudovowel collisions (i. e. an r or an l would come after rr or ll respectively) - if it collides, discard and generate anew
6. tìftang sanity check - if a coda ' in the preceding and an onset ' in the new syllable collide, discard the one in the new syllable and (optionally) get another consonant (cluster)
Maybe other sanity checks need to be applied, but after you have run these six steps, you should be fine. You may append the new syllable to what you already got without having to fear for illegal names.

This should spare you a lot of headaches.


"Sawtute ke tsun nivume - fo ke kerame!"
-- Neytiri te Tskaha Mo'at'ite

"There are two things that are infinite: Human stupidity and the universe. However, I'm not yet sure about the universe."
-- Albert Einstein

"He who gives up freedom for security deserves neither and loses both."
-- Benjamin Franklin

Ikran Ahiyìk

#12
I recall what I've done: I just simply create one more boolean marker for checking if there's error. If the program have found any kind of error, then a new name will be drawn again, but not only dropping the part with error.

But there's one more rule which I have but not so suitable for yours, I will pick the length first, then pick the name until it's perfect in word building and also the length. So you see why mine is a bit slow.

Quote from: Uniltìrantokx te Skxawng on January 13, 2012, 06:53:42 PM
@Ikran Ahiyìk

I followed exactly the probabilities in your thread at first, but I found that your stated algorithm was EXTREMELY fond of consonant clusters (spìktspxang?) especially between words, where three consonants could end up jammed each other. I ended up deciding that syllables except the last one in a word shouldn't have codas (though they can) and vastly lowered the probability for getting consonant clusters. If I lower it even more it will sound like Japanese (CVCVCVCV) pattern and not good.

By the way, when I implement sanity checking (like double letter removal and np->mp) I will make vowel starting a syllable possible. Now the problem is if I allow vowels to start syllables then I end up with many double letters (aa, oo, ii, even iaaaaaa).

Is there an algorithm you use to avoid triple and quadruple letters? Since for example if you delete double letters on aaaaaaaa you get aaaa. You of course can iterate it over and over, but how should you know when to end?
So by picking the length first a lot of strange names will be avoided, but still.. you missed that the sample rule there's just for case when the name have only one syllable, yours don't even have it (this is reasonable since I've heard somewhere Frommer said names should be in 2 syllables usually, and the only known single-syllable name's from the games, whose Na'vi makes you very disappointed ;D) So blow this away.

For longer names they are really sounds Japanese.. give a higher probability to drop the content of syllable-final positions.. Recall Neytiri and Eytukan, but Tsu'tey is more special, and similar for those later provided names with 2 syllables. So the probability is different for 2-syllable names

I've got distinct sets of rules for different number of syllables, and also each order of them.. like

Ci1 V1 Cf1 Ci2 V2 Cf2 Ci3 V3 Cf3 .. and so on.

(I guess you must have these positions also, otherwise names can't be generated)

Some rules can be easily applied, simply check the relation of Cf(n) and Ci(n+1).. if V(n) is ll or rr than drop Cf(n).. Ningey has came up these so I don't repeat.. But pay attention that Ci1 and Ci2 may be using different rules, details are up to you since this is your generator.. :)


Sex: see male names seldom using what letters in certain positions, also for female..



Edit
Quote from: Uniltìrantokx te Skxawng on January 13, 2012, 07:02:05 PM
Quote from: Tirea Aean on January 13, 2012, 01:40:27 PM
n+p does not always -> mp.
My code doesn't produce np nor mp due to algorithmic constraints. You can try doing a Ctrl+F for "np" match case in:
http://alusoft.tk/nngen/generate.php?a=20&b=5&c=7&k=5000
which produces super long names and 5000 of them. There are no np or mp generated
Missed this. I would like to ask, pelun fìkem sivi? ???
Plltxe nìhiyìk na ikran... oe fmeri sìltsan nì'ul slivu, ngaytxoa...


See the new version with fingerings!
Avatar credits to O-l-i-v-i.

Irtaviš Ačankif

However, the way my code is written, when the program generates the vowel, it doesn't know what initial consonant it just generated and doesn't care about the , and when the program writes a new syllable, it has long forgotten about the last syllable. The only way would be to wait until everything is generated and then have the program read in its own output (since it has already forgotten about it) and then do text replacements and such.
Previously Ithisa Kīranem, Uniltìrantokx te Skxawng.

Name from my Sakaš conlang, from Sakasul Ältäbisäl Acarankïp

"First name" is Ačankif, not Eltabiš! In Na'vi, Atsankip.

Irtaviš Ačankif

BTW I think that no 1 syllable name is a bug. Try this:
http://alusoft.tk/nngen/generate.php?a=1&b=1&c=1&k=200

All except the first name is one syllable long.
Previously Ithisa Kīranem, Uniltìrantokx te Skxawng.

Name from my Sakaš conlang, from Sakasul Ältäbisäl Acarankïp

"First name" is Ačankif, not Eltabiš! In Na'vi, Atsankip.

Irtaviš Ačankif

Quote from: Ikran Ahiyìk on January 13, 2012, 09:30:58 PM
Missed this. I would like to ask, pelun fìkem sivi? ???
Well, that is to show you that "np" or "mp" never gets generated. You can find no occurence of np and mp in the generated names.
Previously Ithisa Kīranem, Uniltìrantokx te Skxawng.

Name from my Sakaš conlang, from Sakasul Ältäbisäl Acarankïp

"First name" is Ačankif, not Eltabiš! In Na'vi, Atsankip.

Ningey

Quote from: Uniltìrantokx te Skxawng on January 13, 2012, 09:45:56 PM
However, the way my code is written, when the program generates the vowel, it doesn't know what initial consonant it just generated and doesn't care about the , and when the program writes a new syllable, it has long forgotten about the last syllable. The only way would be to wait until everything is generated and then have the program read in its own output (since it has already forgotten about it) and then do text replacements and such.

Looks like you immediately output what you just generated, right?
When I generate the name, my script does all the necessary work first (it stores the whole thing in a variable) by adding syllables as the run-length indicates (currently hard-coded within the script with some random factor, but I could easily transform that into a CGI query). Since I have everything still available I can perform any sanity checks (note to myself: Add a n + p to mp conversion), and once the process is complete, the result is output as a whole (in the final stage of the script).

Since I use Perl, I don't have to care of variable sizes, etc. since they can become arbitrarily big.


"Sawtute ke tsun nivume - fo ke kerame!"
-- Neytiri te Tskaha Mo'at'ite

"There are two things that are infinite: Human stupidity and the universe. However, I'm not yet sure about the universe."
-- Albert Einstein

"He who gives up freedom for security deserves neither and loses both."
-- Benjamin Franklin

Ikran Ahiyìk

Quote from: Uniltìrantokx te Skxawng on January 13, 2012, 09:45:56 PM
However, the way my code is written, when the program generates the vowel, it doesn't know what initial consonant it just generated and doesn't care about the , and when the program writes a new syllable, it has long forgotten about the last syllable. The only way would be to wait until everything is generated and then have the program read in its own output (since it has already forgotten about it) and then do text replacements and such.
If it is featured in free syllable number, the current one would be the more possible way.. but then it's difficult for you to control the general shape.

Quote from: Uniltìrantokx te Skxawng on January 13, 2012, 09:47:16 PM
BTW I think that no 1 syllable name is a bug. Try this:
http://alusoft.tk/nngen/generate.php?a=1&b=1&c=1&k=200

All except the first name is one syllable long.
Try this.. http://alusoft.tk/nngen/generate.php?a=1&b=1&c=1 &k=200

Quote from: Uniltìrantokx te Skxawng on January 13, 2012, 09:48:44 PM
Quote from: Ikran Ahiyìk on January 13, 2012, 09:30:58 PM
Missed this. I would like to ask, pelun fìkem sivi? ???
Well, that is to show you that "np" or "mp" never gets generated. You can find no occurence of np and mp in the generated names.
But I think it's possible for names including these.. I wonder why you remove it..

Quote from: Ningey on January 13, 2012, 10:01:34 PM
Quote from: Uniltìrantokx te Skxawng on January 13, 2012, 09:45:56 PM
However, the way my code is written, when the program generates the vowel, it doesn't know what initial consonant it just generated and doesn't care about the , and when the program writes a new syllable, it has long forgotten about the last syllable. The only way would be to wait until everything is generated and then have the program read in its own output (since it has already forgotten about it) and then do text replacements and such.

Looks like you immediately output what you just generated, right?
When I generate the name, my script does all the necessary work first (it stores the whole thing in a variable) by adding syllables as the run-length indicates (currently hard-coded within the script with some random factor, but I could easily transform that into a CGI query). Since I have everything still available I can perform any sanity checks (note to myself: Add a n + p to mp conversion), and once the process is complete, the result is output as a whole (in the final stage of the script).

Since I use Perl, I don't have to care of variable sizes, etc. since they can become arbitrarily big.
If it's not, it cannot generate 5000 names so fast.. :)
Plltxe nìhiyìk na ikran... oe fmeri sìltsan nì'ul slivu, ngaytxoa...


See the new version with fingerings!
Avatar credits to O-l-i-v-i.

Irtaviš Ačankif

My program is designed in a way that there will never be any two consonants aside each other except for the consonant clusters (syllable boundary clusters don't exist). Or else the names become hard to pronounce.

There is a debug version with such clusters allowed, just replace "generate.php" with "generatey.php"
http://alusoft.tk/nngen/generatey.php?a=3&b=2&c=2&k=200

but it produces np and doesn't convert to mp and many other weirdo things, so much that I dropped that feature.
Previously Ithisa Kīranem, Uniltìrantokx te Skxawng.

Name from my Sakaš conlang, from Sakasul Ältäbisäl Acarankïp

"First name" is Ačankif, not Eltabiš! In Na'vi, Atsankip.

Ikran Ahiyìk

QuoteFra'uzo te Sofkut Stey'a'ite
;D



OK got it.. you drop it because the way can't make corrections to previously generated part.
Plltxe nìhiyìk na ikran... oe fmeri sìltsan nì'ul slivu, ngaytxoa...


See the new version with fingerings!
Avatar credits to O-l-i-v-i.