LINUX.ORG.RU
решено ФорумAdmin

[нужен скрипт] подсчет количества слов


0

2

помогите, в скриптах не сильно селен, есть подозрение что в awk это будет сделано в 2 команды, ну всеже:

ест текстовый файл (несколько слов в одной строке, а строк много), нужно скормить его скрипту, чтобы он вывел в виде таблицы слово - количество вхождений

///Упс, немного забыл, строка может содержат группу символов, «&&», так вот, считать слова можно только в тех строки что их содержат, и только после последнего вхождения && в строку

///знаки препинания перед подсчетом надо заменить наверное на пробдеы, чтобы не вносили «погрешность», ну или добавть аргументы к sed ))

/// да еше, прописные буквы заменить на строчные, перед подсчетом

для чего нужно (чтобы понять постановку задачи)

задача проста, есть файлы СУБТИТРОВ, на инглише, пытаюсь смотреть с ними, так вот, чтобы не сильно часто ерзать в словарь (конешно да я понимаю что значение слова зависит от контекста) - перед просмотром, хочу получить список вхождения слов, но отсортированный и без дубликатов, чтобы ВНЕЗАПНО не уловить сюжет

Вариант:

#!/bin/awk -f

BEGIN {
  FS = "[^А-Яа-я]+"
}
{
  for( i = 1; i <= NF; i++ )
    table[$i]++
}
END {
  delete table[""]
  for (w in table )
    print table[w], w
}

Подходит?

OldFatMan ()
Ответ на: комментарий от OldFatMan

Дополнение

Пардон, это у меня скриптик для обработки исключительно русскоязычных текстов был. Для универсальности можно разделители записать, как

FS = «[^A-Za-zА-Яа-я]+»

Тогда и не только русские слова считаться будут.

OldFatMan ()

какое ещё слово? о_О

последовательность символов, разделённых пробелами? другими разделителями, типа точки, запятой итп? слова только латиницей? минус (дефис) входит в слово? переносы учитывать? или любой язык? азиатские языки тоже на слова парсить?

arsi ★★★★★ ()
Ответ на: комментарий от arsi

слова - латиница/кирилица, считать можно только в тех строках что содержат символы «&&», и только после последнего их вхождения,

да, про знаки припоминания не подумал, знаки припоминания по идее просто заменить, на пробелы перед подсчетом, чтобы не вносили дисболанс

Windos7 ()
Ответ на: комментарий от Windos7

%$#&@, чтоб я ещё кому что-нибудь стал подсказывать до тех пор, пока условие задачи не будет полностью сформулировано!!!... ;)

«В правильно сформулированном вопросе содержится больше половины ответа» (с)

OldFatMan ()
Ответ на: комментарий от anonymous

> если б он сформулировал задачу так, он бы и решение написал без тебя

конечно, ведь в правильно сформулированной задаче содержится овер 95% ответа на неё ;)

arsi ★★★★★ ()
Ответ на: комментарий от OldFatMan

да ладно Вам,

уже почти работает

cat test | sed -r 's/[[:space:],.]+/\n/g' | sort | uniq -c

осталось «прикрутить», чтобы работало, только после «определенных» символов, допустим после «&&»

Windos7 ()
Ответ на: комментарий от arsi

ок!

задача проста, есть файлы СУБТИТРОВ, на инглише, пытаюсь смотреть с ними, так вот, чтобы не сильно часто ерзать в словарь (конешно да я понимаю что значение слова зависит от контекста) - перед просмотром, хочу получить список вхождения слов, но отсортированный и без дубликатов, чтобы ВНЕЗАПНО не уловить сюжет

Windos7 ()
Ответ на: ок! от Windos7

выложи уже пример файла и не имей людям мозг

silw ★★★★★ ()
Ответ на: комментарий от arsi

блин… в смысле…

perl -ne '(split"&&")[-1]=~/[^\s,.]+/&&++$t{$&}}{print"$_\t$t{$_}\n"for keys%t'

зы: что ещё за «0x1 is not a legal XML character» и почему оно кушает мои «$&»? >_<"

arsi ★★★★★ ()
Ответ на: комментарий от arsi

(страшно!)
хотфикс: в первом случае
блин… в смысле…

Сферический разработчик на PERL™ в вакууме.

anonymous ()
Ответ на: комментарий от anTaRes

а, ну да никак не могу заставить себя читать еще и постановку задачи а не только заголовок
ответ на «[нужен скрипт] подсчет количества уникальных слов» был бы другой :)

anTaRes ★★★★ ()

нужно скормить его скрипту, чтобы он вывел в виде таблицы слово - количество вхождений

ответ:

 #!/bin/bash
 # Usage: wordcount.sh file_with_word_list file_with_text

 for word in `cat $1`
 do 
      echo $word': '`grep -wio "$word" "$2" | wc -l`
  done
alius-miles ()
Ответ на: комментарий от uzbl

Точно!

cat test | sed -rn '/.+&&(.+)/{s//\1/;s/[[:space:][:punct:]]+/\n/g;p}' | sort | uniq -c

Windos7 ()
Ответ на: комментарий от anonymous

grep -c считает количество только строк и два слова в одной строке считает за одно.

и таки да, аффтару нужно не это, но anTaRes прав, вопрос надо лучше формулировать.

alius-miles ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.