你们志同道合的人如何应对过滤脏话的基本挑战,显然不可能解决所有情况,但最好有一个最基本的水平作为第一道防线。

在 Obj-c 中我有

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

然后我循环遍历每个标记,看看是否在每个标记中找到任何关键字(我在列表中找到了大约 400 个)。

认识到误报也是一个问题,如果该单词是完美匹配,则将其标记为亵渎,否则,如果发现超过 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/

其他提示

<强>淫秽过滤器:?坏主意,或难以置信Intercoursing坏主意

杰夫有一个有趣的文章着手这样的一段代码之前,需要考虑:

  

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

那么,在这种方式搜索当然不是搜索亵渎最有效的方式......一个更有效的方法将是建立一个有限状态自动检测的话,并运行一次通过FSA的文本。你并不真的需要分割字符串找到亵渎,和所有的分裂增加了额外的分配和复制的开销,你不需要。此外,有可能在一些列入黑名单的话,你不被个别地搜索每个单词开发共同模式。

这是说,我觉得400个字是不少。谁,究竟是你的观众?如果用户有一个医疗问题?如果这样的问题实际上是不允许的?我只能认为这在任何情况下被认为是亵渎的话极少数的,所以你可能要重新考虑过滤。

有几件事:

  • FSA 不一定会起作用,具体取决于您希望过滤器的智能程度
  • 正则表达式通常非常慢,具体取决于您要运行的数量
  • 400 字有点低,具体取决于您的需求和语言
  • 过滤时需要注意许多极其棘手的情况,特别是嵌入“ASSume”等单词

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

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top