dfa 算法

  1. 创建字典树
  2. 对输入的词典进行匹配

创建节点 这里的结点就是上面那幅图

package DFAtype Node struct {//结束End bool//节点Next map[rune]*Node
}// AddChild  add char
func (n *Node) AddChild(c rune) *Node {if n.Next == nil {n.Next = make(map[rune]*Node)}// 这个字符存在 直接返回if node, ok := n.Next[c]; ok {return node} else {n.Next[c] = &Node{End:  false,Next: nil,}}return n.Next[c]
}// FindChild find char
func (n *Node) FindChild(c rune) *Node {if n.Next == nil {return nil}if node, ok := n.Next[c]; ok {return node}return nil
}// AddWords add words
func (n *Node) AddWords(w string) {node := nr := []rune(w)for i, _ := range r {node = node.AddChild(r[i])}node.End = true
}

AddChild 字典树中添加字符
FindChild 查询字符
AddWords 添加单词

package DFAtype DFAMatcher struct {Root *Node
}func NewDFAMatcher() *DFAMatcher {return &DFAMatcher{Root: &Node{End: false,},}
}
func (D *DFAMatcher) Build(strings []string) {for i := range strings {D.Root.AddWords(strings[i])}
}//  Match 匹配
func (D *DFAMatcher) Match(text string) bool {runes := []rune(text)child := D.Rootfor i := 0; i < len(runes); i++ {//如果没有 ,就往下面找findChild := child.FindChild(runes[i])if findChild == nil {//如果没有匹配 在差从根节点查询node := D.Root.FindChild(runes[i])if node == nil {continue}//把当前节点给查询节点child = nodecontinue}if findChild.End == true {return true}//把根节点换成当前节点child = findChild}return false
}

Build 构建字典树
Match 匹配铭感词 // true 存在 false 不存在
这里的Match()方法可以抽一个接口出来,这样可以自定义我们别的过滤算法

DFA 敏感词过滤算法相关推荐

  1. 敏感词过滤算法 为内容保驾护航 Java/.Net/C++/c/Python等语言是如何进行敏感词打码限制的 高效防范违规内容

    有人的地方,就有江湖,有输入框的地方,就有注入风险!有输入框的地方,就有敏感词!敏感词就像一个平台杀手,可能直接导致平台被封锁! 敏感词是一个APP.一个网站.一个内容平台的"杀手" ...

  2. trie树之敏感词过滤算法

    之前写过一篇关于Trie树的介绍:Trie树--在一个字符串集合中快速查找某个字符串.今天就用Trie树来实现敏感词过滤算法. 首先简单介绍一下Trie树的数据结构: 1.根节点不存储字符. 2.Tr ...

  3. 【C++】实现敏感词过滤算法(含源码)

    敏感词过滤算法(聚合词树查询法) 1.构建词树 2.敏感词判断 3.遍历文本 关于敏感词过滤算法,数不胜数,在参考众多算法后,选取了比较实用的算法,进行总结与改进.大家可以参考一下链接: 敏感词过滤算 ...

  4. 浅析过滤敏感词过滤算法(C++)

    本文转自浅析敏感词过滤算法(C++),自己也在其基础上根据自己的情况做了一点修改. 为了提高查找效率,这里将敏感词用树形结构存储,每个节点有一个map成员,其映射关系为一个string对应一个Word ...

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

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

  6. 记录一次敏感词过滤算法DFA的应用案例

    目录 0. DFA是什么? 1.为什么要用DFA 2.DFA工具类实现 3.性能对比效果 3.1 普通关键字过滤 3.2 DFA关键字过滤 0. DFA是什么? 参考文档:敏感词过滤的算法原理之DFA ...

  7. java实现敏感词过滤算法DFA并忽略敏感词中的特殊字符

    参考文章:https://blog.csdn.net/chenssy/article/details/26961957 补充说明: 1.具体的DFA介绍参考原文章,此处只是补充了文章中没有介绍的点以及 ...

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

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

  9. 【python 走进NLP】英文敏感词过滤算法改进版本

    中文DFA算法过滤敏感词改进版本 # 中文DFA算法过滤敏感词改进版本 class Chinese_DFAFilter():def __init__(self):self.keyword_chains ...

  10. 敏感词过滤算法:前缀树算法

    背景 平时我们在逛贴吧的时候,我们经常可以看到一些形如 "***"的符号,通过上下文,我们也可以很容易猜到这些词原来是骂人的话,只是被系统和谐了.那么这是如何实现的呢?作为普通人, ...

最新文章

  1. 计算机学院特色游戏,网络游戏七大特点浅析
  2. linux磁盘分配方案,张明贵-Linux磁盘分区方案
  3. 预警数据一键升级工具_重磅 | 教务管理全新升级,“章鱼校长”助力机构实现轻松管理...
  4. 操作系统实验报告4:Linux 下 x86 汇编语言3
  5. JavaScript0-闭包
  6. django表单提交案例
  7. 英特尔处理器的性能监控事件文件下载
  8. python画图渐变颜色的代号_plt绘图颜色渐变以及colormap
  9. MySQL问题解决:-bash:mysql:command not found
  10. oracle 多表视图更新
  11. responseentity 详解_大六壬毕法赋精注详解(1)【六壬】
  12. 【转】极品免费网站空间申请:000webhost.com免费1.5G美国空间PHP+MySQL
  13. 系统架构设计师与系统分析师历年实体分析与解答下载_架构设计的本质
  14. 卸载Office密钥或删除序列号
  15. 《大电机技术》期刊简介
  16. Leetcode惊现马化腾每天刷题?为啥大佬都这么努力!
  17. 【重点】心田花开:人教版初一语文上册《从百草园到三味书屋》知识点
  18. iphone手机如何修改Apple ID密码
  19. 积木拼图游戏-积木游戏世界中文版
  20. Opencv学习笔记5:Opencv处理彩虹图、铜色图、灰度反转图

热门文章

  1. CTF学习笔记(杂项)
  2. 雅虎前端优化35条军规
  3. linux环境编程apue和unp,UNIX高级环境编程:源码(apue)下载 编译和运行
  4. 2021.10.13 向日葵黑屏驱动卸载方法
  5. 清理注册表 php,cad注册表怎么删干净
  6. php输出excel乱码,如何解决php导出excel乱码的问题
  7. edius隐藏快捷键_EDIUS7 Pro快捷键使用方法及全部快捷键功能
  8. vim 操作命令大全
  9. 点云sift matlab,点云配准SIFT算法
  10. 天涯明月刀登录的界面服务器显示,上述便是Win10系统下登录天涯明月刀提示异地登录不了的详细解决方法了...