Как стать автором
Обновить

Комментарии 5

Насколько мне известно, в большинстве русскоязычных тестировщиков скорости печати используется метрика CPM, наткнувшись на следующее видео, мне стало интересно посмотреть на свои показатели метрики WPM.

Достаточно просто поделить CPM на 5. Именно так считают WPM большинство англоязычных тренажёров, насколько я знаю.

Может ли это как-то быть связано с тем, что средняя длина слова в английском языке близка к 5? А то есть подозрение, что в других языках это соотношение может быть другим. Уж не говоря о том, что не в каждом языке легко определить, что есть "слово". Например, если используется письменность без пробелов.

Достаточно интересный вопрос.
Из соображений того, что в таких тестах обычно набираются осмысленные предложения, а не набор «очищенных» слов, выбрал такие датасеты:

ENGLISH: github.com/dwyl/english-words/blob/master/words_alpha.txt
RUSSIAN: github.com/danakt/russian-words

Результаты достаточно интересные, гистограммы для разных языков:
image

95% доверительные интервалы для средних + разницы средних:
image

Но что-то я подзабыл можно ли на таких больших выборках использовать z и t критерий (Вроде как распределение нормальное для длин слов, но все же это дискретные величины, а значит не непрерывные), на всякий пожарный проверил отдельно для бутстрэпа (результат похожий), но все равно не уверен. Код примерно такой, буду рад если в случае ошибки, кто-то меня поправит.
import pandas as pd
import matplotlib.pylab as plt
from statsmodels.stats.weightstats import *
from tqdm.notebook import tqdm


russian_pd = pd.read_csv("russian_dict.txt", header=None, sep='\n', encoding="windows-1251")
russian_pd.columns = ["WORD"]
russian_pd["LEN"] = russian_pd["WORD"].apply(lambda x: len(x) - 1 if str(x)[0] == '-' else len(x))
english_pd = pd.read_csv("english_dict.txt", header=None, sep='\n')
english_pd.columns = ["WORD"]
english_pd["LEN"] = english_pd["WORD"].apply(lambda x: len(str(x)) - 1 if str(x)[0] == '-' else len(str(x)))
plt.figure(figsize=(15,7))
plt.subplot(1,2,1)
plt.title('ENGLISH')
plt.hist(english_pd.LEN, color='blue', edgecolor='black')
plt.subplot(1,2,2)
plt.title('RUSSIAN')
plt.hist(russian_pd.LEN, color='blue', edgecolor='black')
plt.show()
print("ENGLISH [{0[0]:.4f}, {0[1]:.4f}]".format(zconfint(english_pd.LEN.values)))
print("RUSSIAN [{0[0]:.4f}, {0[1]:.4f}]".format(zconfint(russian_pd.LEN.values)))
print("MEAN 95% confidence interval [{0[0]:.4f}, {0[1]:.4f}]".format(CompareMeans(DescrStatsW(russian_pd.LEN.values), DescrStatsW(english_pd.LEN.values)).zconfint_diff()))
def get_bootstrap_interval(sample, n_samples):
    indices = np.random.randint(0, len(sample), size=(n_samples, len(sample)))
    samples = sample[indices]
    return samples

def stat_quantile(stat, alpha=.05):
    boundaries = np.percentile(stat, [100 * alpha / 2., 100 * (1 - alpha / 2.)])
    return boundaries

delta_means = list((map(lambda x: x[1] - x[0], zip(list(tqdm(map(np.mean, get_bootstrap_interval(russian_pd.LEN.values, 100)), total=100)), list(tqdm(map(np.mean, get_bootstrap_interval(english_pd.LEN.values, 100)), total=100))))))

print('Разница средних')
print(stat_quantile(delta_means))


По итогу результат примерно следующий:
Средняя длина английского слова — [9.4331, 9.4519], русского — [10.9127, 10.9224]

Спасибо, что уделили время этому вопросу!

Насчёт применимости критериев в статистике, к сожалению, моя тройка по матстату ничего не подсказывает.

Со своей стороны могу только попросить прощения, что не уточнил, что под "средней длиной" я понимал "среднюю длину слова в тексте", а не "в словаре". Текст на английском языке, выражающем многие синтактические отношения аналитически, то есть с помощью служебных слов, содержит гораздо больше коротких слов, чем текст на русском языке, выражающий те же отношения синтетически, то есть при помощи формообразования (одни причастия чего стоят, а также глагольные приставки) и словоизменения (грубо говоря, вместо предлога, выражающего дательный падеж, достаточно изменить окончание на дательный падеж).

Вспоминается классический пример, поразивший в своё время Льюиса Кэролла: русское слово "защищающихся" (средняя длина слова: 12 букв), которое он перевёл как "of those who defend themselves" (средняя длина слова: (2+5+3+6+10) / 5 = 26/5 = 5.2).

К сожалению, не могу дать более твёрдой поддержки, чем результаты поиска в гугле по запросу "average word length in English language", но и они дают ощущение консенсуса относительно оценочного значения 5 для английского языка. Для русского языка я нахожу оценочные значения от 6 до 7.

Да, это конечно же так, но по каким-то причинам, в среде компьютерных тренажёров устоялась именно константа, даже несмотря на то, что можно подсчитать среднюю длину слова в каждом отдельно взятом тексте. Видимо, для сравнимости результатов или для простоты расчётов, не знаю. В русском слова длиннее, но по-моему константа используется та же, да и метрика WPM намного менее популярна в русскоязычной среде. Это как приняли, что дюйм в CSS это 96 пикселей, и всё, живите с этим.

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории