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é![Big Grin Big Grin](https://jeuweb.org/images/smilies/biggrin.png)
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é
![Big Grin Big Grin](https://jeuweb.org/images/smilies/biggrin.png)
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")