Version 14 of Name generator toy

Updated 2009-02-07 17:29:25 by gold

More or less a useless toy i did while i needed some character names for a novel or a roleplaying game. Michael Schlenker


 #
 # Simple Toy Name Generator
 # 
 # This is more or less a useless toy.
 # It generates random names using the transition probabilites
 # calculated from real world names.
 #
 # Most names generated are strange, as it doesn't know any rules
 # for name building. only using a simple statistical process.
 #
 # Michael Schlenker <schlenk at physnet.uni-oldenburg.de
 # 11/Feb/2003

 # using the ne/eq operators, so 8.4 is required

 package require Tcl 8.4
 package require Tk

 # list of valid characters
 set chars [list " " a b c d e f g h i j k l m n o p q r s t u v w x y z]

 # matrix used
 # this is created from the US Census data for female firstnames from 1990
 # http://www.census.gov/genealogy/names/
 # 
 # The first line is the transition from the space character 
 # to any other character (it does not happen, so all fields are zero.
 # The next 26 lines list threshold rand() must fall below to select that character.
 # It is calculated from the summed up character transition frequencies.
 # 

 set M {
 {0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0}
 {0.423197492163 0.423438630335 0.432119604533 0.450204967446 0.468772606704 0.476730166385 0.477694719074 0.484928864239 0.49385097661 0.512900892211 0.514106583072 0.520858451893 0.578008198698 0.604051121293 0.763202314926 0.764890282132 0.766578249337 0.768507354714 0.888835302628 0.912707981673 0.944779358572 0.963588136002 0.972751386544 0.979503255365 0.980467808054 0.997347480106 1.0}
 {0.00611620795107 0.0948012232416 0.152905198777 0.152905198777 0.155963302752 0.544342507645 0.544342507645 0.544342507645 0.547400611621 0.65749235474 0.65749235474 0.65749235474 0.688073394495 0.688073394495 0.688073394495 0.737003058104 0.737003058104 0.737003058104 0.932721712538 0.932721712538 0.932721712538 0.954128440367 0.954128440367 0.954128440367 0.954128440367 1.0 1.0}
 {0.00557880055788 0.232914923291 0.232914923291 0.23709902371 0.23709902371 0.400278940028 0.400278940028 0.400278940028 0.60529986053 0.744769874477 0.744769874477 0.786610878661 0.836820083682 0.836820083682 0.836820083682 0.92189679219 0.92189679219 0.941422594142 0.970711297071 0.970711297071 0.976290097629 0.979079497908 0.979079497908 0.979079497908 0.979079497908 1.0 1.0}
 {0.0419235511714 0.388409371147 0.388409371147 0.388409371147 0.395807644883 0.615289765721 0.615289765721 0.621454993835 0.621454993835 0.759556103576 0.759556103576 0.759556103576 0.760789149199 0.760789149199 0.764488286067 0.844636251541 0.844636251541 0.844636251541 0.937114673243 0.944512946979 0.944512946979 0.951911220715 0.951911220715 0.958076448829 0.958076448829 1.0 1.0}
 {0.307715133531 0.343620178042 0.352818991098 0.360534124629 0.378338278932 0.414243323442 0.418694362018 0.425222551929 0.425519287834 0.440059347181 0.440949554896 0.444510385757 0.60296735905 0.618397626113 0.732047477745 0.747181008902 0.752818991098 0.753115727003 0.845697329377 0.883976261128 0.954599406528 0.959347181009 0.972997032641 0.975074183976 0.977744807122 0.999109792285 1.0}
 {0.0 0.225352112676 0.225352112676 0.225352112676 0.225352112676 0.387323943662 0.471830985915 0.471830985915 0.471830985915 0.577464788732 0.577464788732 0.577464788732 0.704225352113 0.704225352113 0.704225352113 0.711267605634 0.711267605634 0.711267605634 0.964788732394 0.964788732394 0.971830985915 0.992957746479 0.992957746479 0.992957746479 0.992957746479 1.0 1.0}
 {0.106936416185 0.268786127168 0.268786127168 0.268786127168 0.28323699422 0.578034682081 0.578034682081 0.589595375723 0.621387283237 0.760115606936 0.760115606936 0.760115606936 0.812138728324 0.815028901734 0.838150289017 0.864161849711 0.864161849711 0.864161849711 0.933526011561 0.933526011561 0.933526011561 0.976878612717 0.976878612717 0.994219653179 0.994219653179 1.0 1.0}
 {0.0979899497487 0.505025125628 0.505025125628 0.505025125628 0.505025125628 0.733668341709 0.733668341709 0.733668341709 0.733668341709 0.834170854271 0.834170854271 0.834170854271 0.853015075377 0.853015075377 0.868090452261 0.914572864322 0.914572864322 0.914572864322 0.951005025126 0.952261306533 0.957286432161 0.976130653266 0.976130653266 0.977386934673 0.977386934673 1.0 1.0}
 {0.0774468085106 0.211914893617 0.215744680851 0.268936170213 0.299574468085 0.461276595745 0.466808510638 0.476595744681 0.476595744681 0.476595744681 0.477446808511 0.501276595745 0.577872340426 0.593617021277 0.766808510638 0.78 0.781276595745 0.784680851064 0.813191489362 0.92085106383 0.976170212766 0.977872340426 0.988510638298 0.988510638298 0.989787234043 0.990638297872 1.0}
 {0.0 0.344051446945 0.344051446945 0.344051446945 0.344051446945 0.578778135048 0.578778135048 0.578778135048 0.578778135048 0.604501607717 0.604501607717 0.604501607717 0.604501607717 0.604501607717 0.604501607717 0.861736334405 0.861736334405 0.861736334405 0.861736334405 0.861736334405 0.861736334405 1.0 1.0 1.0 1.0 1.0 1.0}
 {0.0271604938272 0.40987654321 0.40987654321 0.40987654321 0.40987654321 0.577777777778 0.577777777778 0.577777777778 0.582716049383 0.77037037037 0.77037037037 0.78024691358 0.787654320988 0.787654320988 0.787654320988 0.898765432099 0.898765432099 0.901234567901 0.962962962963 0.962962962963 0.962962962963 0.965432098765 0.965432098765 0.965432098765 0.965432098765 1.0 1.0}
 {0.0735721200387 0.261858664085 0.268635043562 0.270087124879 0.293320425944 0.493707647628 0.496611810261 0.497579864472 0.498547918683 0.680542110358 0.680542110358 0.681994191675 0.805905130687 0.816553727009 0.818489835431 0.886737657309 0.888673765731 0.888673765731 0.889641819942 0.896902226525 0.900290416263 0.920619554695 0.931752178122 0.932236205227 0.932236205227 0.999515972894 1.0}
 {0.021935483871 0.468387096774 0.490322580645 0.491612903226 0.491612903226 0.65935483871 0.65935483871 0.66064516129 0.66064516129 0.870967741935 0.870967741935 0.870967741935 0.870967741935 0.903225806452 0.904516129032 0.952258064516 0.96 0.96 0.961290322581 0.961290322581 0.961290322581 0.967741935484 0.967741935484 0.967741935484 0.967741935484 1.0 1.0}
 {0.164377682403 0.364806866953 0.364806866953 0.384120171674 0.469957081545 0.657081545064 0.657510729614 0.68669527897 0.689270386266 0.802575107296 0.806008583691 0.807725321888 0.807725321888 0.808583690987 0.918454935622 0.942060085837 0.942060085837 0.942489270386 0.944206008584 0.949356223176 0.971244635193 0.974678111588 0.974678111588 0.975107296137 0.975107296137 0.997854077253 1.0}
 {0.0709939148073 0.0831643002028 0.106490872211 0.118661257606 0.141987829615 0.159229208925 0.163286004057 0.166328600406 0.180527383367 0.197768762677 0.197768762677 0.209939148073 0.322515212982 0.365111561866 0.59939148073 0.605476673428 0.613590263692 0.613590263692 0.831643002028 0.907707910751 0.931034482759 0.954361054767 0.967545638945 0.970588235294 0.977687626775 0.991886409736 1.0}
 {0.0 0.312925170068 0.312925170068 0.319727891156 0.319727891156 0.503401360544 0.503401360544 0.503401360544 0.741496598639 0.836734693878 0.836734693878 0.836734693878 0.857142857143 0.857142857143 0.857142857143 0.897959183673 0.904761904762 0.904761904762 0.979591836735 0.979591836735 0.993197278912 1.0 1.0 1.0 1.0 1.0 1.0}
 {0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0232558139535 0.0232558139535 0.0232558139535 0.0232558139535 0.0232558139535 0.0232558139535 0.0232558139535 0.0232558139535 0.0232558139535 0.0232558139535 0.0232558139535 0.0232558139535 1.0 1.0 1.0 1.0 1.0 1.0}
 {0.026770775237 0.187395426659 0.191857222532 0.205242610151 0.222532069158 0.350808700502 0.350808700502 0.380925822644 0.385387618516 0.63580591188 0.636921360848 0.639152258784 0.707752370329 0.729503625209 0.75683212493 0.834913552705 0.835471277189 0.837702175125 0.880089235917 0.889570552147 0.922476296709 0.938650306748 0.941996653653 0.941996653653 0.942554378137 1.0 1.0}
 {0.0765724703737 0.236098450319 0.237010027347 0.248860528715 0.248860528715 0.350045578851 0.350045578851 0.350045578851 0.606198723792 0.690063810392 0.690063810392 0.69097538742 0.700091157703 0.704649042844 0.704649042844 0.735642661805 0.740200546946 0.740200546946 0.740200546946 0.813126709207 0.939835916135 0.980856882407 0.981768459435 0.981768459435 0.981768459435 1.0 1.0}
 {0.0369761709121 0.294165981923 0.294165981923 0.295809367297 0.295809367297 0.446179129006 0.446179129006 0.446179129006 0.578471651602 0.695973705834 0.695973705834 0.695973705834 0.705834018077 0.705834018077 0.714050944947 0.76417419885 0.76417419885 0.76417419885 0.815940838127 0.821692686935 0.963845521775 0.97041906327 0.97041906327 0.974527526705 0.974527526705 0.997534921939 1.0}
 {0.0401891252955 0.0945626477541 0.111111111111 0.151300236407 0.231678486998 0.340425531915 0.347517730496 0.368794326241 0.368794326241 0.427895981087 0.427895981087 0.456264775414 0.58865248227 0.60756501182 0.721040189125 0.730496453901 0.737588652482 0.737588652482 0.855791962175 0.936170212766 0.959810874704 0.959810874704 0.964539007092 0.964539007092 0.964539007092 0.973995271868 1.0}
 {0.00381679389313 0.251908396947 0.251908396947 0.251908396947 0.251908396947 0.591603053435 0.591603053435 0.591603053435 0.591603053435 0.900763358779 0.900763358779 0.904580152672 0.904580152672 0.904580152672 0.904580152672 0.992366412214 0.992366412214 0.992366412214 0.996183206107 0.996183206107 0.996183206107 0.996183206107 0.996183206107 0.996183206107 0.996183206107 1.0 1.0}
 {0.04 0.31 0.31 0.31 0.31 0.46 0.46 0.46 0.48 0.75 0.75 0.75 0.75 0.75 0.92 0.93 0.93 0.93 0.94 0.94 0.94 0.94 0.94 0.94 0.94 1.0 1.0}
 {0.103448275862 0.413793103448 0.413793103448 0.413793103448 0.413793103448 0.448275862069 0.448275862069 0.448275862069 0.448275862069 0.862068965517 0.862068965517 0.862068965517 0.862068965517 0.862068965517 0.862068965517 0.896551724138 0.896551724138 0.896551724138 0.896551724138 0.896551724138 0.931034482759 0.965517241379 0.965517241379 0.965517241379 0.965517241379 1.0 1.0}
 {0.439592430859 0.509461426492 0.518195050946 0.534206695779 0.544395924309 0.598253275109 0.598253275109 0.598253275109 0.598253275109 0.604075691412 0.606986899563 0.606986899563 0.688500727802 0.700145560408 0.880640465793 0.908296943231 0.908296943231 0.908296943231 0.933042212518 0.966521106259 0.972343522562 0.994177583697 1.0 1.0 1.0 1.0 1.0}
 {0.0957446808511 0.31914893617 0.340425531915 0.340425531915 0.340425531915 0.563829787234 0.563829787234 0.563829787234 0.563829787234 0.702127659574 0.702127659574 0.702127659574 0.712765957447 0.734042553191 0.734042553191 0.840425531915 0.840425531915 0.840425531915 0.840425531915 0.840425531915 0.840425531915 0.914893617021 0.914893617021 0.914893617021 0.914893617021 0.946808510638 1.0}
 }

 # Very simple GUI
 #

 proc names_gui {} {
        wm title . "Random Name Generator"
        entry .out -textvariable ::output -font {helvetica 20 bold}
        button .do -command create_names -text "Create Random Name"
        pack .out
        pack .do
 }

 # Create next letter for name
 #

 proc names_next_letter {letter} {

    # get the character index
    set i [lsearch $::chars $letter]

    # get a random number
    set rand [expr {rand()}]

    # get the line in the matrix     
    set line [lindex $::M $i]
    set result ""

    # find random next character
    set idx 0
    foreach item $line {
        if {$rand < $item} {
            set result [lindex $::chars $idx]
            break
        }
        incr idx
    }

    return $result
 }

 # Start name creation 
 #

 proc create_names {} {
    # select random starting character
    set name [lindex $::chars [expr 1+int(([llength $::chars]-1)*rand())]]

    # allow no single character names, always add at least one char
    while {[set letter [names_next_letter $name]] eq " "} { }
    append name $letter

    # add chars until we hit space
    while {$letter ne " "} {
        set letter [names_next_letter $letter]
        append name $letter
    }

    # move first character to uppercase
    set ::output [string totitle $name]
 }

 # fire up the gui 
 names_gui

