NouBan是一个检测文本中是否含有豆瓣敏感词的程序。依赖于敏感词库(现收录超过300条),不完全收录于敏感词列表页面,包含一部分解释。
初始版本,由Python版算法迁移而来。
首先,很多人都不知道的一点是,敏感词也是分级别的:包含普通敏感词的内容发出来后会被锁定;包含特别敏感内容的,无法发送(显示含有被禁止的内容),如“方斌”、“齐桥桥”。
一条豆瓣广播/日记/评论发出后,会进入到敏感词匹配机制中。在这之前,会先去除所有非中英文、非数字、非假名的符号。带标号的拉丁字母、希腊字母、西里尔字母等其他字母、空格、分行也会被去除。大小写字母会被统一大写/小写,繁体中文也会转为简体。在此之后,提取的内容再进行关键字匹配,若匹配上,则该动态将仅自己可见,并进入人工审核队列。
也就是说,在敏感词中间加入符号分隔、用繁体是没有用的。但是,希腊字母会被去除,所以我们可以用希腊字母/带标号的拉丁字母替代部分英文字母,从而避开审查。
目前,豆瓣的敏感词分为两类:一类是最常见的,即单词,如“独裁”、“极左”;另一类是比较难发现的组合词,如“疫情+失业”、“孕妇+上前线”。暂时只发现了两个词构成的组合词。这两个词无论隔多远,只要在同一条中出现,就会被判定触发审核。
另外,一句话中不同词语前后相邻的字,只要与敏感词匹配,就会被锁。即该机制并没有分词功能。例如“推进PS4到PS5的兼容”这句话中,“进P”是敏感词。
有一类词暂时不清楚管理员的设置规则,即xijin/xijing/jinpin/jinping/jingpin/jingping/远pin/远ping等的组合词,例如“锡金”、“金苹”。据作者粗略估计,这些避讳词的数量超过一千二百个,涵盖了大部分谐音字组合成的词,仅有少部分常用词如“仅凭”、“精品”被除外。
很容易忽略的一点是,审查的范围不仅仅限于用户的广播、评论、日记;从站外分享的网页、转发的小组讨论、转发豆瓣的书影音条目,只要标题中包含敏感词,那么就会触发审核。
当然,目前都是人工发现的。最快捷的方法是二分法:将含有敏感词的一段话不断二分,并缩小敏感词所在的范围,最终得到敏感词。然而,如果包含了组合词,二分法就不太适用了。此时只能逐行/逐段/逐句删除,并测试是否仍然包含敏感词。
你可以在豆瓣中点击 #猜谜学术研讨# 标签,查看用户发出的被锁的内容。
目前采用的是已收录的敏感词库逐条匹配方法。首先对包含特殊符号及emoji的词匹配;然后对输入的文字正则处理:保留CJK(中日韩)统一表意字符、大小写拉丁字母、数字,其他字符均被去除。在此基础上进行大小写转换、繁简转换,然后逐一比对,并返回成功匹配的词条。另外,上面所说的一类特殊避讳词采用了拼音比对,将常用的谐音字替换为拼音,然后检查。
众所周知,在广播或评论中发出的网址会被缩成豆瓣的短网址。这就给了豆瓣更高的权力:他可以选择不解析该短网址,点开会显示not found。
被加入黑名单的网址,不能再被发出来(显示含有被禁止的内容)。
因此,如果你想发一些敏感的链接,请尽量不要直接发出网址来,可以用句号代替点,或者把你的网址先通过三方短网址缩短一遍,再发到豆瓣上。