Wolfram Language

Procesamiento de texto y lenguaje

Ley de Zipf

La ley de Zipf afirma que en un conjunto de datos de una lengua, la frecuencia de una palabra es inversamente proporcional a su rango en la lista global de palabras luego de clasificarlas por su frecuencia de forma descendiente. Este ejemplo demuestra la ley con un conjunto de palabras en la novela de Miguel de Cervantes, Don Quixote, usando las nuevas funciones WordCount y WordCounts.

ExampleData contiene el texto en español del primer volumen de Don Quixote.

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

La muestra considerada aquí consiste en más de 180.000 palabras.

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

Las cuentas de cada palabra distinta son dadas en una asociación por WordCounts. El resultado ya ha sido clasificado por cuentas decrecientes.

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

Tome las cuentas de las primeras 1.000 palabras más frecuentes.

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

Para aproximar dichas cuentas con una ley potente, tome logaritmos para usar un ajuste linear. La ley de Zipf afirma que el exponente debería ser aproximadamente , y el resultado es un valor cerrado.

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

Visualice el ajuste junto con los datos actuales.

muestre la entrada completa 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 ley de Zipf aplica en cualquier lengua así que el mismo cálculo puede ser realizado con la versión del inglés en Don Quixote.

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]=

De nuevo, el exponente encontrado es cercano a .

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

Ejemplos relacionados

de en fr ja ko pt-br ru zh