猿问

如何计算文本中词频的最优zipf分布

对于家庭作业,我必须绘制文本的词频并将其与最佳zipf分布进行比较。

根据它们在日志日志图中的排名绘制文本的计数词频似乎工作正常。

但是我在计算最佳 zipf 分布时遇到了麻烦。结果应该是这样的:

我不明白计算直线的方程是什么样的zipf

zipf法律的德国维基百科页面上,我发现了一个似乎有效的等式

http://img4.mukewang.com/61cbc769000192a203130056.jpg

但没有引用来源,所以我不明白常数1.78来自哪里。


#tokenizes the file 

tokens = word_tokenize(raw)

tokensNLTK = Text(tokens)


#calculates the FreqDist of all words - all words in lower case

freq_list = FreqDist([w.lower() for w in tokensNLTK]).most_common()


#Data for X- and Y-Axis plot

values=[]

for item in (freq_list):

    value = (list(item)[1]) / len([w.lower() for w in tokensNLTK])

    values.append(value)


#graph of counted frequencies gets plotted

plt.yscale('log')

plt.xscale('log')

plt.plot(np.array(list(range(1, (len(values)+1)))), np.array(values))


#graph of optimal zipf distribution is plotted

optimal_zipf = 1/(np.array(list(range(1, (len(values)+1))))* np.log(1.78*len(values)))###1.78

plt.plot(np.array(list(range(1, (len(values)+1)))), optimal_zipf)

plt.show()

我使用此脚本的结果如下所示:

http://img3.mukewang.com/61cbc778000142ca21441167.jpg

但我只是不确定最佳zipf分布是否计算正确。如果是这样,最佳zipf分布不应该在某一点与 X 轴交叉吗?



慕森王
浏览 213回答 1
1回答

慕标5832272

看看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)]
随时随地看视频慕课网APP

相关分类

Python
我要回答