У меня есть требование отфильтровать ненормативную лексику по представлениям пользователей в веб-приложении на основе Java. Клиент знает как о проблеме Сканторпа, так и о проблеме Clbuttic и принял последствия. Пожалуйста, я не желаю спорить о достоинствах отсутствия цензуры.
Есть два бита данных:
- Представление пользователя, которое может содержать 500 слов или около того;
- Таблица базы данных с одним столбцом, содержащая запрещенные слова. В этой таблице может быть много тысяч записей.
Настоящее решение кажется мне неправильным:
- Вся таблица загружается в статическую строку [] при запуске в синглтоне (таким образом, находится в памяти).
- Для каждой пользовательской отправки мы выполняем цикл по массиву и выполняем .indexOf (), чтобы увидеть, появляется ли какое-либо данное слово в строке [] в отправке.
- Если он появится, мы заменим его символами в стиле% $ # @%. Это делается путем токенизации пользовательской отправки, повторения всей пользовательской отправки в виде токенов (снова) и замены каждого экземпляра найденного слова.
В этом решении может быть блеск, но я настроен скептически. И, посмотрев на это какое-то время, я не могу найти дорогу.
Вопрос в том, что такое решение, которое даст хорошую производительность и, будем надеяться, будет разумным для будущих разработчиков поддерживать после того, как меня уволят за неспособность отфильтровать какое-то неясное слово, о котором я никогда не слышал?