Язык Wolfram Language

Обработка текста и языка

Закон Ципфа

Закон Ципфа утверждает, что при рассмотрении всего состава языка частота слова обратно пропорциональна его порядковому номеру в полном списке слов, упорядоченному по убыванию частоты их использования. Данный пример демонстрирует закон для набора слов из романа Мигеля Сервантеса "Дон Кихот" с использованием новыx функций WordCount и WordCounts.

ExampleData содержит текст первого тома "Дон Кихота" на испанском языке.

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

Представленный здесь пример содержит более 180000 слов.

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

Подсчёты частоты употребления каждого определённого слова представлены в качестве ассоциации от WordCounts. Результат отсортирован по убыванию.

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

Получите подсчёт частоты употребления 1000 наиболее распространённых слов.

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

Для нахождения приблизительных подсчётов с помощью степенного закона используйте логарифмы в линейной согласованности. Закон Ципфа утверждает, что экспонента должна быть приблизительно равна , а результат должен быть близким этому значению.

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

Визуализируйте согласованность с фактическими данными.

код на языке 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]=

Закон Ципфа имеет силу в любом языке, поэтому данные вычисления возможны и с англоязычной версией "Дон Кихота".

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

И снова найденная экспонента приближена к .

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

Родственные примеры

de en es fr ja ko pt-br zh