Базовый фильтр ненормативных веществ в объективном C для iPhone

StackOverflow https://stackoverflow.com/questions/2815788

Вопрос

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

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

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

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

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

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

Это было полезно?

Решение

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

NSMutableCharacterSet *separators = [NSMutableCharacterSet punctuationCharacterSet];

[separators formUnionWithCharacterSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];

NSArray *words = [bigString componentsSeparatedByCharactersInSet:separators];

Источник: http://www.tech-recipes.com/rx/3418/cocoa-explode-break-nsstring-inito-individual-words/

Другие советы

Неясность фильтры: плохая идея или невероятно межкортирующая плохую идею?

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

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

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

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

Пара вещей:

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top