Python zufälliges Wort generieren?
Hi, ich würde gerne in Python ein zufälliges Wort generieren lassen. Also: Man drückt Enter, es kommt ein zufälliges Wort wie beispielsweise Baum oder Haus etc...
Habe dazu ein Modul gefunden (https://pypi.org/project/Random-Word) jedoch funktioniert es bei mir nicht.
6 Antworten
Hier ist eine Liste aller deutschen Wörter:
http://www.netzmafia.de/software/wordlists/deutsch.txt
- Mach einfach eine Textdatei und füge all die Wörter per Copy-Paste ein
- Lies die Datei am Programm-Start ein und Speichere die Wörter in eine Liste
with open(filename) as f:
words = f.readlines()
words = [x.strip() for x in words]
- Mische die Liste mit
random.shuffle(words)
- Wenn jemand Enter drückt: Lass dir mit words.pop() das letzte Element der Liste ausgeben. Dieses ist zufällig, weil du die Liste ja vorher gemischt hast.
Falls du noch Fragen hast oder wo nicht weiterkommst, sag bescheid, dann helfe ich dir. :)
Das ist der schöne (und seltene) Fall, in dem ein Programm durch das Löschen von Code etwas schneller wird und weniger RAM braucht:
with open(filename) as f:
words = [x.strip() for x in f]
Wobei man in der Praxis vermutlich noch gewisse Wörter raussortieren will (z.B. Mindest- und Maximallänge).
Davon abgesehen würde ich das Ganze eher in ein Tupel stecken und dann mit random.choice() arbeiten, aber da kommt's natürlich drauf an ob Wiederholungen erlaubt sind.
Bei einer _sehr_ großen Liste wird es auch nicht mehr sinnvoll sein, sie komplett im Speicher zu halten.
http://www1.udel.edu/LLL/language/deutsch/top10000.pdf
mit einem Script könntest du diese Wörter ordentlich in einer Textdatei(.txt)
auflisten.
Wenn wir eine simple Wortliste haben, wie sie z.B. in ngerman zu finden ist (hier ein leicht runterladbarer Auszug):
with open("ngerman") as f:
words = tuple(f)
print(random.choice(words))
Allerdings will man solche Listen normalerweise etwas filtern, zum Beispiel nach sinnvollen Wortlängen. Macht man sinnvollerweise schon vorher mit der Datei, aber zur Laufzeit ist es auch kein Ding:
with open("ngerman") as f:
words = tuple(w for w in f if 3 < len(w) < 12)
print(random.choice(words))
Weil so eine Wortliste recht groß und gleichzeitig gut komprimierbar ist, könnte man sie auch erst durch gzip schicken und dann direkt auf dem komprimierten File arbeiten:
import random
import gzip
with gzip.open("ngerman.gz", "rt") as f:
words = tuple(w for w in f if 3 < len(w) < 12)
print(random.choice(words))
1.)Erstelle einen Pool von Wörtern
2.)Errechnen eine Zufallszahl im Bereich 0 bis (max Wörtern im Pool -1)
3.)Nun entnimmst du aus dem Pool das Element mit dem Index der Zufallszahl
4.) dies Packst du in eine Methode das du mit einem Key-Event abfeuerst
Klar. Wenn du auf Linux bist, hast du sie vermutlich schon installiert ("words"). Wenn nicht: https://raw.githubusercontent.com/davidblitz/german-wordlist/master/ngerman
Es gibt auch von diversen Forschungseinrichtungen Korpora runterzuladen, aber das sind dann eben nicht nur simple Wortlisten.
Was definierts du als Zufälliges Wort?
Meinst du damit ein reales Wort das aus einen Pool von Wörtern gezogen wird oder meinst du eine Zufällig generierte Zeichenkette?
Gibt es irgendwo vorgefertigte Listen mit extrem vielen Wörtern?