Дизайн шаблона для блокировки нежелательного контента - PullRequest
6 голосов
/ 25 апреля 2011

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

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

В конце концов, проект не был запущен по разным причинам, причем ненормативная лексика была одной.

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

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

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

Итак, есть два вопроса :

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

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

Ответы [ 3 ]

6 голосов
/ 28 апреля 2011

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

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

bogofilter

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

Сверните свой собственный

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

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

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

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

0 голосов
/ 28 апреля 2011

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

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

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

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

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

Редактировать: также a "Кнопка «Сообщить о нарушении» поможет вам выяснить, справляется ли плохой материал, но это может потребовать сохранения отправленных сообщений на некоторое время, и это может быть не идеально, если это будет очень активно.

0 голосов
/ 25 апреля 2011

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

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

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

...