goofy_grothendieck
, ecstatic_lederberg
, quizzical_wu
, ...
Vous voulez lui donner un nom aléatoire mais facile à lire, comme un conteneur Docker, non? moby / moby à [Go Language Code](https://github.com/moby/moby/blob/master/pkg/namesgenerator/names-generator. J'ai trouvé go), alors je l'ai porté sur Python et en ai fait une bibliothèque appelée mong.
22/12/2019 postscript: suite J'ai écrit
Nous avons confirmé l'opération avec Python 3.6 et 3.8. Je pense que cela fonctionnera avec Python3.5 ou version ultérieure, mais Python2 ne fonctionnera pas en raison de l'indication de type, etc.
Puisque nous n'utilisons que les bibliothèques standard, l'installation devrait se terminer bientôt.
$ pip install git+https://github.com/toshihikoyanase/mong.git
Générons un nom au hasard.
(Correction du 22/12/2019: Changement de la méthode d'instanciation à l'appel de fonction)
import mong
mong.get_random_name() # 'goofy_robinson'
mong.get_random_name() # 'stoic_feynman'
Jupyter Notebook est disponible sur Google Colab. Vous pouvez l'essayer immédiatement depuis:
En regardant le code original, le dictionnaire des mots qui sont à l'origine du nom en montre l'essentiel. .. J'ai choisi la méthode d'extraction à partir du code d'origine car la maintenance semble difficile si le dictionnaire est écrit dans le code de la destination de portage.
Plus précisément, c'est comme suit.
--mong / create_dict.py
extrait le dictionnaire des mots qui sont la source du nom du code d'origine.
mong / moby_dict.json
.NameGenerator
dans mong / name_generator.py
.Code de génération de nom Docker Est situé dans moby / moby et est écrit en langue Go. Moby semble être une collection d'outils pour les systèmes de conteneurs. Il est brièvement résumé dans cette diapositive.
Le nom se compose de deux mots, d'un adjectif et des noms de scientifiques et de hackers célèbres. Ils sont connectés par «_».
Exemple
#En colère (avocat)_Turing (nom personnel)
angry_turing
Les adjectifs sont gérés dans la liste «gauche» et les noms de personne sont gérés dans la liste «droite».
left = [...]string{
"admiring",
"adoring",
"affectionate",
"agitated",
right = [...]string{
// Muhammad ibn Jābir al-Ḥarrānī al-Battānī was a founding father of astronomy. https://en.wikipedia.org/wiki/Mu%E1%B8%A5ammad_ibn_J%C4%81bir_al-%E1%B8%A4arr%C4%81n%C4%AB_al-Batt%C4%81n%C4%AB
"albattani",
// Frances E. Allen, became the first female IBM Fellow in 1989. In 2006, she became the first female recipient of the ACM's Turing Award. https://en.wikipedia.org/wiki/Frances_E._Allen
"allen",
Le processus de génération de nom est essentiellement une sélection et une connexion aléatoires.
// GetRandomName generates a random name from the list of adjectives and surnames in this package
// formatted as "adjective_surname". For example 'focused_turing'. If retry is non-zero, a random
// integer between 0 and 10 will be added to the end of the name, e.g `focused_turing3`
func GetRandomName(retry int) string {
begin:
name := fmt.Sprintf("%s_%s", left[rand.Intn(len(left))], right[rand.Intn(len(right))])
if name == "boring_wozniak" /* Steve Wozniak is not boring */ {
goto begin
}
if retry > 0 {
name = fmt.Sprintf("%s%d", name, rand.Intn(10))
}
return name
}
Comme vous pouvez le voir dans Cet article Qiita, boring_wozniak
n'est pas généré. (Quand il sortira, il sera refait à nouveau.)
Au 21 décembre 2019, il y avait 108 mots pour «gauche» et 235 mots pour «droite», donc un total de 25379 types de noms peuvent être générés. Je pense qu'il y en a étonnamment peu.
Je ne sais pas grand-chose sur l'argument retry
, et même si je regarde le processus, cela ne ressemble pas à retry
. Si «retry> 0», les entiers au-dessus de «0» et en dessous de «9» sont sélectionnés au hasard et ajoutés à la fin du nom. Vous ne le savez peut-être pas sans lire le code de l'utilisateur. Est-ce simplement pour augmenter le nombre de types à un chiffre?
J'ai créé une bibliothèque appelée mong qui peut générer des noms aléatoires de type conteneur Docker avec Python.
Pour le moment, j'ai écrit jusqu'au point où cela fonctionne, mais il y a place à l'amélioration de diverses manières, telles que la faible couverture des tests, l'omission de la gestion des erreurs et l'absence de CI. De plus, comme il n'est pas enregistré dans pypi, l'installation est un peu gênante.
S'il y a un besoin (y compris moi-même), je pense que je vais l'arranger un peu plus.
Recommended Posts