Основной фильтр ненормативной лексики в Objective C для iPhone - PullRequest
3 голосов
/ 12 мая 2010

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

В Obj-c у меня есть

NSString *tokens = [text componentsSeparatedByString:@" "];

И затем я перебираю каждый токен, чтобы увидеть, найдено ли какое-либо из ключевых слов (у меня около 400 в списке) в каждом токене.

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

Позже я воспользуюсь веб-сервисом, который более точно решит проблему, но мне просто нужно кое-что базовое. Так что, если бы вы написали слово «пенис», оно бы звучало как «непослушный, непослушный, плохое».

Ответы [ 4 ]

6 голосов
/ 12 мая 2010

Фильтры непристойности: плохая идея или невероятно плохая идея общения?

У Джеффа есть интересная статья, которую стоит рассмотреть, прежде чем приступать к такому коду:

http://www.codinghorror.com/blog/2008/10/obscenity-filters-bad-idea-or-incredibly-intercoursing-bad-idea.html

3 голосов
/ 12 мая 2010

У меня просто есть предложение для токенизации строки. Ваши способы работают хорошо, если все слова разделены строками, но это редко встречается в большинстве сценариев использования, поскольку вам обычно приходится иметь дело с символами новой строки, пунктуацией и т. Д. Попробуйте, если вам интересно:

NSMutableCharacterSet *separators = [NSMutableCharacterSet punctuationCharacterSet];

[separators formUnionWithCharacterSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];

NSArray *words = [bigString componentsSeparatedByCharactersInSet:separators];

Источник: http://www.tech -recipes.com / rx / 3418 / какао-взрыв-разрыв-нить-строки-в-слова /

2 голосов
/ 12 мая 2010

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

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

0 голосов
/ 13 мая 2010

Пара вещей:

  • FSA не обязательно будет работать в зависимости от того, насколько интеллектуальным вы хотите, чтобы фильтр был
  • Regex обычно очень медленный, в зависимости от того, сколько вы хотите запустить
  • 400 слов несколько мало, в зависимости от ваших потребностей и языков
  • Есть несколько чрезвычайно сложных случаев, которые следует учитывать при фильтрации, особенно встраивание таких слов, как «ASSume»

Моя компания, Inversoft, создает коммерческое решение для фильтрации, и оно достаточно интеллектуально. Он не использует регулярные выражения или FSA, но имеет специально разработанную технологию быстрой линейной обработки, которая делает его чрезвычайно быстрым и точным (4000+ сообщений в секунду). Он также содержит более 600 английских слов в нескольких категориях, включая сленг, расовые оскорбления, наркотики, банды, религиозные и т. Д.

Если вы ищете интеллектуальное контекстно-зависимое решение со службой поддержки, вам следует обратиться к Clean Speak от Inversoft. Подключить его к Obj-C просто с помощью XML WebService.

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