GNU/Linux >> Tutoriales Linux >  >> Linux

¿Encontrar las N palabras más frecuentes en un archivo con una lista de palabras vacías desde la línea de comandos?

Quiero encontrar las palabras más frecuentes en un archivo de texto, usando una lista de palabras vacías. Ya tengo 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 una publicación antigua
pero mi archivo contiene algo como esto:

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

El primero es solo un espacio y en el texto son signos de puntuación (como puntos), pero no quiero esto, entonces, ¿qué tengo que agregar?

Respuesta aceptada:

Considere este archivo de prueba:

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

Para obtener un recuento de palabras:

$ 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

Cómo funciona

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

    Esto devuelve todas las palabras, menos los espacios o la puntuación, con una palabra por línea.

  • sort

    Esto ordena las palabras en orden alfabético.

  • uniq -c

    Esto cuenta el número de veces que aparece cada palabra. (Para uniq para funcionar, su entrada debe ser ordenada.)

  • sort -nr

    Esto ordena la salida numéricamente para que la palabra más frecuente esté en la parte superior.

Manejo de casos mixtos

Considere este archivo de prueba de casos mixtos:

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

Si queremos contar some y Some como lo mismo:

$ 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

Aquí, agregamos el -f opción para sort para que ignore mayúsculas y minúsculas y -i opción a uniq para que también ignore el caso.

Excluyendo palabras vacías

Supongamos que queremos excluir estas palabras vacías del recuento:

$ cat stopwords 
with
not
has
do

Entonces, agregamos grep -v para eliminar estas palabras:

$ 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. Uso de Google Drive desde la línea de comandos de Linux

  2. ¿Encontrar las N palabras más frecuentes en un archivo?

  3. ¿Cómo encontrar la palabra más frecuente en un archivo .csv, ignorando los duplicados en cada línea?

  4. Haga clic derecho para descargar subtítulos desde el administrador de archivos o la línea de comandos con OpenSubtitlesDownload.py

  5. ¿Cómo borrar el contenido de un archivo desde la línea de comando?

Copie y pegue en la línea de comandos de Linux con xclip

Cómo buscar archivos desde la línea de comandos de Linux

Cómo enviar un correo electrónico con un archivo adjunto desde la línea de comandos

Cómo encontrar archivos con docenas de criterios con el comando Bash Find

¿Cuál es el comando más confiable para encontrar el tamaño real de un archivo de Linux?

¿Cómo puedo abrir un archivo con números de línea que se muestran desde la línea de comando en 'vi'?