URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 2719
[ Назад ]

Исходное сообщение
"поиск строк"

Отправлено kazak , 26-Мрт-04 11:23 
Как можно найти в файле кол-во разных слов и их частоту?
Например:
слово1 - 10 раз
слово2 - 30 раз
...............
словоN - 55 раз

Причем заранение неизвестно кол-во разных слов.
На чем лучше реализовать - ОС Linux
Заранее благодарю!  


Содержание

Сообщения в этом обсуждении
"поиск строк"
Отправлено gt , 26-Мрт-04 11:49 
>Как можно найти в файле кол-во разных слов и их частоту?
>Например:
>слово1 - 10 раз
>слово2 - 30 раз
>...............
>словоN - 55 раз
>
>Причем заранение неизвестно кол-во разных слов.
>На чем лучше реализовать - ОС Linux
>Заранее благодарю!

perl || (shell && (awk || sed))


"поиск строк"
Отправлено kazak , 26-Мрт-04 11:54 
>Как можно найти в файле кол-во разных слов и их частоту?
>Например:
>слово1 - 10 раз
>слово2 - 30 раз
>...............
>словоN - 55 раз
>
>Причем заранение неизвестно кол-во разных слов.
>На чем лучше реализовать - ОС Linux
>Заранее благодарю!

Что такое gt и строки находить я могу. А как можно найти частоту всех разных слов?


"поиск строк"
Отправлено byx , 26-Мрт-04 14:42 
>>Как можно найти в файле кол-во разных слов и их частоту?
>>Например:
>>слово1 - 10 раз
>>слово2 - 30 раз
>>...............
>>словоN - 55 раз


#!/usr/bin/perl

while ($str = <STDIN>) {
    while ($str=~/\b(\w+)\b/g){
        $WORDS{lc($1)}++; # убрать lc(), если this и This - разные слова :)
    }
}

foreach (reverse sort {$WORDS{$a}<=>$WORDS{$b}} keys(%WORDS)){
    print "'$_' repeats $WORDS{$_} times\n";
}

вызывать -
#script.pl < infile > res


"поиск строк"
Отправлено alchie , 26-Мрт-04 14:54 
>foreach (reverse sort {$WORDS{$a}<=>$WORDS{$b}} keys(%WORDS)){

вот тут заменить <=> на cmp
ибо оно только для чисел применимо и работать правильно не будет

perl -e 'print join ",", sort {$a <=> $b} qw(sfdsf sfak sfi sfal)'

sfdsf,sfak,sfi,sfal


perl -e 'print join ",", sort {$a cmp $b} qw(sfdsf sfak sfi sfal)'

sfak,sfal,sfdsf,sfi


"поиск строк"
Отправлено byx , 26-Мрт-04 16:29 
>>foreach (reverse sort {$WORDS{$a}<=>$WORDS{$b}} keys(%WORDS)){
>
>вот тут заменить <=> на cmp
>ибо оно только для чисел применимо и работать правильно не будет
>

"А-атставить макать капитана!" (c) Дружище, я именно числа и сравниваю здесь. слова - ключи хеша, значения - кол-во попаданий. Сортировка идет по частоте употребления.



"поиск строк"
Отправлено vt , 26-Мрт-04 15:36 
>Как можно найти в файле кол-во разных слов и их частоту?
>Например:
>слово1 - 10 раз
>слово2 - 30 раз
>...............
>словоN - 55 раз
>
>Причем заранение неизвестно кол-во разных слов.
>На чем лучше реализовать - ОС Linux

IMHO: ЛУЧШЕ не на perl-e
fmt -w1 file |awk '{a[$1]++}END{for(i in a){print a[i]" "i}}' |sort -nr