PHP敏感词匹配算法,敏感词检测算法小结

本文简单介绍下敏感词或者脏词检测算法。

经典AC算法

经典的AC算法由三部分构成,goto表,fail表和output表,共包含四种具体的算法,分别是计算三张查找表的算法以及AC算法本身。

goto表是由模式集合P中的所有模式构成的状态转移自动机。(goto表就是一棵trie树)

failure表作用是在goto表中匹配失败后状态跳转的依据,这点与KMP中next表的作用相似。(这个表是trie树没有的,加了这个表,AC自动机就看起来不像一棵树,而像一个图)

output表示输出,又称:emits,即代表到达某个状态后某个模式串匹配成功

AC自动机本质上来说是一种基于trie树的kmp算法,AC算法需要三个函数来进行字符串匹配,而且这三个函数的求解都和一个确定的DFA(有限状态自动机)有关。

普通DFA算法

确定性有穷自动机,用于正则表达式的匹配,最长左子式匹配

使用hashmap

public void createKeyWord(String keyWord) {

Map nowMap = sensitiveWordMap;

for (Character c : keyWord.toCharArray()) {

Object obj = nowMap.get(c);

if (obj == null) {

Map childMap = new HashMap<>();

childMap.put("isEnd", "false");

nowMap.put(c, childMap);

nowMap = childMap;

} else {

nowMap = (Map) obj;

}

}

nowMap.put("isEnd", "true");

}

使用自定义数据结构

public class WordNode {

private int value; // 节点名称

private List subNodes; // 子节点

private boolean isLast;// 默认false

public WordNode(int value) {

this.value = value;

}

public WordNode(int value, boolean isLast) {

this.value = value;

this.isLast = isLast;

}

//......

}

doc

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值