Lea un archivo de texto en Javascript y cuente la cantidad de veces que aparece cada palabra.
Estoy dejando esta respuesta aquí porque me llevó más de una hora resolverla y espero poder ayudar a cualquiera que esté buscando una respuesta similar.
La pregunta tiene varias partes que se responden en publicaciones separadas de SO:
- Leer un archivo de texto en javascript
- Analizar el texto para obtener una cadena delimitada por espacios, excluyendo caracteres especiales, pestañas, nuevas líneas, etc.
- Contar el número de cada palabra
- Mostrar una lista en orden descendente.
davy.ai
Leyendo un archivo de texto en JavaScript
Para leer un archivo de texto en JavaScript, podemos utilizar el objeto
FileReader
. Primero, necesitamos crear un elemento de entrada y adjuntar un eventoonchange
a él:En la función
onFileSelected
, podemos obtener el archivo seleccionado y crear un objetoFileReader
:El método
readAsText
ordena al objetoFileReader
leer el archivo como texto. El métodoonload
se llama cuando el archivo se ha cargado, y la propiedadresult
del objetoFileReader
contiene el contenido del archivo.Analizando el texto
Una vez que tengamos el contenido del archivo, podemos analizarlo para obtener una cadena delimitada por espacios y excluir caracteres especiales, tabuladores, saltos de línea, etc. Podemos utilizar expresiones regulares para esto:
El primer método
replace
elimina todos los caracteres que no sean palabras ni espacios, y el segundo métodoreplace
reemplaza todos los caracteres de salto de línea con espacios. El métodotoLowerCase
convierte todos los caracteres en minúsculas.Contando las palabras
Para contar el número de cada palabra, podemos crear un objeto donde las claves sean las palabras y los valores sean el número de veces que aparece la palabra en el texto:
Primero dividimos la cadena
cleanContent
en un arreglo de palabras. Luego recorremos las palabras y o bien incrementamos el recuento para una palabra existente o agregamos un nuevo par clave-valor para una nueva palabra.Mostrando la lista en orden descendente
Para mostrar la lista en orden descendente, podemos ordenar las claves por sus valores:
Primero obtenemos las claves del objeto
wordCount
utilizando el métodoObject.keys
. Luego ordenamos las claves por sus valores utilizando una función de ordenamiento personalizada que devuelve la diferencia entre los valores de las dos claves. Finalmente, recorremos las claves ordenadas y mostramos la palabra y su recuento.En general, el código se ve así:
Este código lee un archivo de texto, lo limpia, cuenta las palabras y muestra la lista en orden descendente.