Better name generation 😄

This commit is contained in:
NikolajDanger
2020-11-30 22:40:59 +01:00
parent 463b38e40b
commit 4e978d5194

View File

@ -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":