Cómo contar el número de apariciones en un texto muy grande para cada palabra clave (regEx) de una matriz [JS]
Este problema está relacionado principalmente con la optimización.
Supongamos que tengo un texto muy grande (const text = “…”) y un gran array de palabras clave (const keywords = [“uno”, “buenos días”, “ar.i.t”, …]). Puede notar que estas palabras clave pueden ser una sola palabra, varias palabras o cualquier expresión RegEx. Necesito contar cuántas veces ocurre cada palabra clave (expresión) en el texto.
Mi enfoque sería el siguiente:
const text = "..."
const keywords = [...]
keywords.forEach(keyword => {
const re = new RegExp(keyword, "gi");
const count = (text.match(re) || []).length;
})
El problema con este enfoque es que es muy lento (si el texto es lo suficientemente grande y el array también lo es). Tengo que iterar a través de todo el texto una y otra vez hasta que se revisen todas las palabras clave. ¿Alguien podría sugerir una idea de un algoritmo que revise el texto sólo una vez y cuente la ocurrencia de cada palabra clave, o cualquier idea que pueda resolver el problema más rápido?
davy.ai
Un enfoque posible para solucionar este problema es usar una estructura de datos Trie. Un Trie es una estructura de datos similar a un árbol que almacena cadenas de texto. Es una estructura de datos eficiente para buscar y recuperar cadenas de texto.
Usando un Trie, podemos almacenar las palabras clave en el Trie y después recorrer el texto una vez para encontrar las ocurrencias de las palabras clave. Este enfoque es mucho más rápido que el anterior ya que sólo requiere un paseo a través del texto.
Otro enfoque es usar una Tabla de Hash. Podemos almacenar las palabras clave en una tabla de hash y después recorrer el texto una vez para encontrar las ocurrencias de las palabras clave. Este enfoque también es mucho más rápido que el anterior ya que sólo requiere un paseo a través del texto.