Die Python-Bibliothek PyZufall beinhaltet diverse Funktionen für das Generieren zufälliger Daten wie Namen, Berufe, Bandnamen, ein Datum, Sätze oder den kompletten Datensatz einer Personen.
Die Entwicklung begann als Satzgenerator für http://satzgenerator.de/ und wird noch in diese Richtung weitergeführt. Sie soll aber auch eine generelle Sammlung von Funktionen zur Generierung zufälliger Daten darstellen. So wird sie schon von anderen Projekten verwendet, wie dem Random VCard-Generator.
PyZufall ist freie und Open Source Software. Es steht unter der GPL Version 3.
Den Quelltext findest du im Repository und Fehler sowie Verbesserungsvorschläge werden im Bugtracker gesammelt.
Jeder ist eingeladen zum Projekt beizutragen!
Als Kind hatte ich bei meiner Oma öfter das Spiel Opa plätschert lustig in der Badewanne gespielt.
Dabei hat jeder Spieler ein Blatt Papier, dass er quer nimmt und als erstes einen Namen oder eine Person darauf schreibt, es an der Stelle faltet, so dass man es nicht mehr lesen kann und es im Uhrzeigersinn weitergibt. Dann schreibt jeder auf das erhaltene Blatt ein Verb, gibt es weiter und schribt ein Adjektiv und nach nochmaligem Weitergeben einen Ort darauf.
So entstehen absurde und zufällige Sätze. Das war immer sehr witzig.
Als ich älter wurde, begann ich Programmieren zu lernen. Dabei hat mich immer begeistert, durch Zufall etwas zu generieren, was teilweise einen Sinn ergibt, aber oft sehr absurd und dadurch lustig ist.
So ist ein Personendatengenerator entstanden, mit dem eine Personendatenbank befüllt wurde.
Auch hab ich ein Script geschrieben, dass Sätze nach dem Muster des Spiels generiert. Erst in Perl und dann in Python. Diese Sätze werden natürlich auf Dauer langweilig.
Da mittlerweile Python die Programmiersprache meiner Wahl ist, habe ich das Script darin weiterentwickelt, mit diversen Satz-Schemata und anderen tollen Funktionen.
Inzwischen gibt es satzgenerator.de. Auf dieser Webseite werden zufällige Sätze generiert, die bewertet und geteilt werden können.
Für die Generierung der Sätze wird PyZufall genutzt. Die Seite ist auch in Python programmiert, benutzt das Web-Framework Bottle und eine MySQL-Datenbank für die Speicherung der Sätze und Bewertungen.
PyZufall ist Open Source und wird bereits für andere Projekte benutzt.
Mit pip kannst du die neuste stabile Version von PyZufall ganz einfach auf deinem System installieren:
$ sudo pip install pyzufall
Bemerkung
Meist ruft der Befehl pip für Python 2.x auf. PyZufall wird hauptsächlich für Python 3 entwickelt, bei einem schnellen Test mit Python 2.6.x und 2.7.x sind allerdings keine Fehler aufgefallen.
Pip für Python 3 wird auf vielen System (z.B OS X oder Ubuntu) wie folgt ausgeführt:
$ sudo pip-3.2 install pyzufall
Oder du installierst PyZufall manuell, indem du die neuste Version von PyPI runterlädst, diese entpackst und installierst.
$ wget https://pypi.python.org/packages/source/P/PyZufall/PyZufall-0.11.tar.gz#md5=dea538382e11cd9b537b3d70f205fdc7
$ tar -xzf PyZufall-0.11.tar.gz
$ cd PyZufall-0.11/
$ sudo python3 setup.py install
Anhand von Beispielen werden die verschiedenen Module von PyZufall vorgestellt.
Um einen Namen zu generieren wird das Modul pyzufall.generator verwendet, dass eine Vielzahl von Funktionen für das Generieren von Daten bereitstellt.
from pyzufall.generator import vorname_m, nachname
name = vorname_m() + ' ' + nachname()
print(name)
Siehe auch
Eine Übersicht aller Funktionen findest du in der Referenz.
Das Modul pyzufall.satz generiert zufällige Sätze nach diversen Schemata.
from pyzufall.satz import satz
satz = satz()
print(satz)
Die Klasse Person des Moduls pyzufall.person generiert eine Person mit diversen Daten. Du kannst alle Daten der Person aufeinmal ausgeben oder direkt auf jede einzelne Variable zugreifen.
from pyzufall.person import Person
p1 = Person()
p2 = Person()
print(p1)
print("{} und {} sitzen auf einer Bank im Park.".format(p1.vorname, p2.vorname))
print("{} ({}) wohnt in {} und isst gerne {}.".format(p1.vorname, p1.alter, p1.wohnort, p1.lieblingsessen))
del p1, p2
********************************************************************************
Name: Tilmann Ried
Geschlecht: männlich
Geburtsdatum: 19.04.1981 (32)
Geburtsort: Schwelm
Wohnort: Starnberg
Beruf: arbeitslos
Interessen: Sonnenstudio, Mofatuning
Lieblingsfarbe: Grün
Lieblingsessen: Schokoladen
Motto: Du sollst den Tag nicht vor dem Abend loben.
********************************************************************************
Tilmann und Emre sitzen auf einer Bank im Park.
Tilmann (32) wohnt in Starnberg und isst gerne Schokoladen.
Ein praktischer Einsatszweck dafür ist der Random VCard-Generator.
Die Vielfalt und Anzahl der möglichen Sätze steigt mit den Datensätzen. Es ist einfach neue Worte oder Satzteile beizutragen und hilft enorm die Sätze noch abwechslungsreicher zu machen.
Bemerkung
An einer einfachen Möglichkeit, Daten hinzuzufügen, wird gearbeitet.
Zu tun
Dokuwiki auf satzgenerator.de/beitragen einrichten mit Kopie der Datensätze. Bearbeiten nach Registrierung möglich.
Das Projekt verwendet den Bugtracker auf github um Fehler und Verbesserungsvorschläge zu sammeln.
Wenn du auf github angemeldet bist, kannst du PyZufall forken, das Repository runterladen und anfangen neue Funktionen zu programmieren oder den bestehenden Code zu verbessern.
Dann stellst du einen Pull-Request mit deinen Änderungen.
Hier ist eine Liste mit Projekten, die PyZufall verwenden:
Dein Projekt füge ich auch gerne hinzu.
Einfach eine E-Mail mit Beschreibung und Link an post at davidak punkt de oder das Kontaktformular benutzen.
Bei der Entwicklung von PyZufall wird git für die Versionierung eingesetzt.
Die Dokumentation wird mit Sphinx erzeugt und die Unittests durch nose ausgeführt.
$ git clone https://github.com/davidak/pyzufall.git
Mit folgendem Befehl wird die HTML-Version sowie LaTeX samt PDF erzeugt.:
$ make docs
Einzeln geht das mit:
$ make html
$ make pdf
Um den Code auf deinem System zu testen, führe folgenden Befehl im heruntergeladenen Repository aus:
imac:PyZufall davidak$ make test
Doctest: pyzufall.generator.adjektiv ... ok
Doctest: pyzufall.generator.band ... ok
Doctest: pyzufall.generator.bandart ... ok
Doctest: pyzufall.generator.baum ... ok
Doctest: pyzufall.generator.beilage ... ok
Doctest: pyzufall.generator.beruf_m ... ok
Doctest: pyzufall.generator.beruf_w ... ok
Doctest: pyzufall.generator.color ... ok
Doctest: pyzufall.generator.datum ... ok
Doctest: pyzufall.generator.essen ... ok
Doctest: pyzufall.generator.farbe ... ok
Doctest: pyzufall.generator.geburtsdatum ... ok
Doctest: pyzufall.generator.gegenstand ... ok
Doctest: pyzufall.generator.geschlecht ... ok
Doctest: pyzufall.generator.interesse ... ok
Doctest: pyzufall.generator.interessen_liste ... ok
Doctest: pyzufall.generator.koerperteil ... ok
Doctest: pyzufall.generator.nachname ... ok
Doctest: pyzufall.generator.ort ... ok
Doctest: pyzufall.generator.person_m ... ok
Doctest: pyzufall.generator.person_objekt_m ... ok
Doctest: pyzufall.generator.person_objekt_w ... ok
Doctest: pyzufall.generator.person_w ... ok
Doctest: pyzufall.generator.pflanze ... ok
Doctest: pyzufall.generator.sprichwort ... ok
Doctest: pyzufall.generator.stadt ... ok
Doctest: pyzufall.generator.stadt_bl ... ok
Doctest: pyzufall.generator.tier ... ok
Doctest: pyzufall.generator.trinken ... ok
Doctest: pyzufall.generator.verbd ... ok
Doctest: pyzufall.generator.verbi ... ok
Doctest: pyzufall.generator.verbi2 ... ok
Doctest: pyzufall.generator.verbn ... ok
Doctest: pyzufall.generator.verbt ... ok
Doctest: pyzufall.generator.verbt2 ... ok
Doctest: pyzufall.generator.vorname_m ... ok
Doctest: pyzufall.generator.vorname_w ... ok
Doctest: pyzufall.generator.wort ... ok
Doctest: pyzufall.generator.zahl ... ok
Doctest: pyzufall.helfer.erste_gross ... ok
Doctest: pyzufall.helfer.lese ... ok
Doctest: pyzufall.helfer.str_add ... ok
test.test_satz ... ok
test.test_satz_frage ... ok
test.test_sprichwort ... ok
----------------------------------------------------------------------
Ran 45 tests in 0.907s
OK
Versionsnummer in version.py überprüfen, niemals ‘dev’ auf PyPI laden
Changelog aktualisieren, Versionsnummer und Datum überprüfen
Unittests ausführen:
$ make test
Dokumentation bauen und überprüfen:
$ make docs
letzte Änderungen in git einchecken
git tag mit Versionsnummer setzen
push auf github
auf PyPI veröffentlichen:
$ python3 setup.py sdist upload
Die Module mit ihren Klassen und Funktionen.
Stellt diverse Hilfsfunktionen bereit.
Erzeugt eine grammatikalisch korrekte Aufzählung aus einer Liste.
Beispiel:
>>> a = ['lesen', 'reiten', 'Freunde treffen']
>>> aufzaehlung(a)
'lesen, reiten und Freunde treffen'
>>> b = ['Überwachen', 'Strafen']
>>> aufzaehlung(b)
'Überwachen und Strafen'
>>> c = ['schlafen']
>>> aufzaehlung(c)
'schlafen'
Parameter: | liste (list) – Eine Liste von Strings. |
---|---|
Rückgabetyp: | string |
Neu in Version 0.12.
Der übergebene Wert wird mit der gewählten Wahrscheinlichkeit zurückgegeben.
Neu in Version 0.11.
Parameter: |
|
---|
Der übergebene Wert wird mit einer Wahrscheinlichkeit von 16% zurückgegeben.
Veraltet ab Version 0.11: Wird durch pyzufall.helfer.chance() ersetzt.
Der übergebene Wert wird mit einer Wahrscheinlichkeit von 25% zurückgegeben.
Veraltet ab Version 0.11: Wird durch pyzufall.helfer.chance() ersetzt.
Der übergebene Wert wird mit einer Wahrscheinlichkeit von 50% zurückgegeben.
Veraltet ab Version 0.11: Wird durch pyzufall.helfer.chance() ersetzt.
Der übergebene Wert wird mit einer Wahrscheinlichkeit von 75% zurückgegeben.
Veraltet ab Version 0.11: Wird durch pyzufall.helfer.chance() ersetzt.
Macht den ersten Buchstaben gross.
Beispiele:
>>> erste_gross('das ist ein Beispiel?')
'Das ist ein Beispiel?'
>>> erste_gross('über Stock und Stein.')
'Über Stock und Stein.'
>>> erste_gross('älter als das Internet!')
'Älter als das Internet!'
Liest die Textdatei mit dem übergebenen Namen aus data/ zeilenweise ein und gib eine Liste zurück.
Beispiel:
>>> liste = lese('baeume.txt')
http://stackoverflow.com/questions/10174211/make-an-always-relative-to-current-module-file-path
Parameter: | dateiname (string) – Dateiname inklusive Endung, z.B. vornamen.txt |
---|---|
Rückgabetyp: | list |
Stellt diverse Generator-Funktionen zur Verfügung.
Gibt ein gültiges Datum zwischen dem 01.01.1950 und 31.12.2012 zurück.
Rückgabetyp: | string |
---|
Gibt einen fiktiven Firmenname zurück.
Zu tun
Funktion programmieren
Gibt ein gültiges Datum zwischen dem 01.01.1910 und 31.12.2012 zurück.
Rückgabetyp: | string |
---|
Gibt ein zufälliges Geschlecht zurück.
1 = männlich 0 = weiblich
2011 gibt es laut Statistik 51,18% weibliche Personen in Deutschland: https://www.destatis.de/DE/ZahlenFakten/GesellschaftStaat/Bevoelkerung/Bevoelkerungsstand/Tabellen/Zensus_Geschlecht_Staatsangehoerigkeit.html
Rückgabetyp: | int |
---|
Gibt ein zufälliges Interesse bzw Hobby zurück.
Veraltet ab Version 0.11: Wird durch pyzufall.generator.interessen_liste() ersetzt.
Gibt eine Liste von Interessen als String zurück.
Ohne Angabe der Anzahl werden 2 Interessen zurückgegeben.
Neu in Version 0.11.
Veraltet ab Version 0.12.
Bringt ein Objekt in Berzug zu einer männlichen Person.
Beispiel: ‘der Bär’ wird zu ‘den Bären’ oder ‘seinen Bären’
Bringt ein Objekt in Berzug zu einer weiblichen Person.
Beispiel: ‘der Bär’ wird zu ‘den Bären’ oder ‘ihren Bären’
Gibt eine Ortsangabe zurück.
Beispiel: ‘im Flur’
Zu tun
aufteilen in generator und zufällige aus liste
Gibt eine Person als Objekt in Bezug auf eine männliche Person zurück.
Beispiel: seine Mitarbeiterin
Gibt eine Person als Objekt in Bezug auf eine weibliche Person zurück.
Beispiel: ihre Mutter
Stellt die Klasse Person zur Verfügung. Mit ihr kann man ein Objekt erzeugen, dass eine Person mit zufällig generierten Daten darstellt.
Es kann auf jedes Attribut einzeln zugegriffen werden oder mit print(person) alle aufeinmal ausgeben werden.
Die generierten Daten basieren teilweise auf statistischen Werten und versuchen möglichst authentisch zu sein.
Quellen für Statistiken:
Stellt Funktionen bereit, die Sätze nach diversen Satz-Schemata generieren.
Die Funktion pyzufall.satz.satz() beinhaltet alle.
Generiert einen zufälligen Satz.
20% Standard-Sätze, 20% Fragen und 60% Themen-Sätze
Generiert einen Satz nach folgendem Muster: Gelb ist brauner als Türkis.
Generiert einen Satz nach dem Muster: <Ort> <Verb> <Person> <Adjektiv>.
Beispiel: Auf dem Spielplatz ist die Freundin hilfsbereit.
Generiert einen Satz nach dem Muster: Je untrainierter desto lächerlicher.
Generiert einen Satz über eine berufstätige Person.
Beispiel: Achmed, der Grafiker aus Waldheim, spielt den Nasenbär.
Generiert einen Satz mit den Mitgliedern einer Band.
Beispiel: Die Black Metal Band “Die Oralen Nudeln” besteht aus Marlene, Gert, Stefanie, Timm, Andrej, Friederike und Dorothea.
Generiert einen Satz, der den Zeitpunkt einer Bandgründung zum Thema hat.
Beispiel: Die Electroband “Kartoffel auf dem Klo” wurde am 26.10.2009 in Selb gegründet.
Generiert einen Satz, in dem ein Bandmitglied vorgestellt wird.
Beispiel: Annelise ist Gitarristin von der Gothicband “Kräuter in der Innenstadt”.
Generiert einen Satz mit dem Thema Baum.
Beispiel: Die gnadenlose Kerstin tritt gegen den Apfelbaum.
Generiert einen Satz mit Essen und/oder Trinken.
Beispiel: Die Wärterin isst Orangen mit Mayonnaise und trinkt dazu Milch.
Generiert einen Satz nach dem Muster: Braun ist eine unsittliche Farbe.
Generiert einen Satz, der eine Folgehandlung beschreibt.
Beispiel: Ohne dass Irmgard überlebt, bricht sie aggressiv ein.
Generiert eine Frage nach dem Grund, aus dem eine Person eine Tätigkeit ausführt
Beispiel: Wieso fällt dein Partner in Gedanken hin?
Generiert eine Frage nach der Person, die eine Tätigkeit ausführt.
Beispiel: Wer telefoniert bewusstlos in der Abtei?
Generiert eine Frage nach dem Ort, an dem eine Person eine Tätigkeit ausführt.
Beispiel: Wo singt ein Siebdrucker?
Generiert eine Frage nach der Art, wie eine Person eine Tätigkeit ausführt.
Beispiel: Wie wird sie beim ersten Date angefasst?
Generiert eine Frage nach dem Zeitpunkt, an dem eine Person eine Tätigkeit ausführt.
Beispiel: Wann säuft eine Hure?
Generiert einen Satz über eine Person mit Eigenschaften.
Beispiel: In der Garage ist das Mannsweib lesbisch.
Generiert einen Satz über eine Person in einem Kloster.
Beispiel: Bruder Ludwig ist der böseste Mönch im Kloster.
Generiert einen Satz zum Thema Körperteile.
Beispiel: Die ekelhafte Oma massiert ihren Fuß.
Generiert einen Satz mit einem nulltransitiven Verb.
Beispiel: Im Park schneit es.
Generiert einen einfachen Satz nach dem Muster: <Person> <Verb> <Adjektiv> <Ort>.
Beispiel: Die Geschmacklose bepisst sich cool in der Kirche.
Generiert einen einfachen Satz nach dem Muster: <Ort> <Verb> <Person> <Adjektiv>.
Beispiel: Beim ersten Date flieht er.
Generiert einen einfachen Satz nach dem Muster: <Adjektiv> <Verb> <Person> <Ort>.
Beispiel: Gehirntot weint die Schädlingsbekämpferin in der Psychiatrie.
Hier sind die Änderungen jeder Version dokumentiert.
Veröffentlicht am 14.01.2014
Veröffentlicht am 22.09.2013
Veröffentlicht am 15.09.2013
Veröffentlicht am 15.09.2013
Veröffentlicht am 13.09.2013
Veröffentlicht am 13.09.2013
Veröffentlicht am 23.08.2013
Veröffentlicht am 23.07.2013
Vor der Version 0.8 gab es keine Versionsnummern, sie wurde als gefühlter Entwicklungsstand vergeben.
Alle Änderungen können den Kommentaren der Commits im Repository entnommen werden.
Der erste Commit war am 27.08.2012.