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算法进行敏感词过滤相关推荐

  1. java使用DFA算法实现敏感词过滤

    Java使用DFA算法实现敏感词过滤 DFA,全称 Deterministic Finite Automaton 即确定有穷自动机. 其特征为:有一个有限状态集合和一些从一个状态通向另一个状态的边,每 ...

  2. spring boot 使用DFA算法实现敏感词过滤

    spring boot 使用DFA算法实现敏感词过滤 敏感词.文字过滤是一个网站必不可少的功能,如何设计一个好的.高效的过滤算法是非常有必要的. DFA算法简介 DFA全称为:Deterministi ...

  3. 基于PHP的DFA算法(敏感词过滤)

    基于PHP的DFA算法(敏感词过滤) 看到网上很多的DFA算法,很多都有不同程度的问题,自己修改了一下,亲测没有问题,用在系统中过滤敏感词汇,比正则匹配的速度快很多. class DFA {priva ...

  4. java dfa 敏感词_java利用DFA算法实现敏感词过滤功能

    前言 敏感词过滤应该是不用给大家过多的解释吧?讲白了就是你在项目中输入某些字(比如输入xxoo相关的文字时)时要能检 测出来,很多项目中都会有一个敏感词管理模块,在敏感词管理模块中你可以加入敏感词,然 ...

  5. DFA算法实现敏感词过滤

    写项目时,得到一个新的需求,即实现敏感词的过滤,上网查了下,有几种实现方法,采取了DFA算法,即确定的有穷自动机算法,当初学习编译原理的时候为啥没想到DFA还能这么做,看来眼界和意识还是不够,得锻炼. ...

  6. 一种基于DFA算法的敏感词检测JAVA程序片段

    本文章提供一种基于DFA算法的敏感词检测JAVA程序片段,如下: 1.构造多叉树数据结构 import org.jetbrains.annotations.NotNull;/*** 多叉树* @aut ...

  7. dfa算法 java_Java实现DFA算法对敏感词、广告词过滤功能示例

    一.前言 开发中经常要处理用户一些文字的提交,所以涉及到了敏感词过滤的功能,参考资料中DFA有穷状态机算法的实现,创建有向图.完成了对敏感词.广告词的过滤,而且效率较好,所以分享一下. 具体实现: 1 ...

  8. python实现dfa过滤算法_DFA 算法实现敏感词过滤(python 实现)

    敏感词过滤的经典算法DFA ,看完相关资料后,自己实现了一下,同时做了评估实验 先上代码 #!/usr/bin/python2.6 # -*- coding: utf-8 -*- import tim ...

  9. TypeScript:Aho–Corasick算法实现敏感词过滤

    敏感词过滤应该是许多后端同事经常会遇到的需求,无论是评论.弹幕.文章,都需要做敏感词过滤处理来规避风险.在前端开发中,使用replace函数来替换字符串是我们的常规操作,在这之前我思考过如果用Java ...

最新文章

  1. Python函数及其参数
  2. React history.push 传递参数
  3. [译]NGINX 和 ZooKeeper,动态负载平衡和部署(上)
  4. 网络搜索,抵制日货的新方法
  5. Android Resources
  6. 大数据互联网架构阶段 大型电商项目数据库设计时应该注意的点
  7. 渗透测试入门DVWA 教程1:环境搭建
  8. 线程间通信————同步
  9. java计算棋盘上的麦粒
  10. Pywick:追求功能完备的PyTorch高级训练库
  11. Java操作Mongodb 保存/读取java对象到/从mongodb
  12. asp.net 获取计算机启动时间
  13. DirectShow之视频渲染
  14. ak4495驱动linux源码,解码芯片由一片变成两片后——升级双AK4495S芯片的香榭丽舍一体机...
  15. 2021 iOS面试题大全---全方面剖析面试(一)
  16. 对称加密+非对称加密,实现数据安全传输
  17. swper_Swiper 中文API手册(share)
  18. Oracle 表空间时点恢复(TSPITR)
  19. 舆情监测技术TOOM,web技术实现
  20. VBA 32位代码适配64位

热门文章

  1. 高斯过程回归(六)核函数
  2. 2022年辽宁最新初级消防员模拟试题题库及答案
  3. 使用java实现自动扫雷
  4. 生活不只有BAT,还有这些市值超1000亿的快消公司
  5. php析构函数有什么用,php析构函数的作用
  6. SLAM系列——视觉里程计(特征法)
  7. Maxon Cinema 4D Studio(C4D) R20.026 macOS安装破解
  8. 戴尔INSPIRON 14-7472 DDH40 DDH50 LA-F251P r1.0笔记本图纸
  9. html输入框素材,CSS输入框选中效果
  10. Socket编程概念和 Socket之异步TCP客户端断线重连