https://github.com/toolgood/ToolGood.Words

名为DFA的算法,即Deterministic Finite Automaton算法,翻译成中文就是确定有穷自动机算法。它的基本思想是基于状态转移来检索敏感词,只需要扫描一次待检测文本,就能对所有敏感词进行检测

假设我们有以下5个敏感词需要检测:傻逼、傻子、傻大个、坏蛋、坏人。那么我们可以先把敏感词中有相同前缀的词组合成一个树形结构,不同前缀的词分属不同树形分支,以上述5个敏感词为例,可以初始化成如下2棵树:

image.png

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, cache_name, path):with open(path, encoding='utf-8') as f:for keyword in f:self.add(str(keyword).strip())f = f.read()# 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)

http://www.taodudu.cc/news/show-4860750.html

相关文章:

  • 敏感词过滤+AOP
  • hyperMILL自动程序单后处理刀库模板制作视频教程
  • UG10.0四五轴立加卧加后处理制作教程
  • 绝对干货硬核实用作品教程——DIY制作空气净化器全过程,可能是年度最佳创客DIY作品(微长)...
  • 3D建模新手无法掌握角色建模技巧?机器猫模型制作流程,学会很轻松!
  • petalinux制作自动启动应用过程中遇到的问题解决
  • 来了!STM32移植LuatOS,潘多拉示例全新教程
  • ZigBee 3.0教程-步骤6:物理接口-Light
  • ug五轴编程视频教程
  • UG10.0三四五轴零件模具拆电极编程加工全套视频教程
  • 图像矢量化
  • 计算机班徽设计英语,《计算机1班徽设计大赛》.ppt
  • arcgis的基本使用1
  • arcgis根据7参转坐标_ArcGIS坐标转换操作实战(反算七参数)
  • 基于easyX和vs使用c++绘制坐标系以及实时显示
  • 测量计算器程序
  • 使用Python做中文分词和绘制词云
  • DOM基于inpho软件二次加工的出图方法
  • 弘辽科技:拼多多主图不能换吗?怎么做吸引人?
  • 初探arcgis的python脚本的使用 (三)
  • windows查看端口占用情况相关命令
  • macos查看端口占用情况
  • linux教程:查看端口占用情况及开放关闭端口
  • 查看端口占用情况(Windows环境)
  • 【u8+】调账提示:此分录已两清,不能删除或修改
  • 用友ERP U8 其他出入库单据后台记账SQL语句
  • 用友注册表看服务器地址,T3客户端注册表配置服务器方法能写给我吗
  • 从哪里查看计算机日期格式,进记账宝,提示下图,检查了计算机日期格式为‘-’,换台电脑也是不行,是哪里原因...
  • 用友软件日常操作方法
  • xp系统t3登录不到服务器,用友T3软件服务器xp系统,客户端xp系统,登不上服务器...

