Version 3 of Name generator toy

Updated 2005-09-12 12:45:11

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)


Category Toys | Arts and crafts of Tcl-Tk programming