27 信息过滤与反垃圾,java语言程序设计教程课后题答案

我国的信息过滤技术是走在世界前列的,尽管如此,在各种社区网站和个人邮箱中, 广告和垃圾信息仍然屡见不鲜、泛滥成灾。

常用的信息过滤与反垃圾手段有以下几种。


1 文本匹配

文本匹配主要解决敏感词过滤的问题。通常网站维护一份敏感词列表,如果用户发 表的信息含有列表中的敏感词,则进行消毒处理(将敏感词转义为***)或拒绝发表。

那么如何快速地判断用户信息中是否含有敏感词呢?如果敏感词比较少,用户提交 信息文本长度也较短,可直接使用正则表达式匹配。但是正则表达式的效率一般较差, 当敏感词很多,用户发布的信息也很长,网站并发量较高时,就需要更合适的方法来完 成,这方面公开的算法有很多,基本上都是Trie树的变种,空间和时间复杂度都比较好 的有双数组

【一线大厂Java面试题解析+核心总结学习笔记+最新架构讲解视频+实战项目源码讲义】

浏览器打开:qq.cn.hn/FTf 免费领取

Trie算法等。

Trie算法的本质是确定一个有限状态自动机,根据输入数据进行状态转移。双数组Trie算法优化了 Trie算法,利用两个稀疏数组存储树结构,base数组存储Trie树的节点, check数组进行状态检查。双数组Trie数需要根据业务场景和经验确定数组大小,避免数组过大或者冲突过多。

另一种更简单的实现是通过构造多级Hash表进行文本匹配。假设敏感词表包含敏感 词:阿拉伯、阿拉汗、阿油、北京、北大荒、北风。那么可以构造如图8.11所示的过滤 树,用户提交的信息逐字顺序在过滤树中匹配。过滤树的分支可能会比较多,为了提高 匹配速度,减少不必要的查找,同一层中相同父节点的字可放在Hash表中。该方案处理 速度较快,稍加变形,即可适应各种过滤场景,缺点是使用Hash表会浪费部分内存空间,如果网站敏感词数量不多,浪费部分内存还是可以接受的。

27 信息过滤与反垃圾,java语言程序设计教程课后题答案

有时候,为了绕过敏感词检查,某些输入信息会被做一些手脚,如“阿_拉_伯”,这 时候还需要对信息做降噪预处理,然后再进行匹配。


2 分类算法

早期网站识别垃圾信息的主要手段是人工方式,后台运营人员对信息进行人工审核。 对大型网站而言,特别是以社交为主的Web2.0网站,如Facebook或Linkedin这样的网 站,每天用户提交的信息数千万计,许多垃圾信息混杂其中,影响用户体验;而对于B2B 类的电子商务交易撮合网站,用户主要通过站内信等手段进行商品信息咨询,有时候站 内信充斥大量广告,甚至淹没正常询盘,引起用户严重不满和投诉。

对如此海量的信息进行人工审核是不现实的,对广告贴、垃圾邮件等内容的识别比 较好的自动化方法是采用分类算法。

以反垃圾邮件为例说明分类算法的使用,如图8.12所示。先将批量已分类的邮件样 本(如50000封正常邮件,2000封垃圾邮件)输入分类算法进行训练,得到一个垃圾邮 件分类模型,然后利用分类算法结合分类模型对待处理邮件进行识别。

27 信息过滤与反垃圾,java语言程序设计教程课后题答案

比较简单实用的分类算法有贝叶斯分类算法,这是一种利用概率统计方法进行分类的算法。贝叶斯算法解决概率论中的一个典型问题:一号箱子放有红色球和白色球各20 个,二号箱子放有白色球10个,红色球30个,现在随机挑选一个箱子,取岀来一个球 的颜色是红色的,请问这个球来自一号箱子的概率是多少。

上一篇:【恋上数据结构与算法】Trie


下一篇:Hybrid App开发之jQuery操作DOM