Qual é a maneira mais fácil de fazer uma lista das palavras mais comuns em uma lista?

5

Digamos que eu tenha um monte de arquivos de texto contendo ficção, não-ficção, artigos de jornal, & c (exemplos aleatórios de texto em um determinado idioma.)

Eu quero uma lista de frequência das palavras dadas, a palavra mais comum primeiro.

Eu poderia escrever algum código em C para fazer isso, mas se houver uma maneira mais rápida de fazer isso, eu gostaria de saber. (Quando digo mais rápido, quero dizer tempo de codificação, não tempo de execução).

    
por Korgan Rivera 21.01.2013 / 19:56

3 respostas

4

Para um tempo de codificação mais rápido, isto é o que eu tento com sucesso agora:

printf '%s\n' $(cat *.txt) | sort | uniq -c | sort -gr | less 
    
por 21.01.2013 / 20:02
2

Escrever em C provavelmente terá um tempo de execução rápido, mas demora mais para escrever. Um bom compromisso pode ser usar o awk:

tally.awk

FNR == NR { pat[$1] = 1; next }
{
  for(p in pat) 
    if(index($0, p)) 
      pat[p]++
} 
END { 
  for(p in pat) 
    print pat[p]-1, p
}

Isso primeiro lerá em uma lista de palavras (uma palavra por linha) e, em seguida, contará as correspondências encontradas no restante da entrada. Corra assim:

cat *.txt | awk -f tally.awk wordlist - | sort -nr

As opções acima também serão compatíveis com substrings, se você quiser corresponder palavras inteiras, substitua a linha index por:

if(match($0, "\<" p "\>"))
    
por 21.01.2013 / 20:14
1

Você pode fazer (com o GNU grep):

grep -hEo "[[:alnum:]_'-]+" ./*.txt | sort | uniq -c | sort -rn

Altere [:alnum:]_'- acima para o que deve ser constituinte das palavras.

    
por 21.01.2013 / 22:25