DFA算法进行敏感词过滤
1.新建敏感词文本new_adress.txt,进行添加敏感词
2.代码
# -*- coding:utf-8 -*-
import timetime1 = time.time()
"""
DFA算法:
它的基本思想是基于状态转移来检索敏感词,只需要扫描一次待检测文本,就能对所有敏感词进行检测
"""# DFA算法
class DFAFilter(object):def __init__(self):self.keyword_chains = {} # 关键词链表self.delimit = '\x00' # 限定#将敏感词内容添加关键词链表def add(self, keyword):keyword = keyword.lower() # 关键词英文变为小写chars = keyword.strip() # 关键字去除首尾空格和换行if not chars: # 如果关键词为空直接返回returnlevel = self.keyword_chains# 遍历关键字的每个字for i in range(len(chars)):# 如果这个字已经存在字符链的key中就进入其子字典if chars[i] in level:level = level[chars[i]]print(level)else:#isinstance(level, dict)判断是否是一个类型,是返回Trueif not isinstance(level, dict):print("print(level)",level)breakfor j in range(i, len(chars)):level[chars[j]] = {}last_level, last_char = level, chars[j]level = level[chars[j]]last_level[last_char] = {self.delimit: 0}breakif i == len(chars) - 1:level[self.delimit] = 0#读取敏感词内容def parse(self, path):with open(path, encoding='utf-8') as f:for keyword in f:self.add(str(keyword).strip())# print(self.keyword_chains)#过滤关键词def filter(self, message, repl="*"):print(self.keyword_chains)message = message.lower()ret = []start = 0while start < len(message):level = self.keyword_chainsstep_ins = 0for char in message[start:]:if char in level:step_ins += 1if self.delimit not in level[char]:level = level[char]# print("no",level)else:ret.append(repl * step_ins)# print(ret)start += step_ins - 1breakelse:ret.append(message[start])breakelse:ret.append(message[start])start += 1return ''.join(ret)if __name__ == "__main__":gfw = DFAFilter()path='new_adress.txt'gfw.parse(path)text = "安徽省合肥市蜀山区"result = gfw.filter(text)print(result)time2 = time.time()print('总共耗时:' + str(time2 - time1) + 's')
3.运行获取的结果
DFA算法进行敏感词过滤相关推荐
- java使用DFA算法实现敏感词过滤
Java使用DFA算法实现敏感词过滤 DFA,全称 Deterministic Finite Automaton 即确定有穷自动机. 其特征为:有一个有限状态集合和一些从一个状态通向另一个状态的边,每 ...
- spring boot 使用DFA算法实现敏感词过滤
spring boot 使用DFA算法实现敏感词过滤 敏感词.文字过滤是一个网站必不可少的功能,如何设计一个好的.高效的过滤算法是非常有必要的. DFA算法简介 DFA全称为:Deterministi ...
- 基于PHP的DFA算法(敏感词过滤)
基于PHP的DFA算法(敏感词过滤) 看到网上很多的DFA算法,很多都有不同程度的问题,自己修改了一下,亲测没有问题,用在系统中过滤敏感词汇,比正则匹配的速度快很多. class DFA {priva ...
- java dfa 敏感词_java利用DFA算法实现敏感词过滤功能
前言 敏感词过滤应该是不用给大家过多的解释吧?讲白了就是你在项目中输入某些字(比如输入xxoo相关的文字时)时要能检 测出来,很多项目中都会有一个敏感词管理模块,在敏感词管理模块中你可以加入敏感词,然 ...
- DFA算法实现敏感词过滤
写项目时,得到一个新的需求,即实现敏感词的过滤,上网查了下,有几种实现方法,采取了DFA算法,即确定的有穷自动机算法,当初学习编译原理的时候为啥没想到DFA还能这么做,看来眼界和意识还是不够,得锻炼. ...
- 一种基于DFA算法的敏感词检测JAVA程序片段
本文章提供一种基于DFA算法的敏感词检测JAVA程序片段,如下: 1.构造多叉树数据结构 import org.jetbrains.annotations.NotNull;/*** 多叉树* @aut ...
- dfa算法 java_Java实现DFA算法对敏感词、广告词过滤功能示例
一.前言 开发中经常要处理用户一些文字的提交,所以涉及到了敏感词过滤的功能,参考资料中DFA有穷状态机算法的实现,创建有向图.完成了对敏感词.广告词的过滤,而且效率较好,所以分享一下. 具体实现: 1 ...
- python实现dfa过滤算法_DFA 算法实现敏感词过滤(python 实现)
敏感词过滤的经典算法DFA ,看完相关资料后,自己实现了一下,同时做了评估实验 先上代码 #!/usr/bin/python2.6 # -*- coding: utf-8 -*- import tim ...
- TypeScript:Aho–Corasick算法实现敏感词过滤
敏感词过滤应该是许多后端同事经常会遇到的需求,无论是评论.弹幕.文章,都需要做敏感词过滤处理来规避风险.在前端开发中,使用replace函数来替换字符串是我们的常规操作,在这之前我思考过如果用Java ...
最新文章
- Python函数及其参数
- React history.push 传递参数
- [译]NGINX 和 ZooKeeper,动态负载平衡和部署(上)
- 网络搜索,抵制日货的新方法
- Android Resources
- 大数据互联网架构阶段 大型电商项目数据库设计时应该注意的点
- 渗透测试入门DVWA 教程1:环境搭建
- 线程间通信————同步
- java计算棋盘上的麦粒
- Pywick:追求功能完备的PyTorch高级训练库
- Java操作Mongodb 保存/读取java对象到/从mongodb
- asp.net 获取计算机启动时间
- DirectShow之视频渲染
- ak4495驱动linux源码,解码芯片由一片变成两片后——升级双AK4495S芯片的香榭丽舍一体机...
- 2021 iOS面试题大全---全方面剖析面试(一)
- 对称加密+非对称加密,实现数据安全传输
- swper_Swiper 中文API手册(share)
- Oracle 表空间时点恢复(TSPITR)
- 舆情监测技术TOOM,web技术实现
- VBA 32位代码适配64位
热门文章
- 高斯过程回归(六)核函数
- 2022年辽宁最新初级消防员模拟试题题库及答案
- 使用java实现自动扫雷
- 生活不只有BAT,还有这些市值超1000亿的快消公司
- php析构函数有什么用,php析构函数的作用
- SLAM系列——视觉里程计(特征法)
- Maxon Cinema 4D Studio(C4D) R20.026 macOS安装破解
- 戴尔INSPIRON 14-7472 DDH40 DDH50 LA-F251P r1.0笔记本图纸
- html输入框素材,CSS输入框选中效果
- Socket编程概念和 Socket之异步TCP客户端断线重连