Wolfram Language

Traitement de texte et de langues

Loi de Zipf

La loi de Zipf indique que dans un corpus d'une langue, la fréquence d'un mot est inversement proportionnelle à son rang dans la liste globale des mots après le tri par ordre décroissant de fréquence. Cet exemple démontre la loi avec l'ensemble des mots dans le roman de de Miguel de Cervantes roman, Don Quichotte, en utilisant les nouvelles fonctions WordCount et WordCounts.

ExampleData contient le texte en espagnol du premier volume de Don Quixote.

In[1]:=
Click for copyable input
textSpanish = ExampleData[{"Text", "DonQuixoteISpanish"}];

L'échantillon considéré ici est constitué de plus de 180.000 mots.

In[2]:=
Click for copyable input
WordCount[textSpanish]
Out[2]=

Les chiffres de chaque mot distinct sont donnés en tant qu'association par WordCounts. Le résultat est déjà trié en diminuant les chiffres.

In[3]:=
Click for copyable input
association = WordCounts[textSpanish];
In[4]:=
Click for copyable input
Take[association, 10]
Out[4]=

Prenez les chiffres des 1000 premiers mots les plus fréquents.

In[5]:=
Click for copyable input
counts = Take[Values@association, 1000];

Pour faire une approximation de ces chiffres avec une loi de puissance, prenez des logarithmes pour utiliser ajustement linéaire. La loi de Zipf affirme que l'exposant doit être approximativement -1, et le résultat est une valeur proche.

In[6]:=
Click for copyable input
f[x_] = Fit[Log[Transpose[{Range[1000], counts}]], {1, x}, x]
Out[6]=

Visualisez l'ajustement avec les données réelles.

Montrer l'entrée complète de Wolfram Language
In[7]:=
Click for copyable input
Show[ ListLogLogPlot[counts, PlotStyle -> PointSize[0.02]], LogLogPlot[Exp[f[Log[x]]], {x, 1, 1000}, PlotStyle -> Directive[DotDashed, Red]], AspectRatio -> 1, PlotRange -> All ]
Out[7]=

La loi de Zipf s'applique dans n'importe quelle langue, de sorte que le même calcul est effectué avec la version anglaise de Don Quichotte.

In[8]:=
Click for copyable input
textEnglish = ExampleData[{"Text", "DonQuixoteIEnglish"}];
In[9]:=
Click for copyable input
associationEnglish = WordCounts[textEnglish]; countsEnglish = Take[Values@associationEnglish, 1000];
In[10]:=
Click for copyable input
Take[associationEnglish, 10]
Out[10]=

Encore une fois, l'exposant trouvé est proche de -1.

In[11]:=
Click for copyable input
Fit[Log[Transpose[{Range[1000], countsEnglish}]], {1, x}, x]
Out[11]=

Exemples connexes

de en es ja ko pt-br ru zh