Python敏感词过滤DFA算法+免费附带敏感词库

article/2025/9/19 12:40:29

DFA简介参考:https://blog.csdn.net/chenssy/article/details/26961957

此篇是上述JAVA敏感词过滤的python版本,完整版本,修改版本

首先我们看看最终处理效果
实例1:
输入字符串
在这里插入图片描述
处理结果
在这里插入图片描述
核心代码:

SensitiveFilter类

框架如下

class SensitiveFilter:#初始化def __init__(self):self.initSensitiveWordMap(self.sensitiveWordList)...#构建敏感词库def initSensitiveWordMap(self,sensitiveWordList):...#检测文本中存在的敏感词def checkSensitiveWord(self,txt,beginIndex=0):...#得到输入字符串中敏感词列表def getSensitiveWord(self,txt):...#替换文本中的敏感词def replaceSensitiveWord(self,txt,replaceChar='*'):...

下面看具体的每个函数
Part 1

init函数 初始化

    def __init__(self):# file把敏感词库加载到列表中file = open(Dir_sensitive, 'r', encoding = 'ANSI')file_lst = file.readlines()self.sensitiveWordList = [i.split('\n')[0] for i in file_lst]# print(sensitiveWordList[:10])# file1把停用词加载到列表中file1 = open(Dir_stopWord, 'r', encoding = 'ANSI')file1_lst = file1.readlines()self.stopWordList = [i.split('\n')[0] for i in file1_lst]##得到sensitive字典self.sensitiveWordMap = self.initSensitiveWordMap(self.sensitiveWordList)

Part 2

initSensitiveWordMap函数 构建敏感词库

	#构建敏感词库def initSensitiveWordMap(self,sensitiveWordList):sensitiveWordMap = {}# 读取每一行,每一个word都是一个敏感词for word in sensitiveWordList:nowMap=sensitiveWordMap#遍历该敏感词的每一个特定字符for i in range(len(word)):keychar=word[i]wordMap=nowMap.get(keychar)if wordMap !=None:#nowMap更新为下一层nowMap=wordMapelse:#不存在则构建一个map,isEnd设置为0,因为不是最后一个newNextMap={}newNextMap["isEnd"]=0nowMap[keychar]=newNextMapnowMap=newNextMap#到这个词末尾字符if i==len(word)-1:nowMap["isEnd"]=1#print(sensitiveWordMap)return sensitiveWordMap

Part 3

checkSensitiveWord函数 检测输入文本,并返回敏感词长度

    def checkSensitiveWord(self,txt,beginIndex=0):''':param txt: 输入待检测的文本:param beginIndex:输入文本开始的下标:return:返回敏感词字符的长度'''nowMap=self.sensitiveWordMapsensitiveWordLen=0 #敏感词的长度containChar_sensitiveWordLen=0 #包括特殊字符敏感词的长度endFlag=False #结束标记位for i in range(beginIndex,len(txt)):char=txt[i]if char in self.stopWordList:containChar_sensitiveWordLen+=1continuenowMap=nowMap.get(char)if nowMap != None:sensitiveWordLen+=1containChar_sensitiveWordLen+=1#结束位置为Trueif nowMap.get("isEnd")==1:endFlag=Trueelse:breakif  endFlag==False:containChar_sensitiveWordLen=0#print(sensitiveWordLen)return containChar_sensitiveWordLen

Part 4

getSensitiveWord函数 得到输入文本中存在的敏感词列表

    def getSensitiveWord(self,txt):cur_txt_sensitiveList=[]#注意,并不是一个个char查找的,找到敏感词会i增强敏感词的长度for i in range(len(txt)):length=self.checkSensitiveWord(txt,i)if length>0:word=txt[i:i+length]cur_txt_sensitiveList.append(word)i=i+length-1 #出了循环还要+1 i+length是没有检测到的,#下次直接从i+length开始return cur_txt_sensitiveList

Part 5

replaceSensitiveWord函数 敏感词替换部分

    def replaceSensitiveWord(self,txt,replaceChar='*'):Lst=self.getSensitiveWord(txt)#print(Lst)for word in Lst:replaceStr=len(word)*replaceChartxt=txt.replace(word,replaceStr)return txt

敏感词和停用词可以自定义
格式如下

完整代码

