goofy_grothendieck
, ecstatic_lederberg
, quizzical_wu
, ...
Sie möchten ihm einen zufälligen, aber leicht lesbaren Namen geben, wie einen Docker-Container, oder? moby / moby bis Go Language Code. Ich fand go), portierte es also nach Python und machte daraus eine Bibliothek namens mong.
Nachtrag 2019/12/22: Follow-up Ich schrieb
Wir haben den Vorgang mit Python 3.6 und 3.8 bestätigt. Ich denke, es wird mit Python3.5 oder höher funktionieren, aber Python2 wird aufgrund von Typhinweisen usw. nicht funktionieren.
Da wir nur die Standardbibliotheken verwenden, sollte die Installation bald abgeschlossen sein.
$ pip install git+https://github.com/toshihikoyanase/mong.git
Lassen Sie uns zufällig einen Namen generieren.
(Behoben 22/12/2019: Geändert von Instanziierungsmethode zu Funktionsaufruf)
import mong
mong.get_random_name() # 'goofy_robinson'
mong.get_random_name() # 'stoic_feynman'
Jupyter Notebook ist auf Google Colab verfügbar. Sie können es sofort versuchen von:
Mit Blick auf den Originalcode zeigt das Wörterbuch der Wörter, aus denen der Name stammt, das meiste davon. .. Ich habe die Methode zum Extrahieren aus dem Originalcode gewählt, da die Wartung schwierig zu sein scheint, wenn das Wörterbuch in den Code des Portierungsziels geschrieben ist.
Insbesondere ist es wie folgt.
--mong / create_dict.py
extrahiert das Wörterbuch der Wörter, aus denen der Name stammt, aus dem Originalcode.
mong / moby_dict.json
gespeichert.mong / name_generator.py
auf NameGenerator
portiert.Code zur Generierung von Docker-Namen Ist in moby / moby und in Go-Sprache geschrieben. Moby scheint eine Sammlung von Werkzeugen für Containersysteme zu sein. Es wird kurz in [dieser Folie] zusammengefasst (https://www.slideshare.net/zembutsu/5-minuts-docker-2017/31-31MobyDockerMoby_Project).
Der Name besteht aus zwei Wörtern, einem Adjektiv und den Namen berühmter Wissenschaftler und Hacker. Sie sind durch "_" verbunden.
Beispiel
#Wütend (Anwalt)_Turing (persönlicher Name)
angry_turing
Die Adjektive werden in der Liste "links" verwaltet, und der Name der Person wird in der Liste "rechts" verwaltet.
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",
Der Prozess der Namensgenerierung ist im Grunde nur eine zufällige Auswahl und Verbindung.
// 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
}
Wie Sie in Dieser Qiita-Artikel sehen können, wird "langweilig_wozniak" nicht generiert. (Wenn es herauskommt, wird es wieder neu gemacht.)
Zum 21. Dezember 2019 gab es 108 Wörter für "links" und 235 Wörter für "rechts", sodass insgesamt 25.379 Arten von Namen generiert werden können. Ich habe das Gefühl, dass es überraschend wenige gibt.
Ich bin mir über das Argument "Wiederholen" nicht sicher, und selbst wenn ich mir den Prozess anschaue, sieht es nicht so aus, als wäre es "Wiederholen". Wenn "retry> 0", werden Ganzzahlen über "0" und unter "9" zufällig ausgewählt und am Ende des Namens hinzugefügt. Möglicherweise wissen Sie dies nicht, ohne den Code des Benutzers gelesen zu haben. Ist es einfach, die Anzahl der einstelligen Typen zu erhöhen?
Ich habe eine Bibliothek namens mong erstellt, die mit Python Docker-Container-ähnliche Zufallsnamen generieren kann.
Vorläufig habe ich bis zu dem Punkt geschrieben, an dem es funktioniert, aber es gibt Raum für Verbesserungen auf verschiedene Weise, wie z. B. geringe Testabdeckung, Weglassen der Fehlerbehandlung und kein CI. Da es nicht in pypi registriert ist, ist die Installation etwas mühsam.
Wenn es einen Bedarf gibt (einschließlich meiner selbst), denke ich, werde ich es ein bisschen mehr arrangieren.
Recommended Posts