Закон Ципфа

  • Автор темы Renji
  • Дата начала
R

Renji

#1
Есть закон Ципфа. Он утверждает что если отсортировать слова по их частоте появления в тексте, то позиция слова*частоту=константа. Или говоря проще, второе по популярности слово, будет встречаться вдвое реже первого. Пытаюсь проверить это простеньким скриптом на Перле. Что бы статистика была качественной, обрабатываю полное собрание сочинений Шекспира. Итоги: первым по популярности идет "the" с 27843 вхождениями в текст. Вторым - "and" с 26847 вхождениями. Результаты ничего общего с Ципфом не имеют. Судя по тому что закон Ципфа известен достаточно давно, руки кривые у меня, а не у Ципфа. Но вот в чем моя криворукость - никак понять не могу. Собственно, вопрос - где я накосячил?

Интерпретатор Перла - ActivePerl 5.14.2 Build 1402. Сам скрипт:
Код:
use utf8;
use LWP::Simple;
sub zipfTest($)
{
#чтение текста
my $url=$_[0];
print "get $url\n";
my $text=get($url);

#подсчет частоты вхождения слов
print "parse\n";
my %wordFrequency=();#ключи - слова. Значения - число вхождений слова
my @rawWordList=$text=~/[a-z]+/isg;
grep {$wordFrequency{lc $_}++} @rawWordList;
print "number of words = ",scalar(@rawWordList),"\n";

#сортировка слов по частоте
my @wordList=keys(%wordFrequency);
@wordList=sort {$wordFrequency{$b} <=> $wordFrequency{$a}} @wordList;

#вывод результатов
print "result\n";
for(my $i=0;$i<10;++$i)
{
$word=$wordList[$i];
#слово
#частота появления слова
print "$word ",$wordFrequency{$word},"\n";
}
}
zipfTest('http://www.gutenberg.org/cache/epub/100/pg100.txt');
print "done\n";
<>;
 
S

seevi

#2
Написал скрипт по-своему, получил тот же результат. Наверно, выборка слишком мала: на википедии по вашей ссылке пик приходится на 275000 вхождений, а тут только 20000