У мене є вимога відфільтрувати нецензурну лексику з подань користувачів у веб-додатку на базі Java. Клієнт знає як про проблему Сканторпа, так і про проблему клібутика і прийняв наслідки. Будь ласка, я не бажаю дебатів щодо достоїнства відсутності цензури.
Є два біти даних:
- Подання користувача, яке потенційно може містити 500 слів або близько того;
- Таблиця бази даних з одним стовпцем, що містить заборонені слова. У цій таблиці може бути багато тисяч записів.
Це рішення мені здається неправильним:
- Вся таблиця завантажується в статичну String [] при запуску в Singleton (таким чином залишаючись у пам'яті).
- Для кожного подання користувача ми переходимо через масив і робимо .indexOf (), щоб побачити, чи є якесь задане слово в рядку [] у поданні.
- Якщо це з'явиться, ми замінюємо символи стилю% $ # @%. Це робиться токенізацією подання користувача, прокручуванням всього подання користувача як лексеми (знову ж таки) та заміною кожного екземпляра знайденого слова.
У цьому рішенні може бути яскравість, але я скептично ставлюсь. І дивлячись на це деякий час, я не можу знайти свій шлях повз нього.
Питання в тому, що таке рішення, яке дасть хороші показники роботи та, сподіваємось, має бути достатньо розумним для майбутніх розробників, коли вони будуть звільнені за те, що я не відфільтрував якесь незрозуміле слово, про яке я ніколи не чув?