# coding=utf-8
import time
time1 = time.time()# 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]]else:if not isinstance(level, dict):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] = 0def 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="*"):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]else:ret.append(repl * step_ins)start += step_ins - 1breakelse:ret.append(message[start])breakelse:ret.append(message[start])start += 1return ''.join(ret)if __name__ == "__main__":gfw = DFAFilter()path = "/Users/Alex/Desktop/toc_backend/db/sensetive_words.txt"# path = "/root/backend/db/sensetive_words.txt"gfw.parse(path)text = "你真是个大傻逼,大傻子,傻大个,大坏蛋,坏人。"text = "好好学习,天天向上"result = gfw.filter(text)print(text)print(result)if text == result:print("ok")else:print("not ok")time2 = time.time()print('总共耗时:' + str(time2 - time1) + 's')

  

sensetive_words.txt

傻逼傻子傻大个坏蛋坏人恶霸

转载于:https://www.cnblogs.com/adamans/articles/10702104.html

DFA算法敏感词过滤相关推荐

  1. 算法-DFA算法-敏感词过滤算法(OC、Swift、Python)

    前言 前段时间,公司的IM SDK想做敏感词过滤,但是后端的小伙伴<比较忙>,在开产品需求会的时候想把敏感词过滤放到前端,让iOS.安卓自己搞,但是前端小伙伴写了一个方法来检测一段文本,耗 ...

  2. dfa算法c语言,DFA跟trie字典树实现敏感词过滤(python和c语言)

    DFA和trie字典树实现敏感词过滤(python和c语言) 现在做的项目都是用python开发,需要用做关键词检查,过滤关键词,之前用c语言做过这样的事情,用字典树,蛮高效的,内存小,检查快. 到了 ...

  3. 敏感词过滤 - DFA算法[确定有穷自动机]的Java 实现

    文章目录 敏感词过滤 - DFA算法[确定有穷自动机]的Java 实现 敏感词过滤 - DFA算法[确定有穷自动机]的Java 实现 代码如下 package utils;import com.goo ...

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

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

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

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

  6. dfa算法 java_java实现敏感词过滤(DFA算法)

    小Alan在最近的开发中遇到了敏感词过滤,便去网上查阅了很多敏感词过滤的资料,在这里也和大家分享一下自己的理解. 在写之前,小Alan给大家推荐一篇来自http://cmsblogs.com/?p=1 ...

  7. 对敏感词过滤(DFA算法)的思考与理解

    对敏感词过滤的思考与理解 一.技术概述 1.这个技术是干什么用的? 2.学习这个技术的原因 3.技术的难点在哪 二.技术详述 1.流程图 2.代码 三.技术过程中遇见的问题和解决过程 四.总结 五.参 ...

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

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

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

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

最新文章

  1. 【PL/SQL】--导出oracle单表数据--drp204
  2. python如何调用cpp文件的接口函数_C++中嵌入Python调用
  3. 在hibernate中使用c3p0数据源
  4. 花式云毕业:《我的世界》建大学,日本机器人替身领证 | 网友:搞点阳间的东西...
  5. WPF学习笔记(二):初学者避坑实录
  6. 《自然》年度十大人物:天才曹原居首 贺建奎来去匆匆
  7. Chrome浏览器可以修改特定页面背景色吗?Chrome浏览器修改特定页面背景色的方法
  8. 添加mysql库路径_修改MySQL数据库存放路径
  9. bootstrap 栅格系统实现类似table跨行
  10. Attributes as Operators
  11. # 2gether 在一起 # 2 号星际碎片现身,全军出击!
  12. 网页应该如何录屏呢?
  13. 快速排序——寻找数组第K大数(由浅入深,四种方法对比讲解!)
  14. MySQL Manual
  15. 红队武器库-网络安全人员必备
  16. Spring Gateway路由网关
  17. 【数电】如何使用74LS112(或74LS74)构成一个十四分频器(模七计数器)
  18. SAE J2534协议 车辆诊断编程接口
  19. jfinal hutool工具 excelUtil ZipUtil实现导出excel并压缩文件
  20. 免费企业邮箱和收费企业邮箱有哪些区别?企业邮箱如何申请!

热门文章

  1. 清华大学,2023年首篇Nature
  2. 新手餐饮收银员应该知道的基础知识
  3. QT5.12 Ui界面开发项目:QOpenGLShaderProgram::uniformLocation(model): shader program is not linked
  4. 在遭到勒索软件攻击时_勒索软件海啸在这里不要成为受害者
  5. 【WPF】环形进度条
  6. 做WEB2.0网站可以参考的的十九条规则!
  7. Android动态测量控件高度(Relatelayout,viewpager)并动态设置高度
  8. [绍棠] freemarker声明变量
  9. 云创大数据与湖北文理学院正式签订校企合作协议
  10. 什么是淘宝关键词以及如何查找关键词的方法