基于PHP的DFA算法(敏感词过滤)

看到网上很多的DFA算法,很多都有不同程度的问题,自己修改了一下,亲测没有问题,用在系统中过滤敏感词汇,比正则匹配的速度快很多。

class DFA
{private $arrHashMap = [];public function getHashMap(){return $this->arrHashMap;}public function addKeyWord($strWord){$len = mb_strlen($strWord, 'UTF-8');// 传址$arrHashMap = &$this->arrHashMap;for ($i = 0; $i < $len; $i++) {$word = mb_substr($strWord, $i, 1, 'UTF-8');// 已存在if (isset($arrHashMap[$word])) {if ($i == ($len - 1)) {$arrHashMap[$word]['end'] = 1;}} else {// 不存在if ($i == ($len - 1)) {$arrHashMap[$word] = [];$arrHashMap[$word]['end'] = 1;} else {$arrHashMap[$word] = [];$arrHashMap[$word]['end'] = 0;}}// 传址$arrHashMap = &$arrHashMap[$word];}}/*** 搜索并替换* @param $strWord* @return string|string[]|null*/public function searchKey($strWord){$len = mb_strlen($strWord, 'UTF-8');$arrHashMap = $this->arrHashMap;$keywords = '';for ($i = 0; $i < $len; $i++) {$word = mb_substr($strWord, $i, 1, 'UTF-8');if (!isset($arrHashMap[$word])) {$keywords = '';$arrHashMap = $this->arrHashMap;continue;}$keywords .= $word;if ($arrHashMap[$word]['end'] == 1 ) {$strWord = preg_replace('/' . $keywords . '/i', str_repeat('*', mb_strlen($keywords)), $strWord, 1);$keywords = '';$arrHashMap = $this->arrHashMap;}else{if(!isset($arrHashMap[$word][mb_substr($strWord, $i + 1, 1, 'UTF-8')])){$keywords = '';$arrHashMap = $this->arrHashMap;}else{$arrHashMap = $arrHashMap[$word];}}}return $strWord;}
$DFA = new DFA();
$DFA->addKeyWord('太难了');
$DFA->addKeyWord('非常难');
$DFA->searchKey('我真的是太难了而且非常难');

基于PHP的DFA算法(敏感词过滤)相关推荐

  1. 算法-DFA算法-敏感词过滤算法(OC、Swift、Python)

    前言 前段时间,公司的IM SDK想做敏感词过滤,但是后端的小伙伴<比较忙>,在开产品需求会的时候想把敏感词过滤放到前端,让iOS.安卓自己搞,但是前端小伙伴写了一个方法来检测一段文本,耗 ...

  2. DFA算法敏感词过滤

    # coding=utf-8 import time time1 = time.time()# DFA算法 class DFAFilter(object):def __init__(self):sel ...

  3. 基于DFA算法实现文章敏感词过滤

    最近公司要出一个论坛系统 因为最近貌似xxx查的也比较严,所以图片和文字安全一样要注意 其中文字就涉及到敏感字过滤的问题 目前大概流传两种解决办法: 1.利用分词器分词实现过滤 比如见得比较多的 IK ...

  4. dfa算法c语言,DFA跟trie字典树实现敏感词过滤(python和c语言)

    DFA和trie字典树实现敏感词过滤(python和c语言) 现在做的项目都是用python开发,需要用做关键词检查,过滤关键词,之前用c语言做过这样的事情,用字典树,蛮高效的,内存小,检查快. 到了 ...

  5. DFA算法进行敏感词过滤

    1.新建敏感词文本new_adress.txt,进行添加敏感词 2.代码 # -*- coding:utf-8 -*- import timetime1 = time.time() "&qu ...

  6. 字符串匹配算法 -- AC自动机 基于Trie树的高效的敏感词过滤算法

    文章目录 1. 算法背景 2. AC自动机实现原理 2.1 构建失败指针 2.2 依赖失败指针过滤敏感词 3. 复杂度及完整代码 1. 算法背景 之前介绍过单模式串匹配的高效算法:BM和KMP 以及 ...

  7. 敏感词过滤 - DFA算法[确定有穷自动机]的Java 实现

    文章目录 敏感词过滤 - DFA算法[确定有穷自动机]的Java 实现 敏感词过滤 - DFA算法[确定有穷自动机]的Java 实现 代码如下 package utils;import com.goo ...

  8. java使用DFA算法实现敏感词过滤

    Java使用DFA算法实现敏感词过滤 DFA,全称 Deterministic Finite Automaton 即确定有穷自动机. 其特征为:有一个有限状态集合和一些从一个状态通向另一个状态的边,每 ...

  9. java dfa 敏感词_java利用DFA算法实现敏感词过滤功能

    前言 敏感词过滤应该是不用给大家过多的解释吧?讲白了就是你在项目中输入某些字(比如输入xxoo相关的文字时)时要能检 测出来,很多项目中都会有一个敏感词管理模块,在敏感词管理模块中你可以加入敏感词,然 ...

最新文章

  1. Rethinking the inception architecture for computer vision的 paper 相关知识
  2. (chap2 简单的Http协议) HTTP性能优化之管线化pipelining
  3. tomcat配置文件详解
  4. Kafka单机、集群模式安装详解(一)
  5. 安卓开发首次创建项目一直转圈_Android视频开发进阶(part3Android的Media API)
  6. 关于uboot中tftp上传内存数据到tftp服务器
  7. epoll nio区别_什么是BIO,NIO与AIO
  8. 继承ActionSupport 实现Action与属性驱动传参
  9. 百度开放平台Demo提示“Key验证失败...”的问题
  10. idea中配置代码模板
  11. 海马玩模拟器无法链接问题处理
  12. 高老师的架构设计_隽语集(AA_0151)
  13. 一万一千字!结合代码超详细讲解SQL执行流程(二)!干货到底!建议收藏!
  14. C#中的作用Read()和ReadLine()
  15. Selenium基础知识 多窗口处理
  16. 我看车展感(tu)想(cao)
  17. Centos7笔记之Postfix邮件服务器搭建
  18. #hihocoder #1135 : Magic Box
  19. mac brew 测速 软件_最好用的网络测速工具speedtest
  20. 虚拟技术应用——网络虚拟商城系统

热门文章

  1. Python实现英文课件翻译中文
  2. 修改级联组件el-cascader默认文字样式
  3. 工商银行卡网上查询开户行
  4. 用jupyter打开ipynb文件并运行
  5. 函数式编程语言收藏列表
  6. Java 注释(Java Doc Comment)与注解(Annotation)
  7. 如何选择云笔记工具?可以用云笔记做什么?
  8. 中文信息处理发展报告(2016)
  9. 关于kendo.ui父页面调用子页面的方法问题
  10. html table水平和垂直滚动条,Ajax: Excel风格的HTML Table输入控件[二]:外部表格与水平垂直滚动条...