/ SAE

基于分词技术的敏感词过滤

今天看小说时突然冒出来的想法,有兴趣的可以去实现一下。

目前国内使用的敏感词过滤技术十分原始,简单的文本替换,例如“中国军队”→“中**队”,“日志”→“*志”,当我在网络上看到这些词的时候更多的是无奈……

其实标题已经把核心技术说出来了,下面我粗略介绍下我的思路

1.使用分词技术将文章分割成词,存入数组,并记录词性。

2.遍历该数组,与敏感词列表对比,只有字符串和词性完全一致时才执行替换操作。

正好新浪的SAE提供了分词服务,我就顺手写了下代码。

$list = array(); //这里是敏感词数组 $str = "中国军队"; //这个是要替换的文字,新浪的限制是10K。 $seg = new SaeSegment(); $ret = $seg->segment($str, 1); if ($ret === false) { echo "分词出错!"; } else { $re = ''; foreach($ret as $value) { unset($temp); $temp['word'] = $value['word']; $temp['word_tag'] = $value['word_tag']; //词性,如果敏感词数组不包含词性,此行可忽略。 if(in_array($temp,$list,false)) //如果出现在敏感词数组中 { $re .= str_repeat('',strlen($temp['word'])); //替换成等长的 } else { $re .= $temp['word']; //原样输出 } } echo $re; }

当然,以上代码没有考虑到换行等情况,输出的内容可能不太一致。看看思路就OK了。

基于分词技术的敏感词过滤
Share this