php实现基于确定有穷自动机算法的铭感词过滤
2023-07-08 09:32
PHP
122
0
0
0
标题录入
封面图
``` <?php // 定义铭感词数组 $sensitive_words = array('你妈','傻逼'); // 定义铭感词替换字符 $replace_word = '**'; // 使用确定有穷自动机算法过滤铭感词 function filter($words,$replace_word){ // 定义构建的有穷自动机 $sMat = array(); // 遍历铭感词数组,构建有穷自动机 foreach($words as $word){ // 定义每一个铭感词的指针 $t = &$sMat; // 遍历每一个铭感词 for($i=0; $i<mb_strlen($word); $i++){ // 获取当前字符 $char = mb_substr($word, $i, 1); // 如果当前字符指针不存在,设置为空数组 if(!isset($t[$char])){ $t[$char] = array(); } // 跳到下一个字符 $t = &$t[$char]; } // 设置结束标识,用于标识一个铭感词已经被匹配 $t['end'] = 1; } // 用于存放过滤后的文本 $result = ''; // 遍历要处理的文本 for($i=0; $i<mb_strlen($words); $i++){ // 获取当前字符 $char = mb_substr($words, $i, 1); // 获取当前字符的指针 $t = &$sMat; // 如果当前字符的指针存在,则跳到下一个字符 if(isset($t[$char])){ $t = &$t[$char]; // 如果当前字符的指针存在结束标识,表示匹配到一个铭感词,忽略该铭感词,用替换字符替换 if(isset($t['end'])){ $result .= $replace_word; // 跳过铭感词 $i += mb_strlen($word) - 1; } } // 如果当前字符的指针不存在,则将该字符直接添加进结果字符串 else{ $result .= $char; } } // 返回结果 return $result; } // 要处理的文本 $words = '你妈的,小傻逼'; // 调用函数 echo filter($words,$sensitive_words,$replace_word); // 输出结果:**的,小** ```
上一篇:
什么是 Laravel Jetstream 及怎么使用它?
下一篇:
PHP判断请求协议是http还是https
标题录入,一次不能超过6条
批判性思维
T:0.007552s,M:246.55 KB
返回顶部
留言
留言
评论