#!/usr/bin/env python
#-*- coding:utf-8 -*-
# author:zbt
# datetime:2020-03-16 11:53
# software: PyCharm
Dir_sensitive='C:\\Users\\zbt\\Desktop\\X实习\\敏感词【ing】\\敏感词.txt'
Dir_stopWord='C:\\Users\\zbt\\Desktop\\X实习\\敏感词【ing】\\停用词.txt'
class SensitiveFilter:def __init__(self):# file把敏感词库加载到列表中file = open(Dir_sensitive, 'r', encoding = 'ANSI')file_lst = file.readlines()self.sensitiveWordList = [i.split('\n')[0] for i in file_lst]# print(sensitiveWordList[:10])# >>['1234', '12345', '123456', '甲基麻黄碱', '来曲唑', '依西美坦', '阿那曲唑', '螺内酯', '沙美特罗', '丙磺舒']# file1把停用词加载到列表中file1 = open(Dir_stopWord, 'r', encoding = 'ANSI')file1_lst = file1.readlines()self.stopWordList = [i.split('\n')[0] for i in file1_lst]##得到sensitive字典self.sensitiveWordMap = self.initSensitiveWordMap(self.sensitiveWordList)#构建敏感词库def initSensitiveWordMap(self,sensitiveWordList):sensitiveWordMap = {}# 读取每一行,每一个word都是一个敏感词for word in sensitiveWordList:nowMap=sensitiveWordMap#遍历该敏感词的每一个特定字符for i in range(len(word)):keychar=word[i]wordMap=nowMap.get(keychar)if wordMap !=None:#nowMap更新为下一层nowMap=wordMapelse:#不存在则构建一个map,isEnd设置为0,因为不是最后一个newNextMap={}newNextMap["isEnd"]=0nowMap[keychar]=newNextMapnowMap=newNextMap#到这个词末尾字符if i==len(word)-1:nowMap["isEnd"]=1#print(sensitiveWordMap)return sensitiveWordMapdef checkSensitiveWord(self,txt,beginIndex=0):''':param txt: 输入待检测的文本:param beginIndex:输入文本开始的下标:return:返回敏感词字符的长度'''nowMap=self.sensitiveWordMapsensitiveWordLen=0 #敏感词的长度containChar_sensitiveWordLen=0 #包括特殊字符敏感词的长度endFlag=False #结束标记位for i in range(beginIndex,len(txt)):char=txt[i]if char in self.stopWordList:containChar_sensitiveWordLen+=1continuenowMap=nowMap.get(char)if nowMap != None:sensitiveWordLen+=1containChar_sensitiveWordLen+=1#结束位置为Trueif nowMap.get("isEnd")==1:endFlag=Trueelse:breakif  endFlag==False:containChar_sensitiveWordLen=0#print(sensitiveWordLen)return containChar_sensitiveWordLendef getSensitiveWord(self,txt):cur_txt_sensitiveList=[]#注意,并不是一个个char查找的,找到敏感词会i增强敏感词的长度for i in range(len(txt)):length=self.checkSensitiveWord(txt,i)if length>0:word=txt[i:i+length]cur_txt_sensitiveList.append(word)i=i+length-1 #出了循环还要+1 i+length是没有检测到的,下次直接从i+length开始return cur_txt_sensitiveListdef replaceSensitiveWord(self,txt,replaceChar='*'):Lst=self.getSensitiveWord(txt)#print(Lst)for word in Lst:replaceStr=len(word)*replaceChartxt=txt.replace(word,replaceStr)return txtif __name__ == "__main__":str="blablablabla"Filter=SensitiveFilter()replaceStr=Filter.replaceSensitiveWord(str)print(replaceStr)

最后免费附带敏感词和停用词
https://pan.baidu.com/s/1AftA45Zdz2_AtVJEuI5jHA
密码
b0rs


http://chatgpt.dhexx.cn/article/u0CNIh4F.shtml

相关文章

Java实现自定义敏感词库过滤

最近接到一个需求,要添加一个敏感词管理模块,一如既往的CURD,敏感词我们添加到了自己的库里。然后进行一个自定义敏感词过滤,话不多说直接贴代码 1、工具类 这里只是最简单的得到敏感词进行转换,可以根据自己的业务需…

node实现敏感词过滤及敏感词库

