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