Génération de noms

10

Je fais un jeu (ou je prévois au moins) et pour ce faire, j'ai besoin d'un moyen de générer automatiquement des noms pour les "boss" des PNJ (longue explication et non pertinente ici). Quelque chose comme ça est un bon exemple de ce que je veux dire.

J'ai une idée que je peux simplement créer une base de données de noms par nationalité, peut-être les premières / dernières paires, et les attribuer au hasard, avec une liste de noms ignorée, donc je n'ai pas quelque chose comme Homer Simpson et je suis poursuivi ou quelque chose.

Le problème, c'est que je devrais créer une énorme base de données de noms pour que cela fonctionne. Cela prendrait une éternité ou coûterait de l'argent, sauf si quelqu'un a déjà une liste de noms disponibles gratuitement.

J'ai une autre idée où je fais des paires aléatoires de voyelles et de consonnes, en retourne quelques-unes et les ajoute ensemble, mais un programme rapide qui fait cela a généré des noms comme ceux-ci:

  • Seermeecpa
  • Cime
  • Ofmiahwumafi
  • Gozidi
  • Effawided

(Pour toute personne intéressée par le code, vous pouvez le voir ici )

Ce sont ... une sorte de bouchée. Eh bien, sauf "Gozidi" - celui-là pourrait fonctionner. Pourtant, le taux de réussite n'est clairement pas très bon.

Y a-t-il quelque chose que je pourrais faire pour rendre les noms plus agréables (voir ci-dessous), ou devrais-je commencer à faire cette liste? Puis-je en quelque sorte imiter la façon dont les humains décident si un nom est décent ou non, avec au moins une certaine précision? Je préférerais de beaucoup quelque chose comme ça à une recherche dans une grande liste.

Ce que je veux dire par "plus agréable", c'est qu'au lieu de combinaisons aléatoires de caractères (ce qui est, pour être juste), des choses qui ressemblent à des noms réels. Ils peuvent être de n'importe quelle culture (ou sonner comme ils sont), réels ou imaginaires, n'importe quoi, tant que votre Américain stupide et monolingue comme moi peut les dire sans trop de problèmes.

Si vous avez besoin de précisions supplémentaires, allez-y et demandez. Je ne sais pas trop quoi mettre ici.

Addendum: Pour autant que je sache, il n'y a vraiment pas de balises qui correspondent à cette question si bien. Si quelqu'un qui est ici depuis plus longtemps peut en recommander, ce serait génial.

Action en justice de Fund Monica
la source
Malheureusement, votre question semble actuellement trop large. Différentes méthodes de génération de noms conviendront à différents types de noms - réalistes (aussi, quelle culture?), Fantaisie, science-fiction, alias, etc. Chaque méthode a ses propres forces et faiblesses - demandez-vous une comparaison et sur quel critère ? Comment jugez-vous personnellement si un nom sonne "bien"? Vous pouvez améliorer votre question en la réduisant dans ce sens.
congusbongus du
Merci! Je vais le modifier pour le rendre plus clair. Ce que je voulais dire, cependant, était n'importe quel nom, et prononçable par l'Américain monolingue moyen. Donnez-moi un moment et je vais le jeter.
Fund Monica's Lawsuit
@congusbongus Je pense que je l'ai corrigé.
Fund Monica's Lawsuit
vous pouvez essayer de composer des noms en utilisant différents préfixes et postfixes, par exemple le "ith" de Smith pourrait faire des noms comme qith, hith, kith qui semblent tous quelque peu raisonnables et prononçables, vous pouvez également obtenir une liste de noms et les couper en deux, puis remplacez par l'autre moitié d'un autre nom. Par exemple, Matt serait Ma, et Josh ferait Mash
Matthew Pigram
@MatthewPigram Cela nécessite encore de compiler une liste de noms, ce que je veux éviter. Pourtant, c'est une bonne idée, le bit pré / postfixes.
Fund Monica's Lawsuit

Réponses:

14

La plupart des générateurs de noms fonctionnent via une variante de Markov Chain , qui sont des constructions assez remarquables (re markov le?) Qui ont de nombreuses utilisations dans les jeux, ainsi que dans d'autres domaines.

L'approche de base invoque une liste quelconque. Ceux-ci n'ont pas besoin d'être assez énormes. Le but de cette liste est simplement d'indiquer à l'algorithme quelles syllabes sont susceptibles d'être appariées pour une catégorie de nom donnée.

Cela vous permet de constituer différentes listes, par exemple des noms masculins, féminins, des noms de famille ou des noms pour différentes cultures / régions / espèces.

