Шаблон проектирования для блокирования нежелательного контента

в прошлом году я работал над Рождественским проектом, который позволил клиентам отправлять электронные письма друг другу с 256-символьным текстовым полем для их Рождественского запроса. Проект работал путем поиска (очень большой) базы данных продукта для предлагаемых продуктов, которые соответствуют текстовому полю, но предложили вариант свободного текста для тех клиентов, которые не смогли найти соответствующий продукт.

одной из очевидных проблем была возможность для клиентов отправлять довольно явные запросы в какой-то ничего не подозревающий клиент с брендом компании сидит вокруг него.

проект не пошел вперед, в конце концов, по разным причинам, профанация аспект является одним из.

тем не менее, я вернулся к размышлениям о проекте и задаюсь вопросом, какие виды проверки могут быть использованы здесь. Я в курсе clbuttic который, я знаю, является стандартный ответ к любому вопросу такого рода.

решения, которые я считал были:

  • запустите его через что-то вроде WebPurify
  • Используйте MechanicalTurk
  • написать шаблон регулярного выражения, который ищет слово в списке. Более сложная версия этого будет рассматривать множественное число и прошлые времена слова, а также.
  • написать массив подозрительных слов, и оценка каждого из них. Если подача идет выше балла, проверка не выполняется.

и два вопросы:

  1. если представление не удается, как вы обрабатываете его с точки зрения пользовательского интерфейса?
  2. каковы плюсы и минусы этих решений, или любые другие, которые вы можете предложить?

NB-ответы, такие как" фильтры ненормативной лексики-зло", не имеют значения. В этой полу-гипотетической ситуации я не решил внедрить фильтр ненормативной лексики или мне не дали выбор, следует ли его внедрять. Я просто должен сделать все, что в моих силах. навыки программирования (которые должны быть на стеке лампы, если это возможно).

3 ответов


вы думали о байесовской фильтрации? Байесовская фильтрация предназначена не только для обнаружения спама. Вы можете обучить их различным задачам распознавания текста. Возьмите байесовский фильтр, соберите кучу текстов запросов и начните отмечать их как содержащие ненормативную лексику или нет. Через некоторое время (сколько времени зависит от количества и типа данных обучения) ваш фильтр сможет обнаруживать запросы, содержащие ненормативную лексику, от тех, которые не содержат ненормативной лексики.

Это не дурак-доказательство, но это намного, намного лучше, чем простое сопоставление строк и попытка справиться с clbuttic проблемы. У вас есть множество возможностей для байесовской фильтрации в PHP.

bogofilter

Bogofilter-это автономный байесовский фильтр, который работает на любой ОС unix-Y. Он предназначен для фильтрации электронной почты, но вы можете обучить его любому тексту. Я успешно использовал это для реализации пользовательского спам-фильтра комментариев для моего собственного веб-сайта (источник). Вы можете взаимодействовать с bogofilter, как и с любым другим приложением командной строки. См. ссылку мой исходный код для примера.

свернуть свой собственный

Если вам нравится задача, вы можете реализовать байесовский фильтр полностью с нуля. вот приличная статья о реализации байесовского фильтра в PHP.

существующий PHP библиотеки

(Ab) использовать существующий фильтр электронной почты

вы можете использовать стандартную установку SpamAssassin или DSpam и обучить ее распознавать ненормативную лексику. Просто убедитесь, что вы отключили параметры, специально предназначенные для сообщений электронной почты (например, разбор блоков mime, чтение заголовков), и просто включите параметры, которые касаются обработки текста baysian. DSpam может быть проще адаптировать. SpamAssassin имеет то преимущество, что вы можете добавить пользовательские правила поверх байесовского фильтра. Для SpamAssassin убедитесь, что вы отключили все правила по умолчанию и написали свои собственные правила. Все правила по умолчанию предназначены для обнаружения нежелательной почты.


в прошлом я использовал прославленную форму str_replace. Вот мое обоснование:--2-->

  1. нечестивые слова могут быть заменены глупыми словами, передающими первоначальную точку сообщения, но препятствующими использованию ненормативной лексики
  2. на успешных постах, где произошла фильтрация, пользователям было показано сообщение об успехе, но было уведомление о том, что произошла дезинфекция (что-то вроде: "ваш пост был добавлен, горшок рот.")
  3. Я никогда не wan подчинение не. Сообщения размещались без цензуры или цензуры. В вашем случае вы можете полностью запретить нечестивые сообщения.

для чего это стоит, Apple только недавно прекратила запрещать нецензурные выражения в своих бесплатных лазерных гравюрах. Возможно, у них есть разумное объяснение?


Как насчет использования нескольких правил сопоставления строк и вставления только тех, которые находятся в очереди модерации?

похоже, что многие запросы не могут использовать свободное текстовое поле, поэтому они должны безопасно проходить.

тогда, только небольшой процент ваших совпадений в меру. Даже с большим userbase это должно держать время умеренности к минимуму. Вы даже можете сделать очевидную ненормативную лексику, такую как F или n word automatic не может сократить оставшийся список еще ниже.

сделайте свою страницу модерации простой в использовании и выделите слова, которые помечали сообщения, и это должно сделать быстрый процесс сканирования и очистки. Отрегулируйте по мере необходимости, если люди пытаются разместить слишком много мусора или если слишком много ложных срабатываний.

или просто используйте эту стратегию с фильтрацией baysian, как предложил @Sander.

Edit: также кнопка "Сообщить о злоупотреблении" поможет вам узнать, проходят ли плохие вещи, но это предполагает сохранение отправленных сообщений и это может быть не идеально, если это будет очень активный.