The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  ВХОД  слежка  RSS
"поиск строк"
Вариант для распечатки Архивированная нить - только для чтения! 
Пред. тема | След. тема 
Форумы Программирование под UNIX (Public)
Изначальное сообщение [Проследить за развитием треда]

"поиск строк"
Сообщение от kazak Искать по авторуВ закладки on 26-Мрт-04, 11:23  (MSK)
Как можно найти в файле кол-во разных слов и их частоту?
Например:
слово1 - 10 раз
слово2 - 30 раз
...............
словоN - 55 раз

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

  Рекомендовать в FAQ | Cообщить модератору | Наверх

 Оглавление

Индекс форумов | Темы | Пред. тема | След. тема
Сообщения по теме

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

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

  Рекомендовать в FAQ | Cообщить модератору | Наверх

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

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

  Рекомендовать в FAQ | Cообщить модератору | Наверх

3. "поиск строк"
Сообщение от byx emailИскать по авторуВ закладки on 26-Мрт-04, 14:42  (MSK)
>>Как можно найти в файле кол-во разных слов и их частоту?
>>Например:
>>слово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

  Рекомендовать в FAQ | Cообщить модератору | Наверх

4. "поиск строк"
Сообщение от alchie Искать по авторуВ закладки on 26-Мрт-04, 14:54  (MSK)
>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

  Рекомендовать в FAQ | Cообщить модератору | Наверх

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

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


  Рекомендовать в FAQ | Cообщить модератору | Наверх

5. "поиск строк"
Сообщение от vt Искать по авторуВ закладки on 26-Мрт-04, 15:36  (MSK)
>Как можно найти в файле кол-во разных слов и их частоту?
>Например:
>слово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

  Рекомендовать в FAQ | Cообщить модератору | Наверх


Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Пожалуйста, прежде чем написать сообщение, ознакомьтесь с данными рекомендациями.




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2025 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру