nach Auswahl der tatsächlichen empirischen Zipf Verteilung, Sie benötige zuerst eine Tabelle der Häufigkeiten der englischen Wörter. Wenn die 100.000 häufigsten tun, können Sie eine here bekommen.
Das ist ein pdf ist, ist Text leichter zu handhaben, so dass es zu konvertieren, auf Linux können Sie
pdftotext freq100000.pdf
Dies tun schaffen eine Textdatei freq100000.txt, die Sie mit dem folgenden kleinen Skript verwenden können
import re
import numpy as np
record = re.compile('[0-9]+ [0-9]+ [a-z]+')
data = {}
for line in open('freq100000.txt'):
m = record.match(line.strip())
if not m is None:
rank, freq, word = m.group(0).split()
data[word] = int(rank), int(freq)
def rel_freqs(wlist):
freqs = np.array([data[word.lower()][1] for word in wlist])
ps = np.add.accumulate(freqs)
choice = np.searchsorted(ps, np.random.randint(ps[-1]))
return choice
rel_freqs(['Here', 'in', 'the', 'wall', 'why'])
Die Funktion rel_freqs
wählt nach dem Zufallsprinzip ein Wort aus einer Liste aus und gibt ihren Index zurück. Die Wahrscheinlichkeit, ein Wort zu zeichnen, ist proportional zu seiner Häufigkeit im Englischen.
Meinst du die tatsächliche Häufigkeit dieser Wörter in der englischen Sprache? –
Ja. Ich möchte die Elemente nach Zipfs Verteilung auswählen. Wenn ich deine Frage verstehe – Antonis