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

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


0

2

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

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

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

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

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

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

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



Последнее исправление: Windos7 (всего исправлений: 5)

Вариант:

#!/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
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.