python 敏感词过滤相关推荐

  1. python敏感词过滤代码简单代码_Python实现敏感词过滤的4种方法

    在我们生活中的一些场合经常会有一些不该出现的敏感词,我们通常会使用*去屏蔽它,例如:尼玛 -> **,一些骂人的敏感词和一些政治敏感词都不应该出现在一些公共场合中,这个时候我们就需要一定的手段去 ...

  2. python敏感词过滤代码简单_大型企业都在用,Python实现敏感词过滤

    在我们生活中的一些场合经常会有一些不该出现的敏感词,我们通常会使用*去屏蔽它,例如:尼玛 -> **,一些骂人的敏感词和一些政治敏感词都不应该出现在一些公共场合中,这个时候我们就需要一定的手段去 ...

  3. python敏感词过滤replace_Serverless 实战:3 分钟实现文本敏感词过滤

    敏感词过滤是随着互联网社区一起发展起来的一种阻止网络犯罪和网络暴力的技术手段,通过对可能存在犯罪或网络暴力的关键词进行有针对性的筛查和屏蔽,能够防患于未然,将后果严重的犯罪行为扼杀于萌芽之中. 随着各 ...

  4. python敏感词过滤代码简单代码_Python 实现王者荣耀中的敏感词过滤示例

    Python 实现王者荣耀中的敏感词过滤示例 王者荣耀的火爆就不用说了,但是一局中总会有那么几个挂机的,总能看到有些人在骂人,我们发现,当你输入一些常见的辱骂性词汇时,系统会自动将该词变成" ...

  5. python敏感词过滤代码简单代码,Python学习笔记系列——读写文件以及敏感词过滤器的实现...

    一.读文件 #打开文件,传入文件名和标识符,r代表读 f= open('\\Users\ZC\Desktop\zc.txt','r') #调用read方法一次性读取文件的全部内容,存入内存,用str对 ...

  6. python过滤敏感词汇_浅谈Python 敏感词过滤的实现

    一个简单的实现 class NaiveFilter(): '''Filter Messages from keywords very simple filter implementation > ...

  7. python骂人的程序_Python实现敏感词过滤的4种方法

    在我们生活中的一些场合经常会有一些不该出现的敏感词,我们通常会使用*去屏蔽它,例如:尼玛 -> **,一些骂人的敏感词和一些政治敏感词都不应该出现在一些公共场合中,这个时候我们就需要一定的手段去 ...

  8. python爬取整个网站的广告敏感词_Python实现敏感词过滤的4种方法

    在我们生活中的一些场合经常会有一些不该出现的敏感词,我们通常会使用*去屏蔽它,例如:尼玛 -> **,一些骂人的敏感词和一些政治敏感词都不应该出现在一些公共场合中,这个时候我们就需要一定的手段去 ...

  9. python中哪些词是敏感字词_python实现敏感词过滤的几种方法

    1.replace过滤 最简单也是最直接的就是直接循环敏感词,然后使用replace过滤关键词,文章和敏感词少的时候还可以,多的时候效率就真的很一般了. 2.使用正则过滤 有两个技术要点, 1.使用P ...

最新文章

  1. PCLPCL/OpenNI tutorial 2: Cloud processing (basic)
  2. 第二单元linux系统
  3. 光流 速度_[论文笔记] FlowNet 光流估计
  4. 苹果手机各种型号图片_2020年12月小米/红米手机推荐|小米/红米手机选购要点|小米/红米手机性价比推荐,干货满满...
  5. PMCAFF | 用户体验中4个你不曾知晓的秘密
  6. 如何通过css选取元素以及封装了获取,删除css的相关操作
  7. 七十八、SpringBoot监听rabbitmq和创建交换器,队列
  8. QT学习:QPainter与QPainterPath
  9. laravel打印sql语句_SQL语句为什么慢?索引为什么失效?
  10. 学习笔记(二)JavaScript基本概念(语法,数据类型,控制语句,函数)
  11. C#LeetCode刷题之#530-二叉搜索树的最小绝对差(Minimum Absolute Difference in BST)
  12. java 接口 设计模式吗_JAVA接口设计模式-工厂模式
  13. OpenShift 4 - 查看Node上的日志
  14. php mail laravel,Laravel框架实现的使用smtp发送邮件功能示例
  15. oracle约束 1或0,Oracle笔记(十) 约束
  16. 关于无盘工作站的初步了解(RPL/PXE)
  17. intel c语言面试题,Intel的一道C语言笔试题
  18. Gstreamer学习笔记(5):GStreamer Pad and Capabilities Negotiation
  19. 软件生命周期是什么?
  20. 考研复习之数据结构笔记(九)树(上)(树和二叉树的概念、特征、性质及相关实例)

热门文章

  1. 2023 年用于 Python 移动应用程序开发的流行工具
  2. iOS固件SHSH备份工具TinyUmbrella 5.00.12a更
  3. 图像分割__阈值分割
  4. 麒麟信安云推动河北省某检察院“智慧检务”跨越式发展
  5. Mysql学习宝典(六) -- 数据库锁表及阻塞的几大常见原因和解决办法
  6. 2020美赛数学建模 校级培训——Week_3
  7. 《人类简史》十四、开启未来(上)——智人的灭亡
  8. 联想小新Air14使用傲梅分区助手进行硬盘克隆出现的问题,克隆完显示RAW格式解决方案,win10家庭版硬盘BitLocker上锁解锁方法
  9. Eclipse显示代码行数的3种方法
  10. 电子时钟的设计与实现