Tengo un requisito para filtrar las malas palabras de los envíos de los usuarios en una aplicación web basada en Java. El cliente conoce tanto el problema de Scunthorpe como el problema de Clbuttic y ha aceptado las consecuencias. Por favor, no deseo un debate sobre los méritos de la falta de censura.
Hay dos bits de datos:
- El envío del usuario, que potencialmente puede contener aproximadamente 500 palabras;
- Una tabla de base de datos de una sola columna que contiene palabras que no están permitidas. Puede haber muchos miles de registros en esta tabla.
La solución actual me parece incorrecta:
- La tabla completa se carga en una cadena estática [] al inicio en un Singleton (por lo tanto, reside en la memoria).
- Para cada envío de usuario, recorremos la matriz y hacemos un .indexOf () para ver si alguna palabra dada en la Cadena [] aparece en el envío.
- Si aparece, lo reemplazamos con% $ # @% - caracteres de estilo. Esto se realiza mediante la tokenización del envío del usuario, recorriendo todo el envío del usuario como tokens (nuevamente) y reemplazando cada instancia de la palabra encontrada.
Puede haber brillo en esta solución, pero soy escéptico. Y después de haberlo mirado por un tiempo, no puedo encontrar mi camino más allá.
La pregunta es, ¿cuál es una solución que proporcionará un buen rendimiento y esperamos que sea razonablemente razonable que los futuros desarrolladores mantengan después de que me despidan por no filtrar alguna palabra oscura de la que nunca he oído hablar?