你是多么喜欢有头脑的人来解决过滤亵渎的基本挑战,显然人们不可能解决每一个场景,但最好让一个人在最基本的层面上作为第一道防线。
在Obj-c中我有
NSString *tokens = [text componentsSeparatedByString:@" "];
然后我遍历每个令牌以查看是否在每个令牌中找到任何关键字(我在列表中有大约400个)。
实现误报也是一个问题,如果这个词是完美的匹配,它被标记为亵渎,否则如果发现超过3个亵渎的单词没有完美匹配,它也被标记为亵渎。
稍后我将使用更准确地解决问题的网络服务,但我真的需要一些基本的东西。因此,如果你写下了阴茎这个词,那就是顽皮顽皮,写得不好。
答案 0 :(得分:6)
猥亵过滤器:糟糕的想法,或令人难以置信的不良主意?
Jeff在开始使用这样一段代码之前有一篇有趣的文章需要考虑:
答案 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)
有几件事:
我的公司Inversoft构建了一个商业过滤解决方案,它非常智能。它不使用正则表达式或FSA,但具有定制的快速线性处理技术,使其非常快速和准确(每秒4,000多条消息)。它还有许多类别的600多个英语单词,包括俚语,种族黑人,毒品,帮派,宗教等。
如果您正在寻找支持的智能上下文感知解决方案,您应该查看Inversoft的Clean Speak。使用XML WebService将其连接到Obj-C应该很简单。