Wolfram Language

Processamento de texto e linguagem

Lei de Zipf

A lei de Zipf afirma que no conjunto de dados de uma linguagem, a frequência de uma palavra é inversamente proporcional a sua posição na lista global de palavras depois de classificadas por sua frequência de forma descendente. Este exemplo demonstra a lei com um conjunto de palavras do livro de Miguel de Cervantes, Don Quixote, usando as novas funções WordCount e WordCounts.

ExampleData contém o texto em espanhol do primeiro volume de Don Quixote.

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

A amostra considerada aqui é composta por mais de 180.000 palavras.

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

As contagens de cada palavra distinta são dadas em uma associação por WordCounts. O resultado já é classificado por contagens decrescentes.

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

Considere a contagem das primeiras 1.000 palavras mais frequentes.

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

Para aproximar tais contagens com uma lei poderosa, pegue algoritmos para usar um ajuste linear. A lei de Zipf afirma que o expoente deve ser aproximadamente , e o resultado é um valor próximo.

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

Visualize o ajuste junto com os dados atuais.

mostre o input completo da 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]=

A lei de Zipf é aplicável em qualquer linguagem, assim o mesmo cálculo pode ser realizado com a versão em inglês de 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 novo, o expoente encontrado é próximo de .

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

Exemplos Relacionados

de en es fr ja ko ru zh