From 4e978d519422dfc61b49d9e17e1f780cd68494e0 Mon Sep 17 00:00:00 2001 From: NikolajDanger Date: Mon, 30 Nov 2020 22:40:59 +0100 Subject: [PATCH] Better name generation :smile: --- funcs/other/generators.py | 28 +++++++++++++++++++++++++++- 1 file changed, 27 insertions(+), 1 deletion(-) diff --git a/funcs/other/generators.py b/funcs/other/generators.py index d1d4431..d3f6cce 100644 --- a/funcs/other/generators.py +++ b/funcs/other/generators.py @@ -8,6 +8,11 @@ def make_pairs(corpus): for i in range(len(corpus)-1): yield (corpus[i], corpus[i+1]) +# Returns a list of all letter triplets in the text +def make_triplets(corpus): + for i in range(len(corpus)-2): + yield (corpus[i], corpus[i+1], corpus[i+2]) + # Generates a random name def nameGen(): # Makes a list of all names from "names.txt" @@ -16,6 +21,7 @@ def nameGen(): # Makes a list of pairs pairs = make_pairs(corpus) + triplets = make_triplets(corpus) letter_dict = {} @@ -26,6 +32,12 @@ def nameGen(): else: letter_dict[letter_1] = [letter_2] + for letter_1, letter_2, letter_3 in triplets: + if letter_1+letter_2 in letter_dict.keys(): + letter_dict[letter_1+letter_2].append(letter_3) + else: + letter_dict[letter_1+letter_2] = [letter_3] + # Choses a random first letter first_letter = random.choice(corpus) @@ -36,11 +48,25 @@ def nameGen(): # Starts the name chain = [first_letter] + # Picks second letter + second_letter = random.choice(letter_dict[chain[-1]]) + + while second_letter == "\n": + second_letter = random.choice(letter_dict[chain[-1]]) + + chain.append(second_letter) + done = False # Creates the name one letter at a time while done == False: - new_letter = random.choice(letter_dict[chain[-1]]) + if random.randint(1,10) > 1: + try: + new_letter = random.choice(letter_dict[chain[-2]+chain[-1]]) + except: + new_letter = random.choice(letter_dict[chain[-1]]) + else: + new_letter = random.choice(letter_dict[chain[-1]]) chain.append(new_letter) # Ends name if the name ends if new_letter == "\n":