AutoHotkey Homepage AutoHotkey Community
Let's help each other out
 
 FAQFAQ   SearchSearch   MemberlistMemberlist   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

Random Name Generator
Goto page 1, 2  Next
 
Reply to topic    AutoHotkey Community Forum Index -> Scripts & Functions
View previous topic :: View next topic  
Author Message
Simply Curious



Joined: 24 May 2008
Posts: 15

PostPosted: Mon Aug 11, 2008 2:01 am    Post subject: Random Name Generator Reply with quote

This is a function that will generate a random name. Each letter is chosen based on the previous letter, so that letters are likely to appear in their usual patterns, and (most of the) generated names are pronounceable.

Both a minimum and a maximum length of the name can be specified, though neither needs to be passed to the function.

Code:
;MinLength is the shortest allowed name, defaulting to 4.
;MaxLength is the longest allowed name.  It defaults to 0, indicating no maximum length.

RandomName(MinLength=4, MaxLength=0)
{   

   ;This is a table of probabilities of given letter combinations.
   ;Each list is the probability of any letter coming after the letter that is the variable name.
   ;The 27th value is the probability that the word ends with the current letter.

   A=0.005129|0.020532|0.038276|0.031753|0.005903|0.009913|0.027038|0.014457|0.023527|0.003511|0.021702|0.086397|0.045315|0.192551|0.002685|0.014491|0.001136|0.142056|0.059445|0.043698|0.041322|0.018312|0.010774|0.001824|0.020584|0.010240|0.107428
   B=0.184518|0.021072|0.000500|0.002564|0.243982|0.000125|0.000188|0.002564|0.076033|0.001313|0.001563|0.055274|0.000875|0.002376|0.132933|0.000063|0.000000|0.133683|0.009192|0.000313|0.090977|0.000188|0.000125|0.000000|0.022447|0.000313|0.016820
   C=0.131713|0.001253|0.042204|0.003536|0.053348|0.001566|0.008727|0.275689|0.051557|0.000090|0.154493|0.028375|0.003849|0.004117|0.123255|0.001343|0.002954|0.036744|0.002506|0.003043|0.028419|0.000806|0.001343|0.000000|0.004699|0.017678|0.016694
   D=0.103809|0.005881|0.001079|0.024765|0.256609|0.003345|0.017266|0.006367|0.102029|0.000701|0.002968|0.027085|0.008849|0.007985|0.107424|0.000432|0.000432|0.046833|0.019208|0.017427|0.044783|0.001619|0.007068|0.000000|0.020557|0.005288|0.160192
   E=0.031341|0.012931|0.019802|0.020976|0.022773|0.007726|0.014163|0.010930|0.034414|0.002392|0.012409|0.104894|0.023455|0.108561|0.004291|0.007973|0.000464|0.239084|0.062957|0.042633|0.006958|0.011727|0.010582|0.001363|0.039371|0.008379|0.137452
   F=0.111275|0.000369|0.000985|0.000246|0.170236|0.139463|0.000985|0.000985|0.112752|0.000492|0.003570|0.058961|0.004677|0.004677|0.114476|0.000246|0.000123|0.100197|0.011324|0.021295|0.041113|0.000369|0.000246|0.000000|0.003570|0.000862|0.096504
   G=0.140257|0.004596|0.000919|0.003493|0.199694|0.002145|0.030944|0.064951|0.064767|0.000551|0.000919|0.053922|0.006311|0.020282|0.084191|0.000551|0.000368|0.083027|0.019179|0.012316|0.063725|0.000797|0.004718|0.000245|0.003309|0.000123|0.133701
   H=0.214954|0.004703|0.001599|0.001035|0.189466|0.002116|0.000564|0.002069|0.102610|0.000658|0.003621|0.037903|0.020973|0.022384|0.124759|0.000329|0.000000|0.032683|0.006207|0.021067|0.054221|0.000517|0.009358|0.000000|0.009828|0.000141|0.136233
   I=0.044717|0.012847|0.076362|0.026840|0.088736|0.009884|0.035604|0.003560|0.000896|0.001320|0.015511|0.082586|0.027886|0.216811|0.031571|0.012474|0.001270|0.031247|0.081889|0.054502|0.004158|0.011802|0.001494|0.002938|0.001245|0.009262|0.112588
   J=0.333844|0.000510|0.012251|0.006126|0.211843|0.000000|0.001021|0.003063|0.059214|0.001021|0.010720|0.002552|0.003063|0.009188|0.197550|0.000000|0.000000|0.000000|0.002552|0.007657|0.110260|0.000000|0.001021|0.000000|0.000510|0.001531|0.024502
   K=0.105301|0.002453|0.000239|0.000658|0.194089|0.001615|0.000120|0.013522|0.166507|0.000838|0.003889|0.046787|0.009633|0.017470|0.101412|0.000299|0.000060|0.036078|0.023932|0.001137|0.039069|0.000897|0.004786|0.000239|0.025009|0.000179|0.203781
   L=0.142144|0.012700|0.007785|0.033484|0.190748|0.007136|0.004641|0.004666|0.115222|0.000499|0.010554|0.157140|0.017815|0.003019|0.079568|0.004042|0.000549|0.002146|0.023429|0.022031|0.025599|0.007884|0.002770|0.000075|0.015320|0.004292|0.104743
   M=0.313971|0.039109|0.071357|0.001102|0.144316|0.001552|0.001502|0.001252|0.093991|0.000300|0.003756|0.007561|0.032849|0.001753|0.110366|0.030796|0.000451|0.004507|0.016475|0.000701|0.039509|0.000150|0.001052|0.000000|0.007161|0.000801|0.073660
   N=0.061413|0.016703|0.021091|0.069684|0.122481|0.004871|0.078736|0.008455|0.062562|0.000942|0.020976|0.004802|0.002481|0.042114|0.058036|0.001011|0.000712|0.003538|0.053877|0.050017|0.007168|0.001746|0.003331|0.000000|0.007099|0.011970|0.284182
   O=0.008524|0.017299|0.028237|0.027181|0.024717|0.015061|0.013377|0.013477|0.008725|0.002338|0.011843|0.083101|0.033291|0.169068|0.030248|0.016394|0.000654|0.114958|0.060421|0.038018|0.047975|0.020140|0.041337|0.002791|0.010611|0.008725|0.151492
   P=0.176699|0.000875|0.001459|0.000972|0.201984|0.015365|0.000292|0.038802|0.113099|0.000097|0.010503|0.051055|0.002334|0.003209|0.103958|0.076145|0.000000|0.074492|0.021103|0.010114|0.033064|0.000194|0.000875|0.000000|0.007002|0.000097|0.056209
   Q=0.006831|0.001366|0.000000|0.001366|0.000000|0.000000|0.000000|0.000000|0.005464|0.000000|0.000000|0.000000|0.000000|0.000000|0.000000|0.000000|0.000000|0.001366|0.000000|0.000000|0.968579|0.001366|0.000000|0.000000|0.000000|0.000000|0.013661
   R=0.107889|0.012734|0.012774|0.039466|0.114066|0.005515|0.027955|0.005334|0.100509|0.000762|0.014499|0.017507|0.018449|0.029038|0.095937|0.004171|0.001043|0.037882|0.037180|0.049252|0.031785|0.005475|0.003068|0.000160|0.020154|0.005715|0.201681
   S=0.063337|0.009701|0.073814|0.002910|0.097763|0.001774|0.001525|0.060925|0.050808|0.000554|0.061286|0.020318|0.015134|0.008482|0.067384|0.021426|0.002328|0.001663|0.053885|0.132300|0.016797|0.001247|0.011808|0.000000|0.003964|0.007429|0.211437
   T=0.091587|0.001630|0.012519|0.000347|0.159384|0.001595|0.001769|0.072652|0.074005|0.001283|0.006208|0.018484|0.009294|0.007352|0.110522|0.000555|0.000069|0.065543|0.026564|0.109169|0.024691|0.000763|0.005098|0.000000|0.013525|0.036447|0.148946
   U=0.021849|0.032911|0.052449|0.040176|0.074243|0.017281|0.047056|0.012163|0.041827|0.002862|0.015190|0.084205|0.058118|0.084810|0.006219|0.021354|0.001101|0.136984|0.111833|0.065658|0.000881|0.005449|0.002367|0.008806|0.007320|0.013979|0.032911
   V=0.281558|0.000162|0.000647|0.001293|0.327461|0.000162|0.000323|0.000162|0.251657|0.000485|0.001616|0.010991|0.000162|0.003071|0.078390|0.000000|0.000000|0.012769|0.007435|0.000323|0.004687|0.000162|0.000323|0.000000|0.007112|0.000485|0.008566
   W=0.204323|0.006032|0.003770|0.009801|0.191380|0.000880|0.001131|0.037824|0.200804|0.000000|0.005278|0.018472|0.003644|0.016210|0.092109|0.000377|0.000126|0.013948|0.074265|0.004398|0.007665|0.000628|0.000628|0.000000|0.015582|0.000628|0.090098
   X=0.063694|0.022293|0.004777|0.001592|0.081210|0.012739|0.000000|0.011146|0.065287|0.000000|0.001592|0.039809|0.014331|0.014331|0.044586|0.001592|0.000000|0.004777|0.033439|0.078025|0.007962|0.000000|0.014331|0.003185|0.004777|0.001592|0.472930
   Y=0.061443|0.012165|0.011753|0.016289|0.072062|0.003505|0.004845|0.004845|0.003505|0.000206|0.016907|0.026495|0.018763|0.042268|0.032680|0.003711|0.000206|0.014330|0.026186|0.011856|0.008763|0.001443|0.004021|0.000206|0.000412|0.002887|0.598247
   Z=0.165246|0.006787|0.005366|0.004261|0.174085|0.000947|0.004261|0.003946|0.121370|0.000000|0.014205|0.018466|0.017045|0.009154|0.066761|0.000789|0.001578|0.001578|0.004104|0.000631|0.035827|0.000631|0.008996|0.000000|0.034722|0.058396|0.240846
   Start=0.037129|0.091544|0.068008|0.055260|0.020789|0.036464|0.052670|0.058435|0.006802|0.012894|0.051228|0.053638|0.085992|0.020597|0.016318|0.052275|0.002725|0.047647|0.109494|0.038852|0.004460|0.023480|0.036127|0.000180|0.006261|0.010732
   

   ;This allows numerical values to easily be converted to letters.
   Alphabet = ABCDEFGHIJKLMNOPQRSTUVWXYZ
   
   Loop
   {
      ;Checks for the previous letter to determine which set of probabilities to use.
      If (!Word)
         Previous = Start
      Else
         Previous := SubStr(Word, 0, 1)


      ;Randomly chooses the next letter, based on the probabilities listed above.
      Random, rand, 0.0, 1.0
      Sum = 0
      Next =
      Loop, parse, %Previous%, |
      {
         Sum += A_LoopField
         If (rand<Sum)
         {
            Next := SubStr(Alphabet, A_Index, 1)
            Break
         }
      }


      ;Finishes the word if the word randomly ends or reaches the maximum length.
      If ((!Next AND StrLen(Word)>=MinLength) OR (MaxLength AND StrLen(Word)=MaxLength))
         Break
   
      Word .= Next
   }
   
   StringLower, Word, Word, T
   Return, Word
}