CJL - While the majority of names do appear reasonably sensible (and often suitably Tolkien-esque), there are a fair number of unpronouncables cropping up, e.g. Nandrllssherillina, Rta, Drgla, and finally the truly horrendous Vegudderruganinnnenalyncoriticon! (has anybody had worse?) (still, a good name is never more than a couple of clicks away)

schlenk - Entirly correct. One could improve the system by using smarter (and larger) transition tables (based on multiple characters instead of just the last character), or by creating names via syllables instead of characters. So if something horrible crops up, it could be the name of something truly alien. ;-) - RS: In Czechia or Croatia, names like Brno and Krk are perfectly alright, as seen on maps :)

JAG - In answer to CJL's question of "has anybody had worse?", here's my entry... Karyuneerocanendoverawielileicorauleyneneshadilyattocasurinaindore - of course, to get that jewel, I ran the generator proc 100,000 times in a row and kept the longest name. Actually, the name is not that bad... In fact, I predict that in the next few years, it'll rank quite high on the list of "in" names... ;^)

Larry Smith In RPG's such names would be used for Magicians living in worlds* where knowing the True Name of something grants great power over the named object.

*Lars H: Couldn't help adding to Larry's remark the footnote that the most common example of such a world is (unsurprisingly) a scripting language interpreter. interp hide, anyone? ;-) - To RS, the above example looks just like another Welsh train station, e.g. Llanfairpwllgwyngyllgogerychwyrndrobwllllantysiiliogogogoch :-)



http://img21.imageshack.us/img21/6262/tclwikinamegeneratorrr0.png


Category Toys | Arts and crafts of Tcl-Tk programming