适用于iPhone的Objective C中的基本亵渎过滤器

时间:2010-05-12 02:23:28

标签: iphone objective-c regex web-services profanity

你是多么喜欢有头脑的人来解决过滤亵渎的基本挑战,显然人们不可能解决每一个场景,但最好让一个人在最基本的层面上作为第一道防线。

在Obj-c中我有

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

然后我遍历每个令牌以查看是否在每个令牌中找到任何关键字(我在列表中有大约400个)。

实现误报也是一个问题,如果这个词是完美的匹配,它被标记为亵渎,否则如果发现超过3个亵渎的单词没有完美匹配,它也被标记为亵渎。

稍后我将使用更准确地解决问题的网络服务,但我真的需要一些基本的东西。因此,如果你写下了阴茎这个词,那就是顽皮顽皮,写得不好。

4 个答案:

答案 0 :(得分:6)

猥亵过滤器:糟糕的想法,或令人难以置信的不良主意?

Jeff在开始使用这样一段代码之前有一篇有趣的文章需要考虑:

  

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

答案 1 :(得分:3)

我只是建议对字符串进行标记。如果单词全部用字符串分隔,那么你的方法很有效,但在大多数使用场景中情况很少,因为你通常需要处理换行符,标点符号等。如果你感兴趣,试试这个:

NSMutableCharacterSet *separators = [NSMutableCharacterSet punctuationCharacterSet];

[separators formUnionWithCharacterSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];

NSArray *words = [bigString componentsSeparatedByCharactersInSet:separators];

来源:http://www.tech-recipes.com/rx/3418/cocoa-explode-break-nsstring-into-individual-words/

答案 2 :(得分:2)

那么,以这种方式搜索肯定不是搜索亵渎的最有效方法......更有效的方法是构造一个有限状态自动机来检测单词,并通过该FSA运行文本。您不需要拆分字符串来查找亵渎语言,所有这些拆分会增加您不需要的额外分配和复制开销。此外,在一些列入黑名单的单词中可能存在常见的模式,您不会通过单独搜索每个单词来利用它们。

那就是说,我认为400字是相当多的。究竟谁是你的观众?如果用户有医疗问题该怎么办?这些问题实际上是否应该被禁止?我只能想到在任何情况下都会被认为是亵渎的一些词,所以你可能想重新考虑过滤。

答案 3 :(得分:0)

有几件事:

  • 根据您希望过滤器的智能程度
  • ,FSA不一定有效
  • 正则表达式通常非常慢,具体取决于您要运行的数量
  • 400字有点低,取决于您的需求和语言
  • 在过滤时要注意一些非常棘手的情况,特别是嵌入诸如“假设”之类的单词

我的公司Inversoft构建了一个商业过滤解决方案,它非常智能。它不使用正则表达式或FSA,但具有定制的快速线性处理技术,使其非常快速和准确(每秒4,000多条消息)。它还有许多类别的600多个英语单词,包括俚语,种族黑人,毒品,帮派,宗教等。

如果您正在寻找支持的智能上下文感知解决方案,您应该查看Inversoft的Clean Speak。使用XML WebService将其连接到Obj-C应该很简单。