前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >sensitive-words 基于DFA算法实现的敏感词过滤算法

sensitive-words 基于DFA算法实现的敏感词过滤算法

原创
作者头像
weylan
修改2021-11-17 08:13:38
1.4K0
修改2021-11-17 08:13:38
举报
文章被收录于专栏:小石头记

在实现文字过滤的算法中,DFA是唯一比较好的实现算法。

DFA 全称为:Deterministic Finite Automaton,即确定有穷自动机。其特征为:有一个有限状态集合和一些从一个状态通向另一个状态的边,每条边上标记有一个符号,其中一个状态是初态,某些状态是终态。但不同于不确定的有限自动机,DFA 中不会有从同一状态出发的两条边标志有相同的符号。

简单点说就是,它是是通过 event 和当前的 state 得到下一个 state,即 event + state= nextstate。理解为系统中有多个节点,通过传递进入的 event,来确定走哪个路由至另一个节点,而节点是有限的。

二、 DFA 算法实践敏感词过滤

  1. 敏感词库构造

以王八蛋和王八羔子两个敏感词来进行描述,首先构建敏感词库,该词库名称为SensitiveMap,这两个词的二叉树构造为:

用 hash 表构造为:

代码语言:txt
复制
{

    "王":{

        "isEnd":"0",

        "八":{

            "羔":{

                "子":{

                    "isEnd":"1"

                },

                "isEnd":"0"

            },

            "isEnd":"0",

            "蛋":{

                "isEnd":"1"

            }

        }

    }

}
  1. 敏感词过滤

以上面例子构造出来的 SensitiveMap 为敏感词库进行示意,假设这里输入的关键字为:王八不好,流程图如下:

三、 优化思路

对于“王*八&&蛋”这样的词,中间填充了无意义的字符来混淆,在我们做敏感词搜索时,同样应该做一个无意义词的过滤,当循环到这类无意义的字符时进行跳过,避免干扰。

四、 项目地址

本文项目地址

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 二、 DFA 算法实践敏感词过滤
  • 三、 优化思路
  • 四、 项目地址
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档