PHP实现敏感词过滤系统

安装说明

  1. 安装PHP扩展 trie_filter,安装教程 http://blog.41ms.com/post/39.html

  2. 安装PHP扩展 swoole,安装教程 http://www.swoole.com/

代码说明

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

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

PHP
<?php// 设置内存
ini_set('memory_limit', '128M'); // 读取敏感词字典库 $handle = fopen('dict.txt', 'r'); // 生成空的trie-tree-filter $resTrie = trie_filter_new(); while(! feof($handle)) { $item = trim(fgets($handle)); if (empty($item)) { continue; } // 把敏感词逐个加入trie-tree trie_filter_store($resTrie, $item); } // 生成trie-tree文件 $blackword_tree = 'blackword.tree'; trie_filter_save($resTrie, $blackword_tree);

2、trie树对象获取工具类

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

PHP
<?php
/*** 过滤器助手** getResTrie 提供trie-tree对象;* getFilterWords 提取过滤出的字符串** @author W.Y.P (wangyupeng@jiayuan.com)*/class FilterHelper { // trie-tree对象 private static $_resTrie = null; // 字典树的更新时间 private static $_mtime = null; /** * 防止初始化 */ private function __construct() {} /** * 防止克隆对象 */ private function __clone() {} /** * 提供trie-tree对象 * * @param $tree_file 字典树文件路径 * @param $new_mtime 当前调用时字典树的更新时间 * @return null */ static public function getResTrie($tree_file, $new_mtime) { if (is_null(self::$_mtime)) { self::$_mtime = $new_mtime; } if (($new_mtime != self::$_mtime) || is_null(self::$_resTrie)) { self::$_resTrie = trie_filter_load($tree_file); self::$_mtime = $new_mtime; // 输出字典文件重载时间 echo date('Y-m-d H:i:s') . "\tdictionary reload success!\n"; } return self::$_resTrie; } /** * 从原字符串中提取过滤出的敏感词 * * @param $str 原字符串 * @param $res 1-3 表示 从位置1开始,3个字符长度 * @return array */ static public function getFilterWords($str, $res) { $result = array(); foreach ($res as $k => $v) { $word = substr($str, $v[0], $v[1]); if (!in_array($word, $result)) { $result[] = $word; } } return $result; } }

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

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

PHP
<?php// 设置脚本最大运行内存,根据字典大小调整
ini_set('memory_limit', '512M'); // 设置时区 date_default_timezone_set('Asia/Shanghai'); // 加载助手文件 require_once('FilterHelper.php'); // http服务绑定的ip及端口 $serv = new swoole_http_server("182.92.177.16", 9502); /** * 处理请求 */ $serv->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();

测试效果

词库内容:

接口响应过滤结果:

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

ab测试结果

词库:200W敏感词

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

http://www.cnblogs.com/paulversion/p/7150391.html

转载于:https://www.cnblogs.com/lixiuran/p/7338564.html

PHP实现敏感词过滤系统相关推荐

  1. 怎么设计高效的敏感词过滤系统(一)

    IM项目需要对上边传输的消息进行必要的过滤.如果总是对着某人输入f**k就显得不太文明了. 一个通用且简单的做法是,设定一批敏感词,如果消息中出现这些词,由系统进行必要的处理.怎么实现这个功能呢? 一 ...

  2. 5分钟Serverless实践 | 构建无服务器的敏感词过滤后端系统

    前言 在上一篇"5分钟Serverless实践"系列文章中,我们介绍了什么是Serverless,以及如何构建一个无服务器的图片鉴黄Web应用,本文将延续这个话题,以敏感词过滤为例 ...

  3. PHP敏感词过滤【整理实践版】

    2019独角兽企业重金招聘Python工程师标准>>> 由于国内互联网管制政策,强大的敏感词过滤系统成为了每一个网站必须具备的基本功能,尤其是那些涉及UGC内容的站点. 对敏感词过滤 ...

  4. 5分钟搞定敏感词过滤!

    函数工作流(FunctionGraph,FGS)是一项基于事件驱动的函数托管计算服务,托管函数具备以毫秒级弹性伸缩.免运维.高可靠的方式运行.通过函数工作流,开发者无需配置和管理服务器,只需关注业务逻 ...

  5. 游戏敏感词过滤的常见方式记录

    敏感词过滤是随着互联网社区发展,一种阻止网络犯罪和网络暴力的技术手段.通过对可能存在犯罪或网络暴力,对可能的关键词进行有针对性的筛查和屏蔽. 很多时候我们能够防患于未然,把后果严重的犯罪行为扼杀于萌芽 ...

  6. 游戏里敏感词过滤的常见方式有哪些

    随着互联网的发展,"敏感词过滤"这一需求也在市场中不断增加. 敏感词过滤是一种阻止网络不良信息扩散和灰黑产扩张的技术手段,对可能存在不合规的关键词进行有针对性的筛查和屏蔽.通过这样 ...

  7. python敏感词过滤replace_Serverless 实战:3 分钟实现文本敏感词过滤

    敏感词过滤是随着互联网社区一起发展起来的一种阻止网络犯罪和网络暴力的技术手段,通过对可能存在犯罪或网络暴力的关键词进行有针对性的筛查和屏蔽,能够防患于未然,将后果严重的犯罪行为扼杀于萌芽之中. 随着各 ...

  8. 【Lilishop商城】No3-2.模块详细设计,系统设置(系统配置、行政区划、物流公司、滑块验证码图片、敏感词过滤)的详细设计

     仅涉及后端,全部目录看顶部专栏,代码.文档.接口路径在: [Lilishop商城]记录一下B2B2C商城系统学习笔记~_清晨敲代码的博客-CSDN博客 全篇会结合业务介绍重点设计逻辑,其中重点包括接 ...

  9. Java 敏感词过滤,Java 敏感词替换,Java 敏感词工具类

    Java 敏感词过滤,Java 敏感词替换,Java 敏感词工具类 =========================== ©Copyright 蕃薯耀 2017年9月22日 http://fansh ...

最新文章

  1. Phpcms V9手机门户设置教程:怎么用PC V9做手机网站
  2. 有关计算机存储器的几个名词的概念和辨析(内存,外存,RAM,ROM,磁盘等)
  3. Python闭包与延迟绑定
  4. 一个Spring入门小案例
  5. pb retrieve时停止工作_电机没有抱闸如何利用变频器实现减速停止
  6. 对象属性的调用_PyQt5面向对象编程,类和类的继承
  7. 这些职场办公神器,你会喜欢的!
  8. Web Service 与 RESTful Web Service比较
  9. Linux 运行进程实时监控pidstat命令详解
  10. 换种方式去分页(转)
  11. vector赋值的常见错误
  12. vim - multiple windows
  13. 开始Azure之旅,参加深度培训 (转)
  14. equals 跟== 的区别
  15. html js 图片左右切换代码,Js图片切换特效中的左右箭头功能实现代码
  16. android简单点餐系统_微信点餐收银系统哪个好用?
  17. onenote 思维导图_印象笔记、OneNote、熊掌记 哪个笔记App更适合文字工作者?
  18. 报错解决:SyntaxError: Non-UTF-8 code starting with ‘\xe7‘
  19. 这样的牛皮凉席清水席要慎买!!!
  20. DNS知识及域名解析内容深入浅出超详细总结附DNS配置教程

热门文章

  1. Java 中的并发工具类
  2. PHP操作Redis常用技巧
  3. linux下邮件查看命令
  4. 求素数: 一般线性筛法 + 快速线性筛法
  5. 前端学习(3120):react-hello-react的setstate的一个说明
  6. 前端学习(2895):课程列表和导航结合
  7. [css] 什么是FOUC?你是如何避免FOUC的?
  8. 前端学习(2431):element里面的image组件
  9. git学习(7):创建ssh key时遇到“Bad escape character ‘ygen’.”
  10. shiro学习(22):动态添加验证规则2