03-07-2012, 11:41 PM
(Modification du message : 03-07-2012, 11:43 PM par Thêta Tau Tau.)
Ptit déterrage.
J'avais promis des sources plus haut mais ayant abandonné mon script je n'ai finalement rien posté
J'ai refait mon petit générateur de noms en beaucoup plus simple, mais les résultats sont meilleurs.
Exemple de sortie, en utilisant des noms français comme base :
Voilà le script :
J'avais promis des sources plus haut mais ayant abandonné mon script je n'ai finalement rien posté
J'ai refait mon petit générateur de noms en beaucoup plus simple, mais les résultats sont meilleurs.
Exemple de sortie, en utilisant des noms français comme base :
Citation :MARRIN, NENTERSTANT, LENARD, VIPER, ARON, COUCOSTON, DENDRERT, BARDAL, CLANIN, CAGIER, PRINNIER, RIRBAND, FLONTIN, MALTY, LATAL, BAZET, ARDANC, LENNIER, RICCIX, PHINTARD, LEBRETE, MAGER, BIRCEIL, PIZIN, PELLIER, CHARLAN, LASLE, JAZUE, CHRERY, MANE, LERIT, FOURTOT, CHAMOURIN, DURDIN, VIALLIER
Voilà le script :
#! usr/bin/env python
#-*- encoding: Latin-1 -*-
import re
import random
file_input = open("noms.txt")#Fichier avec des noms déjà existants pour servir de base (un nom par ligne)
file_output = open("nouveaux_noms.txt","w")#Fichier de sortie
nb_names = 2000#Le nombre de noms à générer
vowels = "AEYUIO"
consonants = "ZRTPQSDFGHJKLMWXCVBN"
#On lis les noms
names = []
for name in file_input:
names.append(name[:-1])
#On découppe les noms en trois parties (CHA-RPENT-IER)
#On compte le nombre d'occurence de chaque partie.
affixes = {"preffix" : {}, "middle" : {}, "suffix" : {}}
expr = re.compile("^(?P<preffix>[{c}]*[{v}]+)(?P<middle>[{c}]|[{c}][A-Z]*[{c}])(?P<suffix>[{v}]+[{c}]*)$".format(v = vowels, c = consonants))
nb = 0
for name in names:
match = expr.search(name)
if match:
nb += 1
for type, dict in affixes.items():
if dict.has_key(match.group(type)):
dict[match.group(type)] += 1
else:
dict[match.group(type)] = 1
#On génère des noms en prenant au hazard un preffixe, un milieu et un suffixe,
#Les probabilités de tirer une partie sont pondéré par son nombre d'occurence
names = []
def pondRand(dict,tot):
t = 0
r = random.randint(1,tot)
for k, v in dict.items():
t += v
if t >= r:
return k
k = 0
while k < nb_names:
k += 1
name = pondRand(affixes["preffix"],nb) + pondRand(affixes["middle"],nb) + pondRand(affixes["suffix"],nb)
file_output.write(name + "\n")