The probabilities are based on 88,000 last names from the 1990 census.
Back to top
View user's profile Send private message
Krogdor



Joined: 18 Apr 2008
Posts: 1390
Location: The Interwebs

PostPosted: Mon Aug 11, 2008 2:18 am    Post subject: Reply with quote

Hehe. I think I will use this next time I have to write something with a made-up name in it... I'm usually very unoriginal.

Cool stuff Very Happy
Back to top
View user's profile Send private message AIM Address
Jex



Joined: 01 Aug 2008
Posts: 101

PostPosted: Mon Aug 11, 2008 2:52 am    Post subject: Reply with quote

i wrote 2 random name generators...well they're more of random letter generators...

one pick random letters for the whole name, and the other does vowel, consonant, repeat.

Razz have to have lots of names output to find a few good ones.
_________________
Woot.

Please read forum etiquette
Back to top
View user's profile Send private message
Red Hat Dude
Guest





PostPosted: Mon Aug 11, 2008 5:21 am    Post subject: Reply with quote

Pretty cool. It certainly gives...interesting results. Laughing

Uh, if you're slow like me, or you've never used a function before, like me, add this to the bottom of the code:
Code:
Msgbox % "New name is " RandomName(4,0)


This was somewhere around the eighth result: Nichweterimayanshahtodekaicavirargskaneraulacketha