Le temps que vous passerez à peaufiner un algorithme qui assemble au hasard des syllabes composées de manière agréable sera probablement plus long que vous ne passeriez à générer une liste de noms qui vous semblent bons et correspondent à un thème commun.

Il existe de nombreuses listes de noms disponibles. Téléchargez la dernière base de données du recensement américain pour les noms modernes facilement séparés par âge, sexe et origine ethnique, ou récupérez des listes d' anciens noms nordiques ou similaires. Ce sont tous assez faciles à trouver via Google; ce dernier lien était littéralement mon premier coup pour «liste de noms nordiques».

Sean Middleditch
la source
Ceci et encore ceci. Les chaînes de Markov régissent les noms, car elles peuvent être entraînées avec des exemples (alimentez-la dans une base de données de noms que vous souhaitez ressembler) et sont même flexibles dans la mesure où elles correspondent aux noms d'exemples (chaînes à 2 lettres? Chaînes à 3 lettres? 4?).
Babis
1
+1 pour le jeu de mots stupide. Aussi la bonne réponse, mais surtout pour le jeu de mots. Je vais regarder le recensement et voir si je ne peux pas faire une liste de syllabes à utiliser. Je vais probablement finir par accepter cela, simplement parce qu'il mentionne la terminologie, au lieu de simplement la décrire.
Fund Monica's Lawsuit
3

La plupart des noms dans les langues suivent une série de modèles. Par exemple, les noms russes ou grecs peuvent avoir cinq ou dix préfixes différents, donc si vous trouvez un nom se terminant par -ov, vous pouvez suspecter son russe car il correspond un peu au modèle.

Si vous voulez de vrais noms (ou des vrais), je pense que vous devriez commencer à construire votre liste (qui ne devrait pas être si longue) car analyser les vrais noms de certaines langues, trouver leur modèle et créer un algorithme pour produire de tels noms ne vaut pas la peine l'effort à mon avis.

Si vous voulez des noms aléatoires qui pourraient être un nom dans une langue, vous pouvez construire une petite liste de règles à suivre (comme un sous-ensemble de ce qui précède). Déjà, ce que vous faites, c'est que: vous avez établi une règle concernant les voyelles et les consonnes. Vous pouvez ajouter quelques autres noms comme les noms de famille devraient se terminer par ces 10 syllabes ou certaines consonnes peuvent être suivies uniquement par des voyelles comme «q» suivies uniquement par «u» et d'autres peuvent être suivies par d'autres consonnes comme «s» suivies de «t 'ou' k '. Encore une fois, c'est plus pour créer des mots qui peuvent être prononcés et se sentir un peu réels que de créer des noms réels.

Quelque chose qui peut être pertinent est la façon dont "Papers, Please" génère des noms. http://papersplease.wikia.com/wiki/List_of_names

Exaila
la source
Je pense que c'est le meilleur que je vais obtenir, juste à cause de la complexité du problème. Merci pour l'aide, même si ce n'est pas ce que je recherchais.
Fund Monica's Lawsuit
Dans l' exemple Papers, Please , il convient de noter que la dernière entrée du journal des modifications ne concerne pas la génération de noms, mais la façon d'exclure certains des noms générés, car ils ressemblent à des noms de personnes réelles (peut-être pas si importants; même si cela peut sembler légèrement déroutant pour les utilisateurs, il y a tout simplement trop de vraies personnes connues pour exclure tous leurs noms), parce que les noms ressemblent à des mots indésirables (cela peut également se produire en combinant simplement des prénoms et des noms réels), ou parce que les noms sont protégés par des droits d'auteur (peut-être très selon la législation).
OR Mapper du
J'ai changé la réponse que j'ai acceptée parce que Sean a fourni un lien vers une description plus détaillée, plutôt qu'un aperçu sans elle, et un lien vers une liste de noms que je pouvais consulter. Merci pour l'aide, de toute façon.
Fund Monica's Lawsuit
0

Je pense que la façon la plus simple de le faire est d'utiliser un générateur de noms aléatoires existant ou une liste existante de noms aléatoires qui répondent à vos besoins. Ensuite, stockez-le quelque part sous forme de liste. Lorsque vous avez besoin d'un nom aléatoire, choisissez simplement dans la liste existante au hasard.

user55564
la source
Voilà ce que j'essaie d'éviter. Je veux avoir un système qui puisse les faire à la volée, plutôt que d'avoir à choisir une liste. Aussi, j'ai cherché une liste préexistante. La raison pour laquelle j'ai dit que je devrais en faire un est que je ne pouvais pas en trouver un gratuitement.
Fund Monica's Lawsuit