齐夫定律
齐夫定律(Zipf's law) 阐述了在语言的语料库中,一个单词出现的频率与其在频次递减排序中的排名成反比. 下面的例子用塞万提斯的小说《唐吉可德》中的词语集示范了该定律,其中使用了最新函数 WordCount 和 WordCounts.
ExampleData 包含了西班牙语《唐吉可德》上册中的文字.
In[1]:=
![Click for copyable input](assets.zh/zipfs-law/In_49.png)
textSpanish = ExampleData[{"Text", "DonQuixoteISpanish"}];
此处讨论的样本中包含了 180,000 多个单词.
In[2]:=
![Click for copyable input](assets.zh/zipfs-law/In_50.png)
WordCount[textSpanish]
Out[2]=
![](assets.zh/zipfs-law/O_39.png)
不同单词的个数由 WordCounts 以关联形式给出. 结果按频次递减排序.
In[3]:=
![Click for copyable input](assets.zh/zipfs-law/In_51.png)
association = WordCounts[textSpanish];
In[4]:=
![Click for copyable input](assets.zh/zipfs-law/In_52.png)
Take[association, 10]
Out[4]=
![](assets.zh/zipfs-law/O_40.png)
提取前 1,000 个频次最高的单词的计数.
In[5]:=
![Click for copyable input](assets.zh/zipfs-law/In_53.png)
counts = Take[Values@association, 1000];
为了能用幂次法则对这些计数进行近似,取对数以便进行线性拟合. 齐夫定律提示指数应近似为 ,结果与其极为相近.
In[6]:=
![Click for copyable input](assets.zh/zipfs-law/In_54.png)
f[x_] = Fit[Log[Transpose[{Range[1000], counts}]], {1, x}, x]
Out[6]=
![](assets.zh/zipfs-law/O_41.png)
将实际数据和拟合一同可视化.
显示完整的 Wolfram 语言输入
Out[7]=
![](assets.zh/zipfs-law/O_42.png)
齐夫定律对任何语言都成立,因此可对英文版《唐吉可德》进行相同计算.
In[8]:=
![Click for copyable input](assets.zh/zipfs-law/In_56.png)
textEnglish = ExampleData[{"Text", "DonQuixoteIEnglish"}];
In[9]:=
![Click for copyable input](assets.zh/zipfs-law/In_57.png)
associationEnglish = WordCounts[textEnglish];
countsEnglish = Take[Values@associationEnglish, 1000];
In[10]:=
![Click for copyable input](assets.zh/zipfs-law/In_58.png)
Take[associationEnglish, 10]
Out[10]=
![](assets.zh/zipfs-law/O_43.png)
同样,所得指数非常接近 .
In[11]:=
![Click for copyable input](assets.zh/zipfs-law/In_59.png)
Fit[Log[Transpose[{Range[1000], countsEnglish}]], {1, x}, x]
Out[11]=
![](assets.zh/zipfs-law/O_44.png)