對于家庭作業,我必須繪制文本的詞頻并將其與最佳zipf分布進行比較。根據它們在日志日志圖中的排名繪制文本的計數詞頻似乎工作正常。但是我在計算最佳 zipf 分布時遇到了麻煩。結果應該是這樣的:我不明白計算直線的方程是什么樣的zipf。在zipf法律的德國維基百科頁面上,我發現了一個似乎有效的等式但沒有引用來源,所以我不明白常數1.78來自哪里。#tokenizes the file tokens = word_tokenize(raw)tokensNLTK = Text(tokens)#calculates the FreqDist of all words - all words in lower casefreq_list = FreqDist([w.lower() for w in tokensNLTK]).most_common()#Data for X- and Y-Axis plotvalues=[]for item in (freq_list): value = (list(item)[1]) / len([w.lower() for w in tokensNLTK]) values.append(value)#graph of counted frequencies gets plottedplt.yscale('log')plt.xscale('log')plt.plot(np.array(list(range(1, (len(values)+1)))), np.array(values))#graph of optimal zipf distribution is plottedoptimal_zipf = 1/(np.array(list(range(1, (len(values)+1))))* np.log(1.78*len(values)))###1.78plt.plot(np.array(list(range(1, (len(values)+1)))), optimal_zipf)plt.show()我使用此腳本的結果如下所示:但我只是不確定最佳zipf分布是否計算正確。如果是這樣,最佳zipf分布不應該在某一點與 X 軸交叉嗎?
1 回答

慕標5832272
TA貢獻1966條經驗 獲得超4個贊
看看Andrew William Chisholm 的這篇研究論文。特別是第 22 頁。
H (N) ≈ ln (N) + γ
其中 γ 是 Euler-Mascheroni 常數,近似值為 0.57721。注意到 exp(γ) ≈ 1.78,方程 <...> 可以重寫為大 N(N 必須大于 1,000 才能精確到千分之一)。
pr 1 / [r*ln(1.78*N)]
添加回答
舉報
0/150
提交
取消