• 之前有人问我评论的机器审核是怎么做的,因为我代码写的很乱,也跟一些别的东西耦合不好分离,所以我就简单说一下如何制作吧。

    我们不希望看到的评论通常有广告,450 和粗鄙之语等,每一种都需要分别的制定规则。(当然,这些同样适用于论坛)

    #分词

    直接判断关键词非常的 naive ,分词这一步是很重要的,你不能说 我买了一个三口 交换机,然后被当作敏感词拦截了吧?

    分词的话,可以使用大公司的云引擎,也可以自己使用一些开源库,例如结巴,scws 等。

    cppjieba: https://github.com/yanyiwu/cppjieba scws: https://github.com/hightman/scws

    商业产品:

    腾讯:http://www.qcloud.com/product/nlp.html Boson: http://www.bosonnlp.com

    负面情绪

    判断负面情绪是避免争吵,人身攻击的非常吼的办法。

    市面上有一些现成的情感分析服务,也有开源免费的解决方案,商业服务的集成都是一键的,这个就不说了,主要说一下开源的实现。

    首先寻找情感词库/字典

    https://www.google.com/search?q=%E6%83%85%E6%84%9F%E8%AF%8D%E5%BA%93

    你可以把它们写个脚本合并一下,结合起来,也可以只用几种。

    简单处理

    将分词的结果与词典进行匹配,遇到负面词语就减分,遇到积极的词语就加分,将最终的得分作为情感判断结果。

    例如 “今天天气真好,阳光照着很舒服”,里面有 “好”,并且前面有“真”修饰,也有“舒服”,前面有“很”修饰,可以判断这是一个非常积极的句子。

    高级处理

    中文很复杂,在数据量大的时候,简单处理往往不会出现偏差,但是如果只有简单一句话,还需要考虑一些额外的情况,双重否定,反讽,暗喻等。

    • “美国的华莱士,不知道比你们高到哪里去了”

    • “这软件实在是好用的不行,我用了五分钟就删了”

    这些情况暂时不讨论,大家可以自己想想解决办法(其实是我也不会啦)

    广告

    广告的拦截方式呢,我使用的了下面这几种

    基于 IP 地址

    判断评论者的 IP 地址是否属于机房,这一招可以挡掉大部分的 spam bot ,但是需要注意的是不要直接干掉评论,因为误伤率很高,可以作为加减分/参考依据。

    评论中和用户的个人主页链接

    模拟访问这个地址,判断一下是不是真的个人主页,例如 WordPress , XXX Blog 之类的关键词,就可以很简单的区分出来。

    当然你还可以加别的判断,例如里面是否有 exciting 的关键词。

    文本特征

    既然是广告,肯定要引导用户访问他的相关页面,或者推广

    例如: “立即访问XXX”,“XX搜索 XXX”之类的 keyword ,这些列表可以通过学习广告样本来自扩充。

    处理

    程序总是会有误伤的,检测到广告后,最好先隐藏,然后由人工确认。

    很明显的广告,例如带了很多广告字眼,有链接,还是在数据中心发的,这个可以直接删除并拉黑。

    如果是人工发广告,可以考虑返回“正在审核中”,告诉他要审核,基本上就不会再发了。

    如果是粗鄙之语,让这条消息显示发送成功,但是只有发送的人能看到,别人看不到他发的内容,这样可以避免一些争执,而且也不会惹到发帖的人。

    End

    这些方法来自于经验的摸索和搜索引擎,我也不是很懂,也许有更好的方案,欢迎大家补充。