GNU/Linux >> Linux Esercitazione >  >> Linux

Trova N parole più frequenti in un file con un elenco di parole di arresto dalla riga di comando?

Voglio trovare le parole più frequenti in un file di testo, usando un elenco di parole non significative. Ho già questo codice:

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

da un vecchio post
ma il mio file contiene qualcosa del genere:

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

Il primo è solo uno spazio e nel testo sono segni di punteggiatura (come punti), ma non voglio questo, quindi cosa devo aggiungere?

Risposta accettata:

Considera questo file di prova:

$ cat text.txt
this file has "many" words, some
with punctuation.  some repeat,
many do not.

Per ottenere un conteggio delle parole:

$ 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

Come funziona

  • grep -oE '[[:alpha:]]+' text.txt

    Questo restituisce tutte le parole, meno eventuali spazi o segni di punteggiatura, con una parola per riga.

  • sort

    Questo ordina le parole in ordine alfabetico.

  • uniq -c

    Questo conta il numero di volte in cui si verifica ogni parola. (Per uniq per funzionare, il suo input deve essere ordinato.)

  • sort -nr

    Questo ordina l'output numericamente in modo che la parola più frequente sia in cima.

Gestione di casi misti

Considera questo file di test con casi misti:

$ cat Text.txt
This file has "many" words, some
with punctuation.  Some repeat,
many do not.

Se vogliamo contare some e Some come lo stesso:

$ 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

Qui, abbiamo aggiunto il -f opzione per sort in modo da ignorare maiuscole e minuscole e -i opzione per uniq in modo da ignorare anche le maiuscole.

Escluse le stop word

Supponiamo di voler escludere dal conteggio queste stop word:

$ cat stopwords 
with
not
has
do

Quindi, aggiungiamo grep -v per eliminare queste parole:

$ 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

Linux
  1. Copia e incolla nella riga di comando di Linux con xclip

  2. Fare clic con il pulsante destro del mouse per scaricare i sottotitoli dal file manager o dalla riga di comando con OpenSubtitlesDownload.py

  3. Come cancellare il contenuto di un file dalla riga di comando?

  4. Stampare dalla riga di comando con LibreOffice, comandi lpr?

  5. Come combinare il comando 'tar' con 'find'

Come cercare file dalla riga di comando di Linux

Come inviare un'e-mail con allegato file dalla riga di comando

Come trovare file con dozzine di criteri con il comando Trova Bash

Trova la versione di WordPress dalla riga di comando

qual è il comando più affidabile per trovare la dimensione effettiva di un file linux

Come posso aprire un file con i numeri di riga visualizzati dalla riga di comando in "vi"?