localize n as palavras mais frequentes em um arquivo com uma lista de palavras de parada na linha de comando

2

Eu quero encontrar as palavras mais frequentes em um arquivo de texto, usando uma lista de palavras de parada. Eu já tenho este código:

tr -c '[:alnum:]' '[\n*]' < test.txt |
fgrep -v -w -f /usr/share/groff/current/eign |
sort | uniq -c | sort -nr | head  -10 > test.txt

de um antigo post mas meu arquivo contém algo assim:

240 
 21 ipsum
 20 Lorem
 11 Textes
 9 Blindtexte
 7 Text
 5 F
 5 Blindtext
 4 Texte
 4 Buchstaben

O primeiro é apenas um Espaço e no texto são sinais de pontuação (como pontos), mas eu não quero isso, então o que eu tenho que adicionar?

    
por Jasta 15.10.2016 / 07:57

2 respostas

3

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
    
por 15.10.2016 / 08:12
0

Comando:

cat text.txt | tr ' ' '\n' | grep -v 'words\|word2' | sort | uniq -c | sort -nk1

Como isso funciona

A seguir está o conteúdo do arquivo

$ cat file.txt

Lorem Ipsum é simplesmente texto fictício da indústria tipográfica e de impressão. Lorem Ipsum tem sido o texto fictício padrão da indústria desde os anos 1500, quando uma impressora desconhecida pegou uma galé do tipo e subiu para fazer um livro de espécimes de tipo.

$ cat file.txt|tr ' ' '\n'| grep -v -w 'an\|a\|is'| sort| uniq -c| sort -nk1|tail
      1 unknown
      1 when
      2 and
      2 dummy
      2 Ipsum
      2 Lorem
      2 of
      2 text
      2 type
      3 the

Descrição : Traduza o espaço com uma nova linha e, a seguir, descreva as palavras da lista, depois classifique-as e conte para as mais usadas.

    
por 15.10.2016 / 13:35