2012-02-09 2 views
1

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

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

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

позаботятся, подветренной

ответ

3

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

+0

YEah, После того, как я опубликовал это, я понял, что тестирование слов в тексте против массива или словаря было бы лучше, чем тестирование запрещенных слов в отдельности. Спасибо, что подтвердили, что идея Weasel –

+1

уверена. словарь - лучший выбор - он реализован как хэш-таблица и будет работать быстрее. – WeaselFox

+0

Проверьте мой ответ - есть более быстрый способ сделать это. – weltraumpirat

1

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

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

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

Например, люди, живущие here имеют проблемы или действительно живут люди here. Что делать, если вы поддерживали this football/soccer team. This person, вероятно, никогда не посещает Великобританию.

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

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

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

+0

Здравствуйте, Спасибо за ваш комментарий. Это взрослая чат-система для клиента, поэтому он хочет иметь абсолютный и конкретный контроль над тем, что есть и не разрешено. –

+0

@ LeeLoftiss: Я думаю, вам нужно обучить своего клиента тому, как это не будет работать - например, http://tonguetiedtim.com/slang-words-for-penis (NSFW) включает в себя и повседневные слова. Например, в правительстве Соединенного Королевства, депутаты могут выставить «Час частного члена», что означало бы что-то еще полностью в другом контексте. – Skizz

2

Рассмотрите возможность объединения всех записей в вашем словаре в единый 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, "----"); 
} 
+0

выглядит красиво! Я, безусловно, буду использовать это в будущем – WeaselFox

+0

Спасибо. Это выглядит хорошо. Будет ли он обрабатывать записи, которые сами являются регулярными выражениями? –

+0

Частичные, да. Все они будут частью одного большого RegExp, так что вы не можете делать какие-либо фантастические многострочные или '^ $' вещи. Но использование метасимволов и/или классов символов должно работать. – weltraumpirat

2

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

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

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

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

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

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

«! Я хочу это было жарко»

Отклонено (ключ - это «sh» часть желания и «это»), но даже этого не происходит часто.

Смежные вопросы