你们这些志同道合的人是如何应对过滤亵渎的基本挑战的,显然,一个人不可能解决所有的情况,但有一个最基本的水平作为第一道防线是很好的。
在Obj-c中,我有
NSString *tokens = [text componentsSeparatedByString:@" "];然后我遍历每个令牌,看看是否在每个令牌中找到了任何关键字(我在列表中有大约400个)。
认识到误报也是一个问题,如果单词是完美匹配,它会被标记为亵渎,否则如果发现超过3个带有亵渎的单词而没有完全匹配,它也会被标记为亵渎。
稍后我将使用一个更精确地解决这个问题的need服务,但我真的只需要一些基本的东西。所以如果你写了阴茎这个词,它就会变成淘气的,坏的词。
发布于 2010-05-12 10:31:24
我只有一个建议,那就是将字符串标记化。如果单词都是用字符串分隔的,你的方法效果很好,但在大多数使用场景中很少出现这种情况,因为你通常必须处理换行符、标点符号等。如果你感兴趣,试试这个:
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/
发布于 2010-05-12 10:28:53
猥亵过滤器:糟糕的主意,还是令人难以置信的糟糕主意?
在开始编写这样一段代码之前,Jeff有一篇有趣的文章需要考虑:
http://www.codinghorror.com/blog/2008/10/obscenity-filters-bad-idea-or-incredibly-intercoursing-bad-idea.html
发布于 2010-05-12 10:30:18
嗯,以这种方式搜索当然不是搜索亵渎的最有效的方式……一种更有效的方法是构建一个有限状态自动机来检测单词,并在FSA中运行一次文本。你并不真的需要拆分字符串来查找亵渎,而且所有拆分都会增加额外的分配和复制开销,这是你不需要的。此外,在一些列入黑名单的单词中可能存在共同的模式,您不能通过单独搜索每个单词来利用这些模式。
也就是说,我认为400个单词是相当多的。你的观众到底是谁?如果用户有医疗问题怎么办?这样的问题真的应该被拒绝吗?我只能想到一些在任何情况下都会被认为是亵渎的词,所以你可能需要重新考虑过滤。
https://stackoverflow.com/questions/2815788
复制相似问题