转载:

安装说明

  1. 安装PHP扩展 trie_filter,安装教程

  2. 安装PHP扩展 swoole,安装教程

代码说明

1、敏感词库维护更新脚本:

reload_dict.php,提供自动更新字典库到trie-tree文件的过程

2、trie树对象获取工具类

FilterHelper.php,提供获取trie-tree对象,避免重复生成trie-tree对象和保证tree文件与敏感词库的同步更新

 $v) {            $word = substr($str, $v[0], $v[1]);            if (!in_array($word, $result)) {                $result[] = $word;            }        }        return $result;    }}

3、对外提供过滤HTTP访问接口

filter.php,使用swool,对外提交过滤接口访问

on('Request', function($request, $response) {    // 接收get请求参数    $content = isset($request->get['content']) ? $request->get['content']: '';    $result = '';    if (!empty($content)) {        // 字典树文件路径,默认当时目录下        $tree_file = 'blackword.tree';        // 清除文件状态缓存        clearstatcache();        // 获取请求时,字典树文件的修改时间        $new_mtime = filemtime($tree_file);        // 获取最新trie-tree对象        $resTrie = FilterHelper::getResTrie($tree_file, $new_mtime);        // 执行过滤        $arrRet = trie_filter_search_all($resTrie, $content);        // 提取过滤出的敏感词        $a_data = FilterHelper::getFilterWords($content, $arrRet);        $result = json_encode($a_data);    }    // 定义http服务信息及响应处理结果    $response->cookie("User", "W.Y.P");    $response->header("X-Server", "W.Y.P WebServer(Unix) (Red-Hat/Linux)");    $response->header('Content-Type', 'Content-Type: text/html; charset=utf-8');    $response->end($result);});$serv->start();

测试效果

词库内容:

QQ截图20151017152352.png

接口响应过滤结果:

QQ截图20151017152201.png

尝试更新敏感词库,接口程序已自动加载最新敏感词库,保证过滤效果

QQ截图20151017152517.png

ab测试结果

词库:200W敏感词

服务器配置(CPU:1核内存:1024 MB;带宽:1Mbps

QQ截图20151025095426.png