一、什么是DFA算法
DFA 全称为:Deterministic Finite Automaton,即确定有穷自动机。其特征为:有一个有限状态集合和一些从一个状态通向另一个状态的边,每条边上标记有一个符号,其中一个状态是初态,某些状态是终态。但不同于不确定的有限自动机,DFA 中不会有从同一状态出发的两条边标志有相同的符号。
其实对于DFA算法的定义还是有点抽象,下面的图文并茂或许会对你有帮助!
词库的构造
以王八蛋和王八羔子两个敏感词来进行描述,首先构建敏感词库,该词库名称为SensitiveMap,这两个词的二叉树构造为:
用 hash 表构造为:
1 {2 "王": {3 "is_end": false,4 "八": {5 "is_end": false,6 "蛋": {7 "is_end": true8 },9 "羔": {10 "is_end": false,11 "子": {12 "is_end": true13 }14 }15 }16 }17 }
虽然这篇博客的实现方式是Java,但是对于DFA算法的理解,我觉得是非常透彻的。
二、Python代码实现
1 #!/usr/bin/env python
2 #-*- coding:utf-8 -*-
3 #@Time:2020/4/15 11:40
4 #@Software:PyCharm
5 __author__ = "JentZhang"
6 importjson7
8 MinMatchType = 1 #最小匹配规则,如:敏感词库["中国", "中国人"],语句:"我是中国人",匹配结果:我是[中国]人
9 MaxMatchType = 2 #最大匹配规则,如:敏感词库["中国", "中国人"],语句:"我是中国人",匹配结果:我是[中国人]
10
11
12 classDFAUtils(object):13 """
14 DFA算法15 ""