工作中遇到一个过滤敏感词汇的问题,网上找了一下主要解决方法有3种思路:
【可行思路】
1、暴力匹配–这个就算了,只是说说而已,实际应用中很少的。
2、正则表达式,暂时没有用过
3、利用DFA实现文字过滤,
本文主要研究的就是DFA算法,在计算理论中,确定有限状态自动机或确定有限自动机(英语:deterministic finite automation, DFA)是一个能实现状态转移的自动机。对于一个给定的属于该自动机的状态和一个属于该自动机字母表的字符,它都能根据事先给定的转移函数转移到下一个状态(这个状态可以是先前那个状态)。以上是wiki上的介绍,通俗点来讲就是实现了一个链表,每个元素是一个字典,字典中存储的是敏感词的单位子串,子串也是一个链表元素内容也是一个字典,描述起来有点绕,还是图来的实在:
python代码实现:
1 | # -*- coding:utf-8 -*- |
14600个敏感词汇查询10000次,普通暴力和dfa对比测试结果:
1 | ----------------dfa----------- |