Als Sonntagnachmittagsprojekt habe ich heute (schon wieder) einen Namens Generator geschrieben. Meiner Meinung nach ist er jedoch etwas klüger als die Vorhergehenden. Diesen habe ich dann mit Informationen aus der Wikipedia gefüttert und fertig war die Namengenerierungsmaschiene 2.0.
Derzeit kann sie folgende Arten von Namen generieren:
- Männliche (Vor)namen
- Weibliche (Vor)namen
- Nachnamen
- Krankheiten (Nützlich für Absenzen )
- Staaten
und natürlich Pornodarsteller Namen.
Falls jemand weitere Ideen hat, nur her damit
http://29a.ch/namegenerator/
Namengenerierungsmaschiene 2.0
-
- User
- Beiträge: 419
- Registriert: Sonntag 3. September 2006, 15:11
- Wohnort: in den weiten von NRW
- Kontaktdaten:
Nett, wobei ich den Pythonzusammenhang (oder den Pythoncode?) nicht sehe.
Idee:
Film/Buch/Musiktitel
Bandnamen
Schiffnamen (?)
Tiernamen
...
Idee:
Film/Buch/Musiktitel
Bandnamen
Schiffnamen (?)
Tiernamen
...
- veers
- User
- Beiträge: 1219
- Registriert: Mittwoch 28. Februar 2007, 20:01
- Wohnort: Zürich (CH)
- Kontaktdaten:
Der Python zusammenhang ist dass es in Python geschrieben wurde (:
Den Code will ich euch auch nicht vorenthalten
Das CGI:
Die Pickle Files werden mit analyze.py erstellt:
Um aus einer Wikipedia Kategorie ein Textfile für analyze.py zu machen gibt es fetchwikinames.py:
Ist ein ziemliches gebastel.
Den Code will ich euch auch nicht vorenthalten
Das CGI:
Code: Alles auswählen
#!/usr/bin/python
# vim: set fileencoding=utf-8 :
import cgi
import cgitb; cgitb.enable()
import os, re, pickle
from random import choice
print "content-type: text/html; charset=utf-8\r\n\r\n"
def main():
depth = 3
fs = cgi.FieldStorage()
nametype = fs["type"].value
if not re.match("^[a-z]+$", nametype): return
namedata = pickle.load(open(os.path.join("names/", nametype + ".pickle")))
print "<ul>"
for i in range(10):
print "<li>" + generate_name(namedata, depth) + "</li>"
print "</ul>"
def generate_name(namedata, depth):
current = ""
name = ""
while True:
letter = choice(namedata[current])
if letter == "\n":
return name
else:
name += letter
current = name[-depth:]
main()
Code: Alles auswählen
#!/usr/bin/env python
# vim: set fileencoding=utf-8 :
import pickle
import sys
def main():
depth = 3
if len(sys.argv) != 3:
sys.exit("Usage: " + sys.argv[0] + " input.txt ouput.pickle")
result = analyze(sys.argv[1], depth)
f = open(sys.argv[2],"w")
pickle.dump(result, f)
f.close()
def analyze(path, depth):
result = {}
f = open(path)
for line in f:
combination = ""
for i, letter in enumerate(line):
result[combination] = result.get(combination, []) + [letter]
combination = combination[-(depth-1):] + letter
f.close()
return result
if __name__ == "__main__":
main()
Code: Alles auswählen
# vim: set fileencoding=utf-8 :
import urllib2
import re
def main():
category = raw_input("Kategorie:")#"Weiblicher_Vorname"
url = "http://de.wikipedia.org/w/query.php?what=category&cptitle=%s&format=xml"\
"&cpfrom=" % urllib2.quote(category)
cpfrom = ""
while True:
u = urllib2.urlopen(url + urllib2.quote(cpfrom))
xml = u.read()
matches = re.findall("<title>(.*?)</title>", xml)[1:]
for match in matches:
print match
next = re.search(r'<category next=\"(.*?)\"', xml)
if next: cpfrom = next.group(1)
else: break
if __name__ == "__main__":
main()
Nett, Nett du könntest ja vieleicht noch anderstsprachige Wikipedias auslesen und andere Verzeichnisse damits noch n bisl Vielfalt gibt. Und ich würd für Sowas ne DB verwenden weil Pickle wird glaub bisl langsam werden wenns mehr werden vorallem in Verbindung mit CGI.
- veers
- User
- Beiträge: 1219
- Registriert: Mittwoch 28. Februar 2007, 20:01
- Wohnort: Zürich (CH)
- Kontaktdaten:
Spanische oder Chinesische Namen würden sich sicher auch Nett machen.pythonist hat geschrieben:Nett, Nett du könntest ja vieleicht noch anderstsprachige Wikipedias auslesen und andere Verzeichnisse damits noch n bisl Vielfalt gibt.
Habe nun mal die Given Names aus der Englischen Wikipedia importiert (1187 Stück). Mal sehen wie die Anzahl Namen das Ergebnis beeinflusst. Es scheint aber relativ komische Ergebnisse zu geben weil Namen aus sehr verschiedenen Sprachen gemischt werden.
Spielt in dem Fall keine Rolle Pickle war ist einfacher, ist in der stdlib etc. Würde mich die Geschwindigkeit wirklich interessieren würde ich cPickle verwenden.pythonist hat geschrieben:Und ich würd für Sowas ne DB verwenden weil Pickle wird glaub bisl langsam werden wenns mehr werden vorallem in Verbindung mit CGI.
Abgesehen davon:
Die cPickle Variante:
Interpreter starten, cPickle Modul laden, Daten werde in einem Rutsch geladen
Mit DB:
Interpreter starten, db Modul laden, Socket öffnen, Login, Select, Resultat vom Select in entsprechende Datenstruktur bringen
Ich zweifle daran das die DB Variante schneller ist
Edit:
Wahaha mir ist die ultimative Idee gekommen.
Ein Random EULA Generator
Hab mir jetzt den Code noch nicht angesehen (Kaffeetasse ist noch halb voll ), aber irgendwie kann ich nicht erkennen, dass was generiert wird. Es wird immer nur pro Kategorie die selbe Liste ausgegeben. Ich hätte ja erwartet, dass, wenn ich zweimal Vornamen aufrufe, ich zwei verschiedene Listen von Vornamen bekomme.
Es gibt für alles eine rationale Erklärung.
Außerdem gibt es eine irrationale.
Wie man Fragen richtig stellt
Außerdem gibt es eine irrationale.
Wie man Fragen richtig stellt
- Rebecca
- User
- Beiträge: 1662
- Registriert: Freitag 3. Februar 2006, 12:28
- Wohnort: DN, Heimat: HB
- Kontaktdaten:
Vielleicht koennte man den Namensgenerator noch mit ein wenig mehr Zufall wuerzen? Man bekommt zu oft Namen, die es schon gibt oder die vorhandenen extrem aehnlich sind. (Katja + Tatjana = Katjana).
PS: Sieht auf den ersten Blick aehnlich aus wie ein Namensgenerator, den ich selbt mal programmiert habe. Da war das mit dem Random nicht so einfach hinzubekommen: Entweder obiges Problem oder zu viele unaussprechliche Namen. Schwer, ein Mittelmass zu finden...
PPS: Ich kann heute leider nicht arbeiten, habe Pseudoxanthomationskrankung...
PS: Sieht auf den ersten Blick aehnlich aus wie ein Namensgenerator, den ich selbt mal programmiert habe. Da war das mit dem Random nicht so einfach hinzubekommen: Entweder obiges Problem oder zu viele unaussprechliche Namen. Schwer, ein Mittelmass zu finden...
PPS: Ich kann heute leider nicht arbeiten, habe Pseudoxanthomationskrankung...
Gute Besserung! Ich hätte Dir ja jetzt gerne ein Heilmittel empfohlen, aber dafür fehlt noch der Medikamentennamengenerator.
Ah, wenn man die Seite komplett neu aufruft, dann gehts.
Mann, hab ich heut wieder Zivilisationserparasitentrahlenkrampf (zuerst dachte ich, es sei eine einfache Zivilität ) und Idiopathie
Mann, hab ich heut wieder Zivilisationserparasitentrahlenkrampf (zuerst dachte ich, es sei eine einfache Zivilität ) und Idiopathie
Es gibt für alles eine rationale Erklärung.
Außerdem gibt es eine irrationale.
Wie man Fragen richtig stellt
Außerdem gibt es eine irrationale.
Wie man Fragen richtig stellt
- veers
- User
- Beiträge: 1219
- Registriert: Mittwoch 28. Februar 2007, 20:01
- Wohnort: Zürich (CH)
- Kontaktdaten:
Es scheint als würden einige Browser das Ergebnis cachen (IE?!). Hab nun mal noch Math.random() zu dem Aufruf angehängt.
Der Zufall kommt durch eine grosse Namensliste. Es wäre auch möglich Depth zu reduzieren aber dann kommt nichts brauchbares mehr heraus.
Medikamente können nun auch generiert werden!
Für Rebecca zum Beispiel Alfentobarbocuramin
Der Zufall kommt durch eine grosse Namensliste. Es wäre auch möglich Depth zu reduzieren aber dann kommt nichts brauchbares mehr heraus.
Medikamente können nun auch generiert werden!
Für Rebecca zum Beispiel Alfentobarbocuramin