diff --git a/Default_values/default prob.csv b/Default_values/default prob.csv new file mode 100644 index 0000000..433fe8f --- /dev/null +++ b/Default_values/default prob.csv @@ -0,0 +1,27 @@ +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,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,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,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,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0,0,0,0,0,0,0,0,0,0,9,9,9,9,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,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,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,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 +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,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,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,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,0,0,0,0,0,0,0,0,0,0,0,0,0,0 diff --git a/Default_values/nameprob.csv b/Default_values/nameprob.csv new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/Default_values/nameprob.csv @@ -0,0 +1 @@ + diff --git a/Default_values/names.csv b/Default_values/names.csv new file mode 100644 index 0000000..209901d --- /dev/null +++ b/Default_values/names.csv @@ -0,0 +1,20 @@ +Uldreyin +Narbeth +Alluin +Evindal +Kesefeon +Oncith +Uevareth +Galaeron +Abarat +Elorshin +Estelar +Cailu +Haldir +Vulred +Ivaran +Ailen +Hagre +Nelaeryn +Sythaeryn +Ryfon diff --git a/README b/README new file mode 100644 index 0000000..77bc951 --- /dev/null +++ b/README @@ -0,0 +1,14 @@ +A lightweight python machine-learning script for generating fantasy names + +Installation guide: + +1) Install Python3 with random and csv modules on your computer +2) Download the contents of this repo into any folder on your computer +3) Replace the names in names.csv with the sample names of your choice +4) Empty all contents from nameprob.csv +[OPTIONNAL] 5) Open namegen.py in any text editor and change the value of race_name to your desired race's name (between '') + +Usage guide: + +1) Start a python instance and naviguate to the folder where the files are located +2) Run the script diff --git a/default prob.csv b/default prob.csv new file mode 100644 index 0000000..433fe8f --- /dev/null +++ b/default prob.csv @@ -0,0 +1,27 @@ +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,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,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,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,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0,0,0,0,0,0,0,0,0,0,9,9,9,9,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,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,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,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 +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,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,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,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,0,0,0,0,0,0,0,0,0,0,0,0,0,0 diff --git a/elf.csv b/elf.csv new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/elf.csv @@ -0,0 +1 @@ + diff --git a/namegen.py b/namegen.py new file mode 100644 index 0000000..f104fe4 --- /dev/null +++ b/namegen.py @@ -0,0 +1,186 @@ +import csv +from random import * +global letter_count +letter_count = 0 +race_name = 'elf' + +class letter(): + # Each letter has a lowercase and an uppercase character and + # identifiers as a vowel or consonant + def __init__(self, lowerchar, upperchar, is_vowel, is_consonant): + global letter_count + self.upperchar = upperchar + self.lowerchar = lowerchar + self.is_vowel = is_vowel + self.is_consonant = is_consonant + self.num = letter_count + letter_count += 1 + +def normalize(prob): + global alphabet + new_prob = prob + for i in range(0,len(alphabet)): + total = 0 + for j in range(0,len(alphabet)): + total+=prob[i][j] + if (total > 0): + for j in range(0,len(alphabet)): + new_prob[i][j] = prob[i][j]/total + else: + for j in range(0,len(alphabet)): + new_prob[i][j] = len(alphabet)**(-1) + return new_prob + +# Define the alphabet +global alphabet +alphabet = [letter('a','A',True,False), + letter('b','B',False,True), + letter('c','C',False,True), + letter('d','D',False,True), + letter('e','E',True,False), + letter('f','F',False,True), + letter('g','G',False,True), + letter('h','H',False,True), + letter('i','I',True,False), + letter('j','J',False,True), + letter('k','K',False,True), + letter('l','L',False,True), + letter('m','M',False,True), + letter('n','N',False,True), + letter('o','O',True,False), + letter('p','P',False,True), + letter('q','Q',False,True), + letter('r','R',False,True), + letter('s','S',False,True), + letter('t','T',False,True), + letter('u','U',True,False), + letter('v','V',False,True), + letter('w','W',False,True), + letter('x','X',False,True), + letter('y','Y',True,True), + letter('z','Z',False,True ) + ] + +# Initialize probability matrix +# prob[i][j] = probability of letter j after letter i +global prob +file_name = 'default prob.csv' # should initialize to all 0s +prob = [] +with open(file_name,newline='') as csvfile: + prob_reader = csv.reader(csvfile, delimiter=',', quotechar='|') + for row in prob_reader: + prob.append([]) + for num in row: + prob[len(prob)-1].append(float(num)) + +# read list of pre-generated names. Names should be stored one per linein file +file_name = 'names.csv' +with open(file_name, newline='') as csvfile: + name_reader = csv.reader(csvfile, delimiter=',', quotechar='|') # Record file content + for names in name_reader: # Loop over names in list + name = names[0] + # Loop over letters in the current name + for i in range(0,len(name)-1): + letter1 = name[i] + letter2 = name[i+1] + num1 = 0 + num2 = 0 + for i in range(0, len(alphabet)): + if letter1 == alphabet[i].lowerchar or letter1 == alphabet[i].upperchar: + num1 = alphabet[i].num + if letter2 == alphabet[i]. lowerchar or letter2 == alphabet[i].upperchar: + num2 = alphabet[i].num + # Add one to the number of times letter number i is followed by letter number i + prob[num1][num2] += 1 + +# Normalize the probability matrix +prob = normalize(prob) + +#Write probability matrix to file. This file will be read by the generator +file_name = 'nameprob.csv' +with open(file_name, 'w', newline='') as csvfile: + prob_writer = csv.writer(csvfile,delimiter=',', quotechar='|', quoting=csv.QUOTE_MINIMAL) + for i in range(0,len(alphabet)): + prob_writer.writerow(prob[i]) + + +def rand_int(x1,x2): + # Generate random integer number between x1 and x2 + r = int( int(x1) + random()* (int(x2)-int(x1)) ) + return r + +def make_name(): + # Determine name length + lmin = 3 # Minimum length + lmax = 10 # Maximum length + name_length = rand_int(lmin,lmax) + + # Initialize string + my_name = "" + my_name_nums = [] + + prev_vowel = False # Was the previous letter a vowel + prev_consonant = False # Was it a consonant + prev2_vowel = False # Were the 2 prev vowels + prev2_consonant = False # Were the 2 prev consonants + prev_num = 0 + + # Generate letters for name + for i in range(0, name_length): + if i == 0: + a = alphabet[rand_int(0,25)] + my_name = my_name + a.upperchar + else: + a = get_letter(prev_num,prev2_vowel,prev2_consonant) + my_name = my_name + a.lowerchar + prev2_vowel = a.is_vowel and prev_vowel + prev2_consonant = a.is_consonant and prev_consonant + prev_vowel = a.is_vowel + prev_consonant = a.is_consonant + prev_num = a.num + my_name_nums.append(a.num) + return [my_name, my_name_nums] + +def get_letter(prev_num,need_consonant,need_vowel): + global alphabet + # Generate a random letter + done = False + while not done: + a = pick_letter(prev_num) + if (need_consonant and a.is_vowel) or (need_vowel and a.is_consonant): + done = False + else: + done = True + return a + +def pick_letter(i): + global prob + r = random() + total = 0 + for j in range(0,len(alphabet)): + total += prob[i][j] + if r <= total or j == len(alphabet): + return alphabet[j] + print("problem!") + return alphabet(25) + +# Generate and print a name +name1 = make_name() +print(name1[0]) + +# Quality assessment +input_string = "Was this a good "+race_name+" name ? y/n " +good = input(input_string) +if good == 'y': + for i in range(0,len(name1[1])-1): + prob[name1[1][i]][name1[1][i+1]] *= 1.01 +if good == 'n': + for i in range(0,len(name1[1])-1): + prob[name1[1][i]][name1[1][i+1]] *= 0.99 + +prob = normalize(prob) + +with open(file_name, 'w', newline='') as csvfile: + prob_writer = csv.writer(csvfile, delimiter=',', quotechar='|', quoting=csv.QUOTE_MINIMAL) + for i in range(0, len(alphabet)): + prob_writer.writerow(prob[i]) diff --git a/nameprob.csv b/nameprob.csv new file mode 100644 index 0000000..2d8e1d0 --- /dev/null +++ b/nameprob.csv @@ -0,0 +1,26 @@ +0.03486529318541998,0.007923930269413631,0.01267828843106181,0.01743264659270999,0.12202852614896992,0.006339144215530905,0.0047543581616481785,0.007923930269413631,0.02060221870047544,0.0031695721077654527,0.01267828843106181,0.1283676703645008,0.03486529318541998,0.16006339144215534,0.01267828843106181,0.0047543581616481785,0.0015847860538827263,0.2408874801901744,0.05546751188589542,0.05863708399366087,0.03328050713153725,0.014263074484944537,0.0,0.0015847860538827263,0.0015847860538827263,0.0015847860538827263 +0.24324324324324326,0.02702702702702703,0.0,0.0,0.1891891891891892,0.0,0.0,0.05405405405405406,0.08108108108108109,0.0,0.0,0.02702702702702703,0.0,0.0,0.02702702702702703,0.0,0.0,0.24324324324324326,0.0,0.0,0.02702702702702703,0.0,0.0,0.0,0.08108108108108109,0.0 +0.15384615384615385,0.0,0.02564102564102564,0.0,0.05128205128205128,0.0,0.0,0.41025641025641024,0.10256410256410256,0.0,0.0,0.05128205128205128,0.0,0.0,0.15384615384615385,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.05128205128205128,0.0 +0.33884297520661155,0.0,0.0,0.04132231404958678,0.14049586776859505,0.0,0.0,0.01652892561983471,0.05785123966942149,0.0,0.0,0.0,0.0,0.0,0.0743801652892562,0.0,0.0,0.2066115702479339,0.0,0.0,0.049586776859504134,0.0,0.008264462809917356,0.0,0.06611570247933884,0.0 +0.027491408934707903,0.0,0.0,0.024054982817869417,0.0,0.006872852233676976,0.006872852233676976,0.020618556701030927,0.037800687285223365,0.0,0.0,0.3127147766323024,0.013745704467353952,0.10996563573883161,0.010309278350515464,0.006872852233676976,0.0,0.23711340206185566,0.054982817869415807,0.058419243986254296,0.01718213058419244,0.044673539518900345,0.003436426116838488,0.0,0.006872852233676976,0.0 +0.3243243243243243,0.0,0.0,0.0,0.08108108108108107,0.05405405405405404,0.0,0.05405405405405404,0.18918918918918914,0.0,0.0,0.13513513513513511,0.0,0.0,0.05405405405405404,0.0,0.0,0.02702702702702702,0.0,0.0,0.0,0.0,0.0,0.0,0.08108108108108107,0.0 +0.4117647058823529,0.0,0.0,0.0,0.029411764705882353,0.0,0.0,0.029411764705882353,0.08823529411764706,0.0,0.0,0.17647058823529413,0.0,0.0,0.11764705882352941,0.0,0.0,0.058823529411764705,0.0,0.0,0.029411764705882353,0.0,0.0,0.0,0.058823529411764705,0.0 +0.46060606060606063,0.0,0.0,0.0,0.07757575757575758,0.0,0.0048484848484848485,0.0,0.12242424242424244,0.0,0.0,0.024242424242424242,0.009696969696969697,0.0048484848484848485,0.13090909090909092,0.0,0.0,0.03393939393939394,0.0,0.014545454545454547,0.05818181818181819,0.009696969696969697,0.0,0.0,0.048484848484848485,0.0 +0.06787330316742082,0.0037707390648567124,0.011312217194570137,0.022624434389140274,0.04524886877828055,0.0037707390648567124,0.007541478129713425,0.007541478129713425,0.038084464555052794,0.0,0.038084464555052794,0.21493212669683262,0.026395173453996987,0.17345399698340877,0.04524886877828055,0.0037707390648567124,0.0,0.07164404223227754,0.07541478129713425,0.07918552036199096,0.0037707390648567124,0.03393665158371041,0.0,0.0,0.026395173453996987,0.0 +0.10714285714285714,0.0,0.0,0.0,0.0,0.0,0.0,0.10714285714285714,0.0,0.0,0.16071428571428573,0.16071428571428573,0.16071428571428573,0.17857142857142858,0.07142857142857142,0.0,0.0,0.017857142857142856,0.0,0.0,0.017857142857142856,0.0,0.0,0.0,0.017857142857142856,0.0 +0.24528301886792453,0.0,0.0,0.0,0.11320754716981132,0.0,0.0,0.22641509433962265,0.07547169811320754,0.0,0.018867924528301886,0.05660377358490566,0.0,0.0,0.05660377358490566,0.0,0.0,0.05660377358490566,0.0,0.018867924528301886,0.05660377358490566,0.0,0.0,0.0,0.07547169811320754,0.0 +0.3333333333333333,0.016666666666666666,0.006666666666666667,0.04666666666666667,0.06,0.0033333333333333335,0.01,0.013333333333333334,0.11333333333333333,0.0,0.0033333333333333335,0.08666666666666667,0.016666666666666666,0.013333333333333334,0.07666666666666666,0.02,0.0,0.013333333333333334,0.016666666666666666,0.03,0.043333333333333335,0.02666666666666667,0.0,0.0,0.05,0.0 +0.28571428571428575,0.08333333333333334,0.0,0.0,0.08333333333333334,0.0,0.0,0.023809523809523815,0.130952380952381,0.0,0.011904761904761908,0.023809523809523815,0.03571428571428572,0.04761904761904763,0.08333333333333334,0.0,0.0,0.04761904761904763,0.023809523809523815,0.0,0.011904761904761908,0.0,0.0,0.0,0.10714285714285716,0.0 +0.2844036697247707,0.0,0.013761467889908261,0.21100917431192667,0.055045871559633044,0.004587155963302753,0.018348623853211014,0.009174311926605507,0.06422018348623855,0.009174311926605507,0.0,0.018348623853211014,0.0,0.0688073394495413,0.04587155963302753,0.0,0.0,0.004587155963302753,0.022935779816513766,0.09174311926605506,0.009174311926605507,0.004587155963302753,0.0,0.0,0.06422018348623855,0.0 +0.03571428571428572,0.0,0.010204081632653062,0.005102040816326531,0.025510204081632657,0.0,0.0,0.015306122448979593,0.005102040816326531,0.005102040816326531,0.005102040816326531,0.09183673469387757,0.025510204081632657,0.22448979591836737,0.010204081632653062,0.005102040816326531,0.0,0.326530612244898,0.09693877551020409,0.08673469387755103,0.015306122448979593,0.0,0.0,0.005102040816326531,0.0,0.005102040816326531 +0.2222222222222222,0.0,0.0,0.0,0.08333333333333333,0.0,0.0,0.2777777777777778,0.08333333333333333,0.0,0.0,0.027777777777777776,0.0,0.0,0.027777777777777776,0.05555555555555555,0.0,0.027777777777777776,0.0,0.027777777777777776,0.05555555555555555,0.0,0.0,0.0,0.1111111111111111,0.0 +0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.2,0.2,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.6,0.0,0.0,0.0,0.0,0.0 +0.21629213483146073,0.005617977528089888,0.002808988764044944,0.03932584269662922,0.08146067415730339,0.005617977528089888,0.011235955056179777,0.028089887640449444,0.16011235955056183,0.0,0.008426966292134833,0.03370786516853933,0.014044943820224722,0.053370786516853945,0.09831460674157307,0.005617977528089888,0.0,0.03932584269662922,0.014044943820224722,0.04494382022471911,0.03370786516853933,0.0,0.002808988764044944,0.0,0.101123595505618,0.0 +0.21052631578947367,0.0,0.03007518796992481,0.0,0.06015037593984962,0.0,0.0,0.13533834586466165,0.12781954887218044,0.0,0.045112781954887216,0.015037593984962405,0.0,0.0,0.03759398496240601,0.03759398496240601,0.0,0.022556390977443608,0.09022556390977443,0.11278195488721804,0.03007518796992481,0.0,0.0,0.007518796992481203,0.03759398496240601,0.0 +0.23684210526315788,0.0,0.0,0.0,0.05263157894736842,0.0,0.0,0.5657894736842105,0.008771929824561403,0.0,0.0,0.008771929824561403,0.0,0.0,0.03070175438596491,0.0,0.0,0.05263157894736842,0.008771929824561403,0.021929824561403508,0.0,0.0,0.0,0.0,0.013157894736842105,0.0 +0.058823529411764705,0.029411764705882353,0.0196078431372549,0.0196078431372549,0.0392156862745098,0.0196078431372549,0.0,0.00980392156862745,0.0784313725490196,0.0,0.0,0.08823529411764706,0.0392156862745098,0.10784313725490197,0.00980392156862745,0.00980392156862745,0.0,0.1568627450980392,0.0784313725490196,0.10784313725490197,0.00980392156862745,0.09803921568627451,0.0,0.0,0.0196078431372549,0.0 +0.27142857142857146,0.0,0.0,0.0,0.28571428571428575,0.0,0.0,0.08571428571428573,0.10000000000000002,0.0,0.0,0.014285714285714287,0.0,0.0,0.1142857142857143,0.0,0.0,0.014285714285714287,0.0,0.0,0.0,0.042857142857142864,0.0,0.0,0.07142857142857144,0.0 +0.16666666666666666,0.0,0.0,0.0,0.08333333333333333,0.0,0.0,0.0,0.08333333333333333,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.6666666666666666,0.0 +0.375,0.0,0.0,0.0,0.0,0.125,0.0,0.375,0.125,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.026845637583892617,0.0,0.006711409395973154,0.013422818791946308,0.006711409395973154,0.020134228187919462,0.0,0.006711409395973154,0.0,0.0,0.013422818791946308,0.1476510067114094,0.11409395973154363,0.2550335570469799,0.013422818791946308,0.0,0.006711409395973154,0.20134228187919462,0.040268456375838924,0.06040268456375839,0.020134228187919462,0.026845637583892617,0.006711409395973154,0.006711409395973154,0.006711409395973154,0.0 +0.5454545454545454,0.0,0.0,0.0,0.18181818181818182,0.0,0.0,0.09090909090909091,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.09090909090909091,0.0,0.0,0.0,0.0,0.09090909090909091 diff --git a/names.csv b/names.csv new file mode 100644 index 0000000..c8c537e --- /dev/null +++ b/names.csv @@ -0,0 +1,574 @@ +Abadda +Adresin +Aermhar +Agis +Ajaar +Albondiel +Alosrin +Andaerean +Aolis +Aravilar +Argus +Arlen +Aubric +Aumanas +Baerithryn +Belstram +Bialaer +Cameron +Chozzaster +Cohnal +Corym +Dakath +Darfin +Abarat +Aduce +Aesar +Aglanthol +Akhelbhen +Alinar +Althidon +Andrathath +Aquilan +Arbane +Arkhun +Arun +Aubron +Aumrauth +Belanor +Beluar +Braern +Chaalmyth +Chylnoth +Conall +Cymbiir +Dannyd +Darthoridan +Adamar +Aelrindel +Aeson +Ainésilver +Akkar +Allain +Amrynn +Anfalen +Araevin +Ardreth +Arkiem +Ascal +Aulathar +Avourel +Beldroth +Bhyrindaar +Brindarry +Chathanglas +Cluhurach +Connak +Cystenn +Daratrine +Deldrach +Adorellan +Aerendyl +Afamrail +Aithlin +Alabyran +Alok +Anarallath +Anlyth +Arandron +Ardryll +Arl +Athtar +Aulauthar +Baerdelcoam +Bellas +Biafyndar +Buttorwyr +Cheyrth +Cluym +Cornaith +Dalyor +Darcassan +Delmuth +Delsaran +Droth +Dyffros +Edwyrd +Eilauver +Elanjar +Eldaernth +Elenshaer +Elion +Elorshin +Emmyth +Eriladar +Erolith +Ettrian +Faahresc +Falael +Fflar +Filvendor +Flinar +Gaelin +Ganamede +Giilvas +Goronyyv +Haemir +Haldreithen +Halueth +Hatharal +Hubyr +Ilbryn +Ilitharath +Ilrune +Dhoelath +Druindar +Earynspieir +Edyrm +Elaethan +Elashor +Eldar +Elephon +Elkhazel +Elpaerae +Entrydal +Erlan +Eschallus +Euchoé +Faelar +Faoraar +Fhaornik +Filverel +Foxfire +Galaeron +Gantar +Giullio +Grathgor +Haladavar +Halflar +Halueve +Hiflanyl +Iefyr +Illianaro +Illithor +Ilthuryn +Divisav +Durlan +Edansyr +Ehlark +Elaith +Elbauthin +Eldrin +Elhieardacil +Ellisar +Eltaor +Erendriel +Erlathan +Estelar +Evindal +Faelyn +Felaern +Fhociin +Finufaranell +Fylson +Galan +Garrik +Glarald +Haalaari +Halafarin +Halgondas +Haryk +Hoccar +Ievos +Ilimitar +Illitran +Ilyndrathyl +Drannor +Durothil +Edicûve +Ehrendil +Elandorr +Elbereth +Elénaril +Elidyr +Elorfindar +Eltargrim +Erglareo +Eroan +Ethlando +Eyrynnhv +Faeranduil +Fenian +Filarion +Flardryn +Gaeleath +Galather +Garynnon +Glorandal +Hachaam +Halamar +Halpaeril +Hastos +Horith +Ihimbraskar +Iliphar +Ilphas +Inchel +Inialos +Iolrath +Ivósaar +Iyriklaunavan +Jassin +Jharak +Jonik +Kahvoerm +Keletheryl +Keryth +Khatar +Khuumal +Kivessin +Korrigash +Kuskyn +Lafarallin +Larrel +Leayonadas +Lianthorn +Lorsan +Lyari +Maendellyn +Malgath +Melandrach +Injros +Itham +Ivran +Jandar +Jhaan +Jharym +Jorildyn +Kalaerede +Kelvhan +Kesefehon +Khidell +Khyrmn +Kiyuigh +Kroloth +Kymil +Lamruil +Lashul +Leojym +Llarm +Luirlan +Lyklor +Maeraddyth +Mardeiym +Melisander +Intevar +Ithraides +Iymbryl +Jannalor +Jhaartael +Jhuvik +Josidiah +Katar +Kendel +Khaalindaan +Khiiral +Khyssoun +Klaern +Kuornos +Kyrtaar +Laosx +Lathai +Lhombaerth +Llewellenar +Luthais +Lysanthir +Maeral +Marikoth +Merellien +Iolas +Ivlisar +Iyrandrar +Jaonos +Jhaeros +Jonas +Juppar +Katyr +Kerym +Kharis +Khilseith +Kindroth +Kolvar +Kuskyn +Laeroth +Larongar +Lathlaeril +Lhoris +Llombaerth +Luvon +Maasli +Maiele +Marlevaur +Merith +Methild +Miilaethorn +Mlartlar +Montagor +Mourn +Myronthilar +Naeryndam +Nelaeryn +Nesterin +Nindrol +Norlorn +Nylian +Oenel +Olithir +Ondroth +Orndacil +Orym +Othorion +Paulorin +Pirphal +Pyrravym +Quastarte +Ralikanthae +Rauthomyr +Rennyn +Rhalyf +Rhistel +Riluaneth +Ruardh +Mhaenal +Miirphys +Mlossae +Morgan +Myrddin +Mythanthar +Napraeleon +Nelaeryn +Nevarth +Ninthalor +Nremyn +Nym +Ohmbryn +Onas +Onvyr +Ornthalas +Oslarelar +Paeral +Phaendar +Pleufan +Pywaln +Quynn +Ralnor +Rauvelore +Reptar +Rhangyl +Rhothomir +Rolim +Ruehar +Mi’tilarro +Mirthal +Molonym +Morthil +Myriil +Naertho +Narbeth +Neldor +Nhamashal +Nlossae +Nuvian +Nyvorlas +Olaurae +Oncith +Orist +Ornthalas +Otaehryn +Paeris +Pharom +Purtham +"Pyxaanthal, " +Raeranthur +Rathal +Reluraun +Respen +Rhenalyrr +Rhys +Rotheloe +Ruith +Mihangyl +Mirthal +Molostroi +Mothrys +Myrin +Naeryndam +Nardual +Neldor +Nieven +Nopos +Nyaalsir +Oacenth +Olinsivver +Ondabrar +Orlpar +Ortauré +Otaerhyn +Passilorris +Phraan +Pyrder +Qildor +Raibyr +Raunaeril +Reluvethel +Rhaac'var +Rhespen +Rilitar +Rothilion +Rumathil +Ruvaen +Ryfon +Saevel +Seanchai +Shael +Shaundyl +Siirist +Skalanis +Sudryl +Sythaeryn +Taeral +Tamnaeuth +Tannyll +Tarathiel +Tasar +Teirist +Thallan +Thurruvyn +Tordynnar +Triandal +Tyvollus +Seiveril +Sudryl +Tamnaeuth +Tolthe +Uldreiyn +Uthorim +Vander +Vesperr +Vhoori +Waernas +Ruven +Ryul +Sakrattars +Seith +Shammath +Shevarash +Silvyr +Sontar +Sundamar +Taanyth +Taerntym +Tamsin +Tanseril +Taredd +Tassarion +Tenyajn +Thatoryl +Tiarshus +Toross +Triktappic +Saelethil +Sharian +Sythaeryn +Tanyl +Traeliorn +Uldreiyn +Vaalyun +Vartan +Vesryn +Vhoorhin +Wistari +Ruvyn +"Ryvvik, " +Samblar +Selanlar +Sharian +Shonassir +Simimar +Srindin +Sylvar +Taegen +Taleisin +Tanithil +Tanyl +Tarosspur +Tathaln +Tethir +Thiilthan +Tlannatar +Traeliorn +Tsaer +Saevel +Skalanis +Taenaran +Tarathiel +Ualair +Urddusk +Vaeril +Velethuil +Vesstan +Volodar +Wylchyr +Rychell +Sadalymn +Sandevv +Selgauth +Sharlario +Shyrrik +Sinaht +Strohm +Symkalr +Taeglyn +Tammson +Tannivh +Taranath +Tarron +Tehlmar +Thalanil +Thurdan +Tolthe +Travaran +Tsiilmas +Sakrattars +Sinaht +Tannivh +T’karon +Uevareth +Usunaar +Valmaxian +Venali +Vhoadan +Voron +Wylym +Wyn +Xalph +Xharlion +Ylyndar +Zandro +Zhoron +Wyndelleu +Xanotter +Yalathanil +Ynloeth +Zaor +Zulae +Wyqhael +Xhalh +Yeschant +Zabbas +Zaos +Wyrran +Xhalth +Yhendorn +Zaltarish +Zelphar