Закон Ципфа
Закон Ципфа утверждает, что при рассмотрении всего состава языка частота слова обратно пропорциональна его порядковому номеру в полном списке слов, упорядоченному по убыванию частоты их использования. Данный пример демонстрирует закон для набора слов из романа Мигеля Сервантеса "Дон Кихот" с использованием новыx функций WordCount и WordCounts.
ExampleData содержит текст первого тома "Дон Кихота" на испанском языке.
![Click for copyable input](assets.ru/zipfs-law/In_49.png)
textSpanish = ExampleData[{"Text", "DonQuixoteISpanish"}];
Представленный здесь пример содержит более 180000 слов.
![Click for copyable input](assets.ru/zipfs-law/In_50.png)
WordCount[textSpanish]
![](assets.ru/zipfs-law/O_39.png)
Подсчёты частоты употребления каждого определённого слова представлены в качестве ассоциации от WordCounts. Результат отсортирован по убыванию.
![Click for copyable input](assets.ru/zipfs-law/In_51.png)
association = WordCounts[textSpanish];
![Click for copyable input](assets.ru/zipfs-law/In_52.png)
Take[association, 10]
![](assets.ru/zipfs-law/O_40.png)
Получите подсчёт частоты употребления 1000 наиболее распространённых слов.
![Click for copyable input](assets.ru/zipfs-law/In_53.png)
counts = Take[Values@association, 1000];
Для нахождения приблизительных подсчётов с помощью степенного закона используйте логарифмы в линейной согласованности. Закон Ципфа утверждает, что экспонента должна быть приблизительно равна , а результат должен быть близким этому значению.
![Click for copyable input](assets.ru/zipfs-law/In_54.png)
f[x_] = Fit[Log[Transpose[{Range[1000], counts}]], {1, x}, x]
![](assets.ru/zipfs-law/O_41.png)
Визуализируйте согласованность с фактическими данными.
![](assets.ru/zipfs-law/O_42.png)
Закон Ципфа имеет силу в любом языке, поэтому данные вычисления возможны и с англоязычной версией "Дон Кихота".
![Click for copyable input](assets.ru/zipfs-law/In_56.png)
textEnglish = ExampleData[{"Text", "DonQuixoteIEnglish"}];
![Click for copyable input](assets.ru/zipfs-law/In_57.png)
associationEnglish = WordCounts[textEnglish];
countsEnglish = Take[Values@associationEnglish, 1000];
![Click for copyable input](assets.ru/zipfs-law/In_58.png)
Take[associationEnglish, 10]
![](assets.ru/zipfs-law/O_43.png)
И снова найденная экспонента приближена к .
![Click for copyable input](assets.ru/zipfs-law/In_59.png)
Fit[Log[Transpose[{Range[1000], countsEnglish}]], {1, x}, x]
![](assets.ru/zipfs-law/O_44.png)