Better name generation 😄
This commit is contained in:
@ -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":
|
||||
|
Reference in New Issue
Block a user