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.
![Click for copyable input](assets.pt-br/zipfs-law/In_49.png)
textSpanish = ExampleData[{"Text", "DonQuixoteISpanish"}];
A amostra considerada aqui é composta por mais de 180.000 palavras.
![Click for copyable input](assets.pt-br/zipfs-law/In_50.png)
WordCount[textSpanish]
![](assets.pt-br/zipfs-law/O_39.png)
As contagens de cada palavra distinta são dadas em uma associação por WordCounts. O resultado já é classificado por contagens decrescentes.
![Click for copyable input](assets.pt-br/zipfs-law/In_51.png)
association = WordCounts[textSpanish];
![Click for copyable input](assets.pt-br/zipfs-law/In_52.png)
Take[association, 10]
![](assets.pt-br/zipfs-law/O_40.png)
Considere a contagem das primeiras 1.000 palavras mais frequentes.
![Click for copyable input](assets.pt-br/zipfs-law/In_53.png)
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.
![Click for copyable input](assets.pt-br/zipfs-law/In_54.png)
f[x_] = Fit[Log[Transpose[{Range[1000], counts}]], {1, x}, x]
![](assets.pt-br/zipfs-law/O_41.png)
Visualize o ajuste junto com os dados atuais.
![](assets.pt-br/zipfs-law/O_42.png)
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.
![Click for copyable input](assets.pt-br/zipfs-law/In_56.png)
textEnglish = ExampleData[{"Text", "DonQuixoteIEnglish"}];
![Click for copyable input](assets.pt-br/zipfs-law/In_57.png)
associationEnglish = WordCounts[textEnglish];
countsEnglish = Take[Values@associationEnglish, 1000];
![Click for copyable input](assets.pt-br/zipfs-law/In_58.png)
Take[associationEnglish, 10]
![](assets.pt-br/zipfs-law/O_43.png)
De novo, o expoente encontrado é próximo de .
![Click for copyable input](assets.pt-br/zipfs-law/In_59.png)
Fit[Log[Transpose[{Range[1000], countsEnglish}]], {1, x}, x]
![](assets.pt-br/zipfs-law/O_44.png)