GNU/Linux >> Tutoriales Linux >  >> Linux

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

Quiero encontrar, digamos, las 10 palabras más comunes en un archivo de texto. En primer lugar, la solución debe optimizarse para las pulsaciones de teclas (en otras palabras, mi tiempo). En segundo lugar, por el rendimiento. Esto es lo que tengo hasta ahora para llegar al top 10:

cat test.txt | tr -c '[:alnum:]' '[n*]' | uniq -c | sort -nr | head  -10
  6 k
  2 g
  2 e
  2 a
  1 r
  1 k22
  1 k
  1 f
  1 eeeeeeeeeeeeeeeeeeeee
  1 d

Podría hacer un programa java, python, etc. donde almacenar (palabra, número de ocurrencias) en un diccionario y ordenar el valor o podría usar MapReduce, pero optimizo las pulsaciones de teclas.

¿Hay falsos positivos? ¿Hay una mejor manera?

Respuesta aceptada:

Esa es prácticamente la forma más común de encontrar "N cosas más comunes", excepto que te falta un sort , y tienes un cat gratis :

tr -c '[:alnum:]' '[n*]' < test.txt | sort | uniq -c | sort -nr | head  -10

Si no pones un sort antes de uniq -c probablemente obtendrá muchas palabras únicas falsas. uniq solo hace series únicas de líneas, no unicidad general.

EDITAR: Olvidé un truco, "palabras de parada". Si estás viendo texto en inglés (lo siento, monolingüe norteamericano aquí), palabras como "de", "y", "el" casi siempre ocupan los dos o tres primeros lugares. Probablemente quieras eliminarlos. La distribución GNU Groff tiene un archivo llamado eign en él que contiene una lista bastante decente de palabras vacías. Mi distribución Arch tiene /usr/share/groff/current/eign , pero creo que también he visto /usr/share/dict/eign o /usr/dict/eign en Unixes antiguos.

Puede usar palabras vacías como esta:

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

Supongo que la mayoría de los idiomas humanos necesitan que se eliminen "palabras vacías" similares de los recuentos de frecuencia de palabras significativas, pero no sé dónde sugerir que se obtengan listas de palabras vacías en otros idiomas.

EDITAR: fgrep debe usar -w comando, que permite la coincidencia de palabras completas. Esto evita falsos positivos en palabras que simplemente contienen palabras breves, como "a" o "i".


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

  2. ¿Buscar el archivo de registro de Firefox?

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

  4. Obtenga el archivo más reciente en un directorio en Linux

  5. Cambiar recursivamente las extensiones de archivo en Bash

Cómo encontrar una cadena en un archivo en Linux

Encuentra archivos perdidos con Scalpel

Permisos de Linux:cómo encontrar los permisos de un archivo

¿Cómo encontrar palabras de un archivo en otro archivo?

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

¿Por qué es tan difícil encontrar un archivo en Ubuntu?