敏感词、文字过滤是一个网站必不可少的功能,如何设计一个好的、高效的过滤算法是非常有必要的。在实现敏感词过滤的算法中,我们必须要减少运算,而 DFA 在 DFA 算法中几乎没有什么计算,有的只是状态的转换。所以想更高效的进行敏感词的过滤,需要使用 DFA 算法。

整理过滤函数代码如下:/**

* Notes: [DoFilterWords 过滤字符中敏感词]

* Author HeZe

* Date 2021/1/6 14:48

* @param $list     过滤词一维数组  ['小明', '小红', '大白', '小白', '小黑', 'me', 'you'];

* @param $string   输入文字       likeyou小白喜欢小黑爱着的大黄

* @return string   过滤后文字     like**喜欢*爱着的大黄

*/

function DoFilterWords($list, $string, $symbol = '*')

{

$count = 0;             // 违规词的个数

$sensitiveWord = '';    // 违规词

$stringAfter = $string;      // 替换后的内容

$pattern = "/".implode("|",$list)."/i"; // 定义正则表达式

if(preg_match_all($pattern, $string, $matches)) { // 匹配到了结果

$patternList = $matches[0];     // 匹配到的数组

$count = count($patternList);

$sensitiveWord = implode(',', $patternList);    // 敏感词数组转字符串

//把匹配到的数组进行合并,替换使用

$replaceArray = array_combine($patternList,array_fill(0, count($patternList), $symbol));

$stringAfter = strtr($string, $replaceArray); //结果替换

}

$log = "原句为 [ {$string} ]
";

if($count==0) {

$log .= "暂未匹配到敏感词!";

} else {

$log .= "匹配到 [ {$count} ]个敏感词:[ {$sensitiveWord} ]
"."替换后为:[ {$stringAfter} ]";

}

return $log;

}

使用方法// 过滤词库

$list = ['小明', '小红', '大白', '小白', '小黑', 'me', 'you'];

// 输入文字

$string = "likeyou小白喜欢小黑爱着的大黄";

// 调用函数

$res = DoFilterWords($list , $string , '*');

echo $res;

// 输出结果

原句为 [ likeyou小白喜欢小黑爱着的大黄 ]

匹配到 [ 3 ]个敏感词:[ you,小白,小黑 ]

替换后为:[ like**喜欢*爱着的大黄 ]

最后 附上敏感词、停止词 词库:https://gitee.com/zehe/stopwords

转载请注明出处~~~~

php返回当前字符串把所有敏感词变红,PHP 实现敏感词 / 停止词 过滤(附敏感词库)...相关推荐

  1. 利用ajax从jsp中返回的字符串时出现回车符号解决办法

    问题背景:通过ajax来实现检测用户名,若用户名已存在,则提示已存在并且清空文本框:若不存在则提示可用.在checkname.jsp中写的时候,通过out.write();返回提示,在index.js ...

  2. 根据传入url请求,返回json字符串

    /** * 根据传入url请求,返回json字符串 * @param url * @return * @throws UnsupportedEncodingException */ public st ...

  3. Jquery 将后台返回的字符串转换成Json格式的数据

    //code by:博客园-曹永思 第一步:将DataTable转换成 Json格式的数据 方法 一 View Code /// <summary>/// DataTable转成Json格 ...

  4. python struct.calcsize()函数(返回格式字符串fmt描述的结构的字节大小)

    from struct.py def calcsize(fmt): # known case of _struct.calcsize"""calcsize(fmt) -& ...

  5. 解决springmvc在单纯返回一个字符串对象时所出现的乱码情况(极速版)

    使用springmvc框架开发了这么长时间,之前都是直接返回jsp页面,乱码情况都是通过配置和手动编解码来解决,但是今天突然返回一段单纯的字符串时,发现中文乱码情况解决不了了,下面就给各位分享一下如何 ...

  6. Java黑皮书课后题第6章:6.37(格式化整数)编写一个测试程序,提示用户输入一个数字以及宽度,显示通过调用format方法返回的字符串

    6.37(格式化整数)编写一个测试程序,提示用户输入一个数字以及宽度,显示通过调用format方法返回的字符串 题目 题目描述 破题 代码 运行示例 题目 题目描述 6.37(格式化整数) 使用下面的 ...

  7. 传入一个中文字符串,返回一个字符串中的中文拼音

    /**      * @param 传入一个中文字符串      * @return 返回一个字符串中的中文拼音      */     private String getNameNum(Strin ...

  8. JAVA传入一个字符串,返回一个字符串中的大写字母

    /**      *       * @param 传入一个字符串      * @return 返回一个字符串中的大写字母      */     private static String str ...

  9. strspn php,php返回在字符串中包含 charlist 参数中指定的字符数目的函数strspn()

    实例 返回在字符串 "Hello world!" 中包含字符 "kHlleo" 的数目:<?php echo strspn("Hello wor ...

最新文章

  1. 【238】◀▶IEW-Unit03
  2. 对象存储、块存储、文件存储的区别
  3. Quzrtz 使用oracle集群无法正常启动问题解决
  4. 基于USR-WiFi模块的 ESP32,ESP8266 Thonny调试器
  5. java 打包web 项目
  6. Vista操作系统评估参考资料
  7. 2018先知白帽大会 | 议题解读
  8. UIDynamicBehavior的行为类翻译
  9. private static final long serialVersionUID = 1L;详解
  10. 基于PCA和贝叶斯决策对CIFAR-10数据图像分类
  11. php7扩展开发教程,Laravel 7 扩展开发教程
  12. [Web Chart系列之一]Web端图形绘制SVG,VML, HTML5 Canvas 技术比较
  13. Ubuntu学习(应用集合、命令行以及遇到的问题)
  14. Tricks(二十七)—— 如何在不使用 np.argsort 的情况下获得排序后元素的下标
  15. selenium——鼠标事件
  16. DIPS工具实现解释
  17. OSI常用网络协议(七层)
  18. np.ones(),np.zeros(), np.empty(),np.full(),np.ones_like() 基本用法
  19. 电阻式触摸屏UI设计
  20. 你的独立思考能力正在慢慢退化

热门文章

  1. 2000亿合作背后:苏宁易购如何成为海尔“兄弟”
  2. 快速听懂英文数字和中英文数字转换教程
  3. 我的计算机课1000字,电脑课讲话反思1000字(共9篇).docx
  4. java class获取type_父类通过泛型获得子类Class类型 以及Type体系
  5. 香港《财资》2018年金融科技奖 金融壹账通、花旗银行、招商银行等登榜
  6. 卸载DirectX9.8
  7. [BUUCTF-pwn] wdb_2020_1st_boom1
  8. Widows 注册表
  9. 研招网准考证只能电脑下载吗
  10. Keras学习笔记11——keras.applications