刚才看了谢慧琦(是个MM??)的《网站非法内容监听系统的构想》一文,觉得其中所述的想法与我之前的设想非常相像,所以我忍不住也想说几句了,嘿嘿:
我原先的设想就是在用户提交时,对提交内容进行危险程度核查,也是予以评分。
无危险的内容直接发布;
有一定危险的内容也会发布,但在发布的同时会在后台提请管理员进行人工审查;
高危险度的内容延迟发布并通知管理员。
对于关键字的危险度分值我觉得可以采用1-10的数字来表述,简单明了,一般一个文章评分达到10就应当算作高危了,所以可以把一些高危词语直接设为10分。
文章评分方面不应太复杂,会影响效率,而且也很难找到太精确的算法。我觉得就是关键字出现则加入其分值,如再重复出现,则每次只增加其分值的1/10。
关键字检索方面也不需要太复杂的语言分析技术, 正则表达式就足以胜任,看我这个示例:
表达式中的“6”就是模糊值,表示脏字之间可能插入6个以内的干扰符号,这个可以由程序员通过配置参数控制,整个表达式可以由程序来根据关键字自动生成。
其效果应该是不错的,除非用通假字、错别字、同音字、火星文来写,或者竖版写、逆向写~~,当然逆向写还是可以通过程序简单处理一下,其他的就麻烦了。
我非常不赞成用关键字替代的方法去使内容合法化,原因如下:
一、这种方式经常出错。比如魔兽世界里说“奥格瑞玛银行门口交易”就会变成“奥格瑞玛银行门^&*#$#易”,“金色魔线”发出来都会变成“金%##*线”,当然这在即时聊天中可能是唯一可行的方案了,用户不可能说出去话之后等待GM审核后才能真正发出。
二、这是一种掩耳盗铃的行为。大多数情况下,尽管关键字被抹去,读者依然可以通过上下文了解到发布者的大略意图,比如谩骂和攻击性言语。
三、这有可能会引起误会。结合一和二两条,假如在正当的使用情况下被过滤掉了部分文字,而这时上下文又恰巧可以被理解为其他的意思,这时很容易引发读者的误解。比如某人给你发来一条带有过滤符号的消息,你很可能以为他在使用不文明的语言攻击你。
四、用户会想方设法蒙混过关。比如你把“和谐”屏蔽了,用户就会尝试加入一些干扰符号,或者采用“河蟹”这类自造词来自行替代,这样都不会对读者理解造成太大干扰,而管理员绝不会坐视不管,所以不久之后“河蟹”也被和谐了。这就形成了一场竞赛,管理员和用户都在不断扩充自己的关键字库来实现胜出。而在一次次编辑、重发、扩充、审核之中,用户和管理员都浪费了精力与时间。
我觉得对于网站来说,人机协作的审核机制是就最好的:
一来大多网站都不要求时效性;
二来用户发布的内容如果未通过机审及人审,他也很难通过多次尝试来蒙混过去,首先人审在时间上造成了尝试间隔,其次他很可能已被加入黑名单受到高度关注;
第三就是如果用户知道有人工参与审查,多半会放弃发布不良信息的念头。
而且人机协作仍然能保证不错的效率,因为绝大多数正规的内容都会直接通过机审而发布出去,这样用户就感觉不到有什么不同。
对于应用方式,谢慧琦所说的数据库层面的核查理念的确不错,但是我感觉可能会在部署时有些难度,程序要一直监视数据库的话,应该不是一般的网站权限能达到的吧。
我觉得就是作为一个独立的类库来编写就能保证很好的复用性和通用性。使用的时候还是应该用在业务逻辑层,在提交时审核并决定处理方式。
欢迎其他朋友也参与到讨论中来,我们甚至可以搞一个开源项目,一起维护代码和关键字过滤库哈:)
本文转自斯克迪亚博客园博客,原文链接http://www.cnblogs.com/SkyD/archive/2008/09/14/1290701.html,如需转载请自行联系原作者