Better name generation 😄
This commit is contained in:
@ -8,6 +8,11 @@ def make_pairs(corpus):
|
|||||||
for i in range(len(corpus)-1):
|
for i in range(len(corpus)-1):
|
||||||
yield (corpus[i], corpus[i+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
|
# Generates a random name
|
||||||
def nameGen():
|
def nameGen():
|
||||||
# Makes a list of all names from "names.txt"
|
# Makes a list of all names from "names.txt"
|
||||||
@ -16,6 +21,7 @@ def nameGen():
|
|||||||
|
|
||||||
# Makes a list of pairs
|
# Makes a list of pairs
|
||||||
pairs = make_pairs(corpus)
|
pairs = make_pairs(corpus)
|
||||||
|
triplets = make_triplets(corpus)
|
||||||
|
|
||||||
letter_dict = {}
|
letter_dict = {}
|
||||||
|
|
||||||
@ -26,6 +32,12 @@ def nameGen():
|
|||||||
else:
|
else:
|
||||||
letter_dict[letter_1] = [letter_2]
|
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
|
# Choses a random first letter
|
||||||
first_letter = random.choice(corpus)
|
first_letter = random.choice(corpus)
|
||||||
|
|
||||||
@ -36,11 +48,25 @@ def nameGen():
|
|||||||
# Starts the name
|
# Starts the name
|
||||||
chain = [first_letter]
|
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
|
done = False
|
||||||
|
|
||||||
# Creates the name one letter at a time
|
# Creates the name one letter at a time
|
||||||
while done == False:
|
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)
|
chain.append(new_letter)
|
||||||
# Ends name if the name ends
|
# Ends name if the name ends
|
||||||
if new_letter == "\n":
|
if new_letter == "\n":
|
||||||
|
Reference in New Issue
Block a user