Як підрахувати кількість зустрічей кожного слова у файлі?


6

Мені потрібна програма для підрахунку кількості слів разом із кількістю зустрічей кожного слова у файлі.

(Більшість знайдених нами прикладів підраховує лише загальну кількість слів.)


Принаймні розкажіть нам, яку ОС ви дивитесь.
випадково

Більшість того, який код?
innaM

я використовую ubuntu os. шукаючи кількість кожного слова у файлі. наприклад критик- 29 52-х, як мудрий.
Арк

Відповіді:


6

Безкоштовний онлайн-сервіс Wordcounter займає рейтинг найбільш часто використовуваних слів у будь-якому тексті тексту. Використовуйте це, щоб побачити, якими словами ви зловживаєте, або, можливо, просто, щоб знайти деякі ключові слова в документі.


16

Якщо використання командного рядка (або сценарію) нормально, є мільйон варіантів. Як і за допомогою Perl (для Windows вам потрібно буде встановити ActivePerl або Cygwin з Perl):

perl -0777 -lape's/\s+/\n/g' FILENAME | sort | uniq -c | sort -nr

Пояснення :

  • perl -0777 змушує Perl працювати над усім файлом так, ніби це був один рядок ("режим припущення").
  • 's/\s+/\n/g' змінює весь пробіл на нові рядки, таким чином: вихід Perl - це одне слово на рядок.
  • sortКоманда сортує слова в алфавітному порядку.
  • uniqКоманда усуває повторювані слова; з -cопцією він також виводить кількість подій.
  • Друга sortкоманда з -nrможливістю сортує отриманий файл чисельно у порядку зменшення.

Чому тут потрібна перл? Що було не так з кішкою FILENAME | sed s / '' / \\ n / g?
Сірекс

Тому що ваш приклад не сортує і не дає кількості зустрічань цього слова, в той час як Арджан.
AndrewKS

2
@Sirex, я думаю, ти маєш рацію: cat FILENAME | sed s/' '/\\n/g | sort | uniq -c | sort -nrможе дати ті самі результати.
Ар'ян

1
так, я мав на увазі, що решта команди ще буде потрібна. Геть perl один лайнер! :)
Сірекс

@Sirex, я не експерт. Але чому sedкраще, ніж perl? (І, можливо, опублікуйте це як відповідь?)
Арджан

5

Це дуже просто. Просто використовуйте таку команду:

sort file.txt | uniq -c | sort -r


Правильно (хоча, мабуть, sort -rі -nпрапор потрібен ), але лише якщо кожне слово знаходиться в одному рядку самого файлу. Дійсно питання щодо цього не зрозуміло.
Ар'ян

2

З командного рядка Linux:

sed s/' '/\\n/g FILENAME | sort | uniq -c | sort -nr

У Mac OS X, який використовує версію BSD sed, \nпотрібні певні магії :

sed 's/ /\'$'\n/g' FILENAME | sort | uniq -c | sort -nr 

Я думаю, що обмін стеками проковтнув один з моїх зворотних нахилів. Спробуйте це.
Сірекс

Хм, працює для мене!
Сірекс

Ах, \nможливо, знадобиться якась магія на Mac: sed 's/ /\'$'\n/g' FILENAME | sort | uniq -c | sort -nrсхоже, робити фокус у BSD, sedяк це використовується в OS X.
Арджан

(Використання 4 пробілів для відступу коду значно полегшує життя!)
Арджан

2

Командний рядок Linux (Ubuntu):

tr -cs "[:alpha:]" "[\n*]" < file1 | sort | uniq -c | sort -nr > file2

0

І MS Office, і OpenOffice мають цю особливість. Перейдіть на інструменти / кількість слів.


0

Якщо ви використовували Windows, ви можете використовувати текстовий процесор Atlantis . У ньому є безліч чудових функцій та дотиків, включаючи один, щоб привітати надмірне використання слів.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.