1. Набираем команду codeby webinar. Набираем команду для организации и проведения вебинаров. Подробнее ...

    Скрыть объявление
  2. Требуются разработчики и тестеры для проекта codebyOS. Требования для участия в проекте: Знание принципов работы ОС на базе Linux; Знание Bash; Крайне желательное знание CPP, Python, Lua; Навыки системного администрирования. Подробнее ...

    Скрыть объявление
  3. Получи 30.000 рублей. Для получения денег необходимо принять участие в конкурсе авторов codeby. С условиями и призами можно ознакомиться на этой странице ...

    Внимание! Регистрация авторов на конкурс закрыта.

    Скрыть объявление

Закон Ципфа

Тема в разделе "Web - программирование", создана пользователем Renji, 7 фев 2012.

  1. Renji

    Renji Гость

    Репутация:
    0
    Есть закон Ципфа. Он утверждает что если отсортировать слова по их частоте появления в тексте, то позиция слова*частоту=константа. Или говоря проще, второе по популярности слово, будет встречаться вдвое реже первого. Пытаюсь проверить это простеньким скриптом на Перле. Что бы статистика была качественной, обрабатываю полное собрание сочинений Шекспира. Итоги: первым по популярности идет "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";
    <>;
     
  2. seevi

    seevi Гость

    Репутация:
    0
    Написал скрипт по-своему, получил тот же результат. Наверно, выборка слишком мала: на википедии по вашей ссылке пик приходится на 275000 вхождений, а тут только 20000
     
Загрузка...
Похожие Темы - Закон Ципфа
  1. faraun
    Ответов:
    0
    Просмотров:
    1.863

Поделиться этой страницей