Заблокированные слова, проверяющие алгоритм - PullRequest
1 голос
/ 09 февраля 2012

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

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

Я использую AS3, но ответ на большинстве языков, вероятно, будет полезен.1007 *

Ответы [ 4 ]

3 голосов
/ 09 февраля 2012

используйте словарь AS3 или dict в python и просто проверьте, есть ли слово в dict.я не вижу, чтобы я перебрал все слова.

2 голосов
/ 06 марта 2012

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

Я просто посчитал их, и теперь у нас есть список (всего) 79 запрещенных слов, которые произошли из чего-то, что я нашел в Интернете, к которому мы добавляли слова с течением времени, когда сообщения чата проползали.

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

Ключевые решения, которые мы приняли:

  1. Не говорите людям, почему вы отклонили их сообщения
  2. Не позволяйте людям публиковать чаты, пока вы им не доверяете (на нашем сайте они есть). сыграть 3 игры)
  3. 5 «плохих» сообщений, и мы автоматически блокируем вас
  4. Ежедневно мы отправляем отчет по электронной почте со всеми чатами, через которые мы сканируем
  5. Мы разрешаем другим пользователям пожаловаться на опубликованные сообщения - если это произойдет, сообщение автоматически удаляется, чтобы мы могли проверить его позже.

1 + 3 + 5 Вряд ли когда-нибудь случится сейчас, и это прекрасно работает, хотя - иногда такие сообщения, как

"Хотелось бы, чтобы было жарко!"

Отклонены (ключ - это «желание» и «это»), но даже это случается не часто.

2 голосов
/ 09 февраля 2012

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

function censorWithDictionary ( dict:Dictionary, text:String ) : String {
    var reg : String = "";
    for (var key:Object in dict)
    {
        reg += reg=="" ? "" : "|";     // add an "or" for multiple search words
        reg += "\\b"+dict[key]+"\\b";  // only whole words
    }

    var regExp : RegExp = new RegExp ( reg, "gi" ); 
    return text.replace ( regExp, "----" );
}
1 голос
/ 09 февраля 2012

Это скорее комментарий, чем ответ, но комментарии ограничены по длине, и здесь есть большие проблемы.

Я полагаю, что вы в основном задаете неправильный вопрос!

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

Например, могут ли люди, живущие здесь , испытывать проблемы или действительно люди, живущие здесь .Что, если вы поддержали эту команду по футболу / футболу . Этот человек , вероятно, никогда не посещает Великобританию.

Тогда вы попадаете в проблему анаграмм и сленга. FCUK - популярный бренд в Великобритании (и я уверен, что в других местах).И еще есть pr0n (без ссылки!) Или NAMBLA .

Реальный вопрос - Как я могу помешать людям, использующим систему, использовать язык, который обычно неприемлем?И это больше проблема дизайна / социальной инженерии, чем проблема программирования.Я не думаю, что на этом сайте есть фильтрация слов / фраз, но здесь нет ничего, что могло бы оскорбить кого-либо.

Вот идея - пусть ваши пользователи решат, что приемлемо!Используйте систему, основанную на репутации.Разрешить пользователям голосовать за пользователей, которые ведут себя, и голосовать за пользователей, которые вызывают оскорбления (с возможностью предоставления пользователям возможности оставлять отзывы о голосовании, чтобы дать им возможность исправить свои пути), а затем иметь возможность отфильтровывать пользователей с низким /отрицательная репутация.

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