核心代码 import * as fs from fs; import * as path from path; import * as readline from readline;export default class BadWords {private static _instance: BadWords;private data: Array<string> [];constructor () {const files fs.readdirSync(path.resol…

百度内容审查做敏感词库筛选

最近在做项目的敏感词库筛选更新。笔者最终的目标是通过百度API将现有的敏感词库筛选更新成。 一、准备工作 读者需在百度智能云登陆账号&#xff0c;然后开通百度内容审核功能&#xff0c;然后根据API Key和Secret Key可以获得调用接口所需的access_token。 二、代码调用API…

敏感词过滤之——自定义构建查询词库与快速查询实现

关于敏感词过滤的一点思考与实践 业务场景思考与研究逻辑分析代码实现(php)构建敏感词树分割字符串敏感词树长分支的递归实现读取敏感词库 敏感词树的查询查询实现调用 测试、分析与总结 业务场景 最近在公司维护的小程序上&#xff0c;遇到一个需要用到敏感词过滤功能的业务模…

计算机网络网络协议与网络结构

协议三要素 语法syntax&#xff1a;数据与控制信息的结构与格式&#xff0c;信号与电平 语义semantics&#xff1a;发出何种信息&#xff0c;做出何种响应&#xff0c;差错控制 时序timing&#xff1a;事件顺序 网络边缘 客户/服务器应用模型client/server&#xff1a;如we…

互联网网络协议 网络三种连接方式描述

学习笔记 目录 网络三种连接方式描述 子网掩码 网络三种连接方式描述 桥接模式: 使用外部统一网段,虚拟机可以和外部系统通讯,但是容易照成IP冲突 NAT模式: 网络地址转换模式,虚拟系统可以和外部系统通讯,不造成IP冲突,外部地址不能访问内部虚拟系统应为虚拟系统是通过代理…

计算机网络 协议三要素

1. 语法&#xff1a;数据与控制信息的结构或特点 2.语义&#xff1a;需要发出何种控制信息&#xff0c;完成何种动作以及做出何种响应 3.同步&#xff1a;事件实现顺序的详细说明 例题&#xff1a;

网络协议 -- 最全的网络协议图

转载自&#xff1a;http://www.52im.net 图片较大&#xff0c;建议单击放大或者下载后查看

计算机术语mls指什么意思,了解计算机网络协议的原则与要素两者

计算机网络协议是有关计算机网络通信的一整套规则&#xff0c;或者说是为了进行数据交换而制订的规则、约定和标准。网络协议由语法、语义和时序三大要素组成。现在就跟着小编共同来学习一下&#xff1a;了解计算机网络协议的原则与要素两者。 想必不需要小编多说&#xff0c;大…

网络协议介绍

一、什么是协议 协议&#xff0c;就是大家共同遵守的一些约定&#xff0c;协议是一种约定&#xff0c;是指通信双方共同指定的一个标准约定 举两个例子&#xff1a; 例子1&#xff1a;一个宿舍的人来自五湖四海&#xff0c;开学来到宿舍后&#xff0c;如果大家都说自己家乡的…

计算机网络协议层次

计算机网络学习的核心内容就是网络协议的学习。网络协议是为计算机网络中进行数据交换而建立的规则、标准或者说是约定的集合。计算机网络协议同我们的语言一样&#xff0c;多种多样。 为了给网络协议的设计提供一个结构&#xff0c;网络设计者以分层的方式组织协议。 一个协…

网络协议是什么 网络协议三要素是什么

本文向大家详细介绍网络协议是什么以及网络协议三要素是什么的基础知识&#xff0c;不懂的朋友可以通过本文了解学习 网络协议是什么 网络协议的定义&#xff1a;为计算机网络中进行数据交换而建立的规则、标准或约定的集合。 一个网络协议至少包括三要素: 语法&#xff1a;用来…

常见网络协议

一、网络协议 二、TCP&#xff08;Transmission Control Protocol&#xff0c;传输控制协议&#xff09; TCP头格式 TCP协议中的三次握手和四次挥手 TCP报文抓取工具三、HTTP&#xff08;HyperText Transfer Protocol&#xff0c;超文本传输协议&#xff09; 请求报…

网络通信的三要素

一、要素一&#xff1a;IP地址 设备在网络中的地址&#xff0c;是唯一的标识。 IP地址&#xff1a; IP&#xff08;Internet Protocol&#xff09;&#xff1a;全称”互联网协议地址”&#xff0c;是分配给上网设备的唯一标志。 常见的IP分类为&#xff1a;IPv4和IPv6 I…

计算机中的网络协议包括哪些,网络协议三要素有什么关系

网络协议三要素有什么关系?为进行计算机网络中的数据交换而建立的规则、标准或约定的集合&#xff0c;协议总是指某一层的协议。准确地说&#xff0c;它是对同等层实体之间的通信制定的有关通信规则或约定的结合。佰佰安全网看看吧。 一个网络协议至少包括三要素: 语法&#x…

网络协议概述(一)

目录 一、协议三要素 二、常用的网络协议 2.1 由url确定目标ip地址&#xff08;DNS协议&#xff09; 2.2 打包需要发送的信息&#xff08;http/https协议&#xff09; 2.3 有应用层到传输层&#xff08;TCP协议保证应用层包一定送达&#xff09; 2.4 有传输层到达网络层&…

推荐:大视频免费压缩成指定大小的小视频的解决方法

给大家推荐一款好用的视频压缩软件MOO0视频压缩器&#xff0c;免费压缩&#xff0c;可选压缩画质&#xff0c;小巧便捷&#xff0c;这款软件不像某捷、某云这些软件&#xff0c;不花钱的话你是没办法压缩大文件的 云盘下载&#xff1a; 链接: https://pan.baidu.com/s/1ZUOi7…

如何下载网页中的小视频

想要下载页面中的视频&#xff0c;但是页面中却没有下载选项&#xff1f;教你一招 具体步骤&#xff1a; 一、打开开发者工具。 二、打开网络窗口。 三、刷新页面。 四、右键链接在新标签页中打开。 五、在右下角找到下载选项。 一、开发者工具是用于审查网页元素和查看网页源代…

视频观看小站

[在此处输入文章标题] 这种网站&#xff0c;永远不嫌多~ 视频小站&#xff0c;一次性满足所有观影需求&#xff01; 低端影视&#xff1a;https://ddrk.me/ 优点&#xff1a;1080P全高清均可观看&#xff0c;无广告&#xff0c;支持站内搜索&#xff0c;观影体验不错。 http:/…