En productos digitales con alto volumen de usuarios como juegos, plataformas sociales o marketplaces la moderación automática de texto es un requisito crítico para la experiencia y el cumplimiento. En este artículo exploramos cómo el algoritmo Aho-Corasick, implementado en Go, permite detectar palabras prohibidas de forma eficiente y escalable, resolviendo las limitaciones de rendimiento de los enfoques tradicionales basados en búsquedas secuenciales.

En entornos digitales donde los usuarios generan contenido constantemente nombres, comentarios, mensajes o formularios la detección de palabras prohibidas (NG words) es clave para garantizar cumplimiento, seguridad y una experiencia consistente. Desde una perspectiva de producto y plataforma, este problema no solo es funcional, sino también operativo: debe resolverse en tiempo real y sin degradar el rendimiento del sistema. Este blog presenta una solución basada en el algoritmo Aho-Corasick, utilizada para optimizar la detección de palabras prohibidas en un sistema real, mostrando cómo pasar de una implementación simple pero costosa a una arquitectura eficiente y preparada para escalar.
Una implementación básica de detección de palabras prohibidas suele recorrer toda la lista de términos bloqueados y verificar si alguno aparece en el texto de entrada.

Aunque este enfoque es fácil de implementar, su complejidad en el peor caso es:
En sistemas con alto tráfico o listas extensas, este enfoque se vuelve inviable desde el punto de vista de rendimiento.

El algoritmo Aho-Corasick permite buscar múltiples patrones simultáneamente en un texto, con una complejidad de búsqueda O(n), independientemente del número de palabras prohibidas.
Todas las palabras de la lista prohibida y permitida se almacenan en una estructura tipo Trie, compartiendo prefijos comunes para reducir redundancia.
Cada nodo del Trie define una transición alternativa que permite continuar la búsqueda cuando no hay coincidencia directa, evitando retrocesos innecesarios y manteniendo el flujo lineal.
El texto se recorre carácter por carácter. El Trie y las transiciones de fallo permiten detectar coincidencias completas sin reiniciar el análisis.
La implementación utiliza una estructura de nodos que mantiene:
Durante la inicialización del servicio:

Durante la ejecución:
Desde una perspectiva Meetlabs, este enfoque aporta:
Consistencia: reglas claras incluso con excepciones

El uso del algoritmo Aho-Corasick para la detección de palabras prohibidas permite transformar un problema aparentemente simple en una solución robusta, eficiente y preparada para escalar. Al mover la complejidad al momento de inicialización y mantener búsquedas en tiempo lineal, es posible garantizar moderación en tiempo real sin comprometer el rendimiento del sistema ni la experiencia del usuario.