Laughing
Back to top
Simply Curious



Joined: 24 May 2008
Posts: 15

PostPosted: Mon Aug 11, 2008 6:23 am    Post subject: Reply with quote

Red Hat Dude wrote:
This was somewhere around the eighth result: Nichweterimayanshahtodekaicavirargskaneraulacketha


I had it generate 100,000 names, and the longest that it made was Babothailngalanohaflelyseierlsertrailghewaeyarrdiseletcrtatseadesoquran, so I think that names that long should be rare. (I hope.)

That being said, I might try having it check the previous two letters instead of just the previous one. That would decrease the amount of insanely long names and make the names be more readable in general, provided that I have/can find enough data to crunch to generate the probabilities.
Back to top
View user's profile Send private message
Hezzu



Joined: 08 Aug 2008
Posts: 117
Location: Raahe, Finland

PostPosted: Mon Aug 11, 2008 4:16 pm    Post subject: Reply with quote

Put me in to room with a computer running this script and a sandwich

I will be there HOURS

serioysly how fun can a "simple" script as this be? Laughing
_________________
Hezzu - excuse the english!
Back to top
View user's profile Send private message Send e-mail Visit poster's website
Simply Curious



Joined: 24 May 2008
Posts: 15

PostPosted: Mon Aug 11, 2008 7:11 pm    Post subject: Reply with quote

