Considere este arquivo de teste:
$ cat text.txt
this file has "many" words, some
with punctuation. some repeat,
many do not.
Para obter uma contagem de palavras:
$ grep -oE '[[:alpha:]]+' text.txt | sort | uniq -c | sort -nr
2 some
2 many
1 words
1 with
1 this
1 repeat
1 punctuation
1 not
1 has
1 file
1 do
Como funciona
-
grep -oE '[[:alpha:]]+' text.txt
Isso retorna todas as palavras, menos espaços ou pontuação, com uma palavra por linha.
-
sort
Isso classifica as palavras em ordem alfabética.
-
uniq -c
Isso conta o número de vezes que cada palavra ocorre. (Para que
uniq
funcione, sua entrada deve ser classificada.) -
sort -nr
Isso classifica a saída numericamente para que a palavra mais frequente esteja no topo.
Como lidar com casos mistos
Considere este arquivo de teste de casos mistos:
$ cat Text.txt
This file has "many" words, some
with punctuation. Some repeat,
many do not.
Se quisermos contar some
e Some
da mesma forma:
$ grep -oE '[[:alpha:]]+' Text.txt | sort -f | uniq -ic | sort -nr
2 some
2 many
1 words
1 with
1 This
1 repeat
1 punctuation
1 not
1 has
1 file
1 do
Aqui, adicionamos a opção -f
a sort
para que ela ignore o caso e a opção -i
para uniq
, para que também ignore o caso.
Excluindo palavras irrelevantes
Suponha que queremos excluir essas palavras de parada da contagem:
$ cat stopwords
with
not
has
do
Então, adicionamos grep -v
para eliminar estas palavras:
$ grep -oE '[[:alpha:]]+' Text.txt | grep -vwFf stopwords | sort -f | uniq -ic | sort -nr
2 some
2 many
1 words
1 This
1 repeat
1 punctuation
1 file