Задание на проверку закона Ципфа
Возьмите длинный текст на русском языке. С помощью NLTK токенизируйте его (word_tokenize
) и используйте FreqDist
для вычисления частотного словаря.
- Нарисуйте график зависимости частоты слова от его ранка ( порядкового номера слова в частотном словаре, где слова упорядочены по убыванию частоты). Должен получиться рисунок, похожий на гиперболу.
- Нарисуйте график логарифма частоты от логарифма ранка. Должен получиться рисунок, похожий на прямую, наклоненную на $-45^\circ$.
- Нарисуйте еще один такой же график, но при условии, что перед вычислением частот слова были приведены к начальной форме с помощью
pymorphy2
. В случае, еслиpymorphy2
предлагает несколько начальных форм, выберите первую. - Постройте линию регрессии логарифма частоты от логарифма ранка. Для этого сделайте следующее:
# импортируем numpy import numpy as np # Импортируем класс LinearRegression из библиотеки scikit-learn from sklearn.linear_model import LinearRegression # допустим, нам нужно подобрать k и b для y = kX + b + error # вводим значения X и y X = np.array([1, 2, 3, 4, 5, 6]) y = np.array([3, 5, 7, 9, 11, 13]) # запускаем алгоритм поиска k, b. Обратите внимание на # X.reshape(-1,1) это превращает матрицу-строку в матрицу-столбец. reg = LinearRegression().fit(X.reshape(-1,1), y) # и вот так можно достать значения k и b из reg: print("k = ", reg.coef_) print("b = ", reg.intercept_)
Выведите коэффициент `$\alpha$, как он был обозначен в конспекте, сравните его с 1.