Here is a modified version of the script that looks at the previous two letters when choosing the next letter, instead of just the previous letter. This allows it to create words that more closely resemble normal words. However, the extra probabilities listed require significantly more space than the first version.

The syntax of the function has not been changed between the versions.
Back to top
View user's profile Send private message
Simply Curious



Joined: 24 May 2008
Posts: 15

PostPosted: Wed Aug 13, 2008 10:45 pm    Post subject: Reply with quote

I modified the function again. It now has an optional parameter that specifies the beginning of the word.

For example, RandomName(4, 15, "Ad") would return a random name with length between 4 and 15 letters that starts with "Ad".
Back to top
View user's profile Send private message
Jetfirehack



Joined: 29 Aug 2009
Posts: 3

PostPosted: Sun Aug 30, 2009 5:12 am    Post subject: Reply with quote

Great script, could you show a way to send the generated value by use of the Send function?

Edit: Nvm, I've got it. Great script Smile
Back to top
View user's profile Send private message
Petru



Joined: 17 Dec 2007
Posts: 235
Location: Galati, Romania

PostPosted: Sun Aug 30, 2009 7:03 am    Post subject: Reply with quote

Nice script. Reminds me of my Random Word Generating Module...
Back to top
View user's profile Send private message Yahoo Messenger
SoLong&Thx4AllTheFish



Joined: 27 May 2007
Posts: 4999

PostPosted: Sun Aug 30, 2009 7:58 am    Post subject: Reply with quote

I missed this first time around, vote++ for the fun factor. Amazingly entertaining Very Happy
_________________
AHK Wiki FAQ
TF : Text files & strings lib, TF Forum
Back to top
View user's profile Send private message
MasterFocus



Joined: 08 Apr 2009
Posts: 3035
Location: Rio de Janeiro - RJ - Brasil

PostPosted: Sun Aug 30, 2009 8:39 am    Post subject: Reply with quote

Pretty nice!
The algorithm reminds me of this: www.autohotkey.com/forum/viewtopic.php?t=47586
_________________
"Read the manual. Read it again. Search the forum.
Try something before asking. Show what you've tried.
"

Antonio França
My stuff: Google Profile
Back to top
View user's profile Send private message Visit poster's website
Keavon



Joined: 04 Oct 2009
Posts: 22

PostPosted: Sat Oct 10, 2009 12:59 am    Post subject: Very Nice! Reply with quote

Nice Script!
But how do I make it so it will type the name into... lets say notepad, the push return and type the next one?

Thanks! Very Happy
Back to top
View user's profile Send private message
temp01



Joined: 09 Jul 2009
Posts: 120

PostPosted: Sat Oct 10, 2009 7:02 am    Post subject: Re: Very Nice! Reply with quote

Keavon wrote:
Nice Script!
But how do I make it so it will type the name into... lets say notepad, the push return and type the next one?


Erm, use a Loop and Send:
Code:
Loop, 10
   SendInput, % RandomName() . "{Enter}"

Or you could build the names list first then send it in one go:
Code:
Loop, 10
   Names .= RandomName() . "{Enter}"
SendInput, %Names%
Back to top
View user's profile Send private message
Keavon



Joined: 04 Oct 2009
Posts: 22

PostPosted: Sat Oct 10, 2009 3:06 pm    Post subject: Thanks! Reply with quote

Very Happy Very Happy Very Happy Thanks! Very Happy Very Happy Very Happy
Back to top
View user's profile Send private message
Display posts from previous:   
Reply to topic    AutoHotkey Community Forum Index -> Scripts & Functions All times are GMT
Goto page 1, 2  Next
Page 1 of 2

 
Jump to:  
You can post new topics in this forum
You can reply to topics in this forum


Powered by phpBB © 2001, 2005 phpBB Group