IMTX添加基于“中文”的垃圾评论检测机制

最近本blog的垃圾评论(SPAM)泛滥,每天都要花一分钟左右处理一下,实在是恼火。

IMTX用的是跟WordPress一样的Akismet垃圾评论验证机制(见此:Akismet for Django),真不知道怎么回事最近怎么效果越来越差了,而且都是一些非常明显的垃圾评论。

一怒之下,我决定为IMTX增加新的垃圾评论检测机制,那就是通过中文来检测。

先来看看垃圾评论们都长什么样吧~哎呀,外国的垃圾评论,这简直太弱智了!跟中文领域的能智能地根据文章内容来发表评论的垃圾评论相比,你们简直落后了整整五年以上!

遗憾的是Akismet竟然还判断不出来,可见Akismet并没有多少智能在里面(或者是我的Free Plan不给力)。

IMTX Comments 01

好吧,下面来解决问题。

根据本站的情况,IMTX的评论99%以上都是基于中文的,而99%以上的垃圾评论呢,则是基于英文的。于是我想到了就通过检测评论正文有没有含中文字来判断是否是垃圾评论。

根据一些信息得出,汉字的Unicode范围大致是:U+4E00..U+9FA5。但是这个范围并不精确,真正的Unicode中文相关的,可是分好几个区间的,具体可以参考这篇文章:unicode中文范围

但是因为我只是比较纯粹地判断一下中文字符就可以了,于是也选了这个"u4E00-\u9FA5"这个范围。

具体的代码也很简单,只要用Python的re来search一下正文即可,如:

re.search(ur'[\u4e00-\u9fa5]+', comment.content)

最终的应用,还得仔细思考一下:难道我就这么放弃那1%的用英文来评论的读者吗?

要知道,大家的评论可是我写文章的动力,1%的评论都不能马虎的就当作SPAM处理掉。

于是我在下面加了一句:Notes:Please input at least one Chinese character (or copy this 哈),也就是说,如果你要用英文评论,或者当前的环境没有中文输入法,那么就可以复制那个"哈"进去即可。

IMTX Comments 02

我想会用英文输入评论的人,都会去看这句话吧。这也是我自己想想的,具体效果那是要看着办了。

最近少时间在技术细节上去解决问题,于是就想了这么个简单且省事的解决方案。希望这样基本解决SPAM的问题。

让垃圾评论来的再猛烈一些吧!

<推广> 本站架设于 Linode 东京机房,同时使用 云梯 进行科学上网

24 Comments

  1. 囧…原来是这个需求…
    其实最简单的方法是…正则删掉所有的英文字符+半角标点,然后看剩余长度是否>0

  2. Hello, I am a spammer. I am intelligent. visit here for more information http://shellex.info 哈

  3. 不过如果有英文的人肉spammer,这也一样是防不住的啊…
    如果因为那一个“哈”而让akismet把垃圾划去双语的复杂评论那边,算法不同,反而认不出垃圾了,就得不偿失了…

  4. 我wordpress,Akismet+Some Chinese Please!+关键字+屏蔽IE,垃圾评论几乎死绝。

  5. cnzh

    说明贵网站人气旺,哈哈哈~~

  6. 宁波搬家公司

    对于博主能收留我的留言,我感激涕淋

  7. 以前也碰到过,经人指点在表单里用js加了一个动态的域,处理提交时查一个这个域是否存在来判断是不是spam。目前运行良好,貌似暂还没spam能通过。缺点是浏览器必须得开js支持
    http://tjsweb.info/40.html

    不过这种方法如果成为普遍的防spam方法,spam机想破解掉应该也不是什么太困难的事

  8. xiaojay

    试试 google predictor api 吧

  9. 要不加上验证码?
    比如reCAPTCHA
    http://www.google.com/recaptcha

  10. 去我博客看源码吧。最弱智的方法。保证zero-spam。兼容老版本ucweb。

  11. 奇怪,我怎么没有提示让我输入哈哈...

  12. landyoncn

    哈哈,赞

  13. Iceyer

    哈哈啊哈哈哈哈哈,测试一下啊

  14. N_jie_qi

    哈哈!!

  15. shell

    判断是否纯英文最简单的方法是通过unicodedata模块,判断Lo类别在里面占的总体比例。
    比较复杂的方法是对字符串进行类别划断,中文在不分词的情况下,大部分都是长句,中间没有分割。而英文大部分都是单词。对碎片单词比例过高的评论(英文),计算单词是否在常见词中。然后再计算非常见词占总体的比例。

  16. shujingjing

    以后打哈哈的人就多了。哈。

  17. xx

    Sorry about the previous message, I thought you will prevent it ;)

    May you can add an extra input box for a human beings input. like reCAPTCHA or like a input a special char like Yunfeng's blog http://blog.codingnow.com/2011/10/ueuoaoeo.html

Leave a Comment