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

Python敏感词过滤DFA算法+免费附带敏感词库相关推荐

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

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

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

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

  3. 敏感词或关键词过滤,DFA算法详解及python代码实现

    一.前言 近期项目有了一个过滤敏感词的功能需求,在网上找了一些方法及解说,发现DFA算法比较好用,容易实现,但很多文章解释得不太清楚,这里将其详细描述,并用python代码实现. 二.DFA算法详解 ...

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

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

  5. 敏感词之 DFA 算法

    敏感词之 DFA 算法 常用算法 遍历匹配 将输入的词语,与词库中的敏感词逐个字符遍历,对比是否包含 优点:思路简单,易于实现(KMP 算法,Brute-Force 算法) 缺点:当词库数目非常大时, ...

  6. Java 敏感词过滤(DFA有穷自动机)

    Java 敏感词过滤 DFA有穷自动机 初始化敏感词 构建树 查询 完整代码如下 后记 初始化敏感词 使用set集合,可以查询数据库. /*** 初始化值* @return*/private stat ...

  7. Python+Django+Mysql简单在线课程推荐系统 基于用户、项目、内容的协同过滤推荐算法 SimpleOnlineCourseCFRSPyth python实现协同过滤推荐算法实现源代码下载

    Python+Django+Mysql简单在线课程推荐系统 基于用户.项目.内容的协同过滤推荐算法 SimpleOnlineCourseCFRSPyth python实现协同过滤推荐算法实现源代码下载 ...

  8. python协同过滤算法_详解python实现协同过滤推荐算法

    不同的数据.不同的程序猿写出的协同过滤推荐算法不同,但其核心是一致的,本文主要介绍了python实现协同过滤推荐算法完整代码示例,具有一定借鉴价值,需要的朋友可以参考下.希望能帮助到大家. 测试数据 ...

  9. Python+Django+Mysql个性化二手车推荐系统 汽车推荐系统 基于用户、项目、内容的协同过滤推荐算法 WebCarCFRSPython python实现协同过滤推荐算法实现源代码下载

    Python+Django+Mysql个性化二手车推荐系统 汽车推荐系统 基于用户.项目.内容的协同过滤推荐算法 WebCarCFRSPython python实现协同过滤推荐算法实现源代码下载 一. ...

  10. 基于DFA算法实现文章敏感词过滤

    最近公司要出一个论坛系统 因为最近貌似xxx查的也比较严,所以图片和文字安全一样要注意 其中文字就涉及到敏感字过滤的问题 目前大概流传两种解决办法: 1.利用分词器分词实现过滤 比如见得比较多的 IK ...

最新文章

  1. java appendchild_详解javascript appendChild()的完整功能
  2. php 超过100m文件上传,科技常识:apache+php上传大文件以上传100M为例
  3. 几句话就能让你明白:IPv6与Voip
  4. MFC子对话框初始化问题_从一个“断言”报警说起
  5. Akka并发编程——第六节:Actor模型(五)
  6. https的ssl证书申请及服务器的nginx的配置教程
  7. linux复制文件到另一个目录_Linux入门之四-Linux文件目录操作
  8. 一个月面试近 20 家,拿下阿里 Offer!
  9. 硬核干货! 你的业务是否适合上链、上链有那些坑?dfuse、慢雾、MYKEY大佬为你为你指点迷津……...
  10. 开课吧课堂之throws如何去使用?
  11. POJ 2449 Remmarguts' Date (SPFA + A星算法) - from lanshui_Yang
  12. 下载网站TS格式文件进行合并
  13. java前后端分离开发思路
  14. 香港乐坛25年发展 [ 2005-04-24 07:28 PM | 作者:老唱片 | 来自:老唱片]
  15. [每日一题] 11gOCP 1z0-052 :2013-09-28 ORA-01555: snapshot too old......................C52
  16. 友盟推送 php,laravel5.4+umeng(友盟)集成app消息推送功能
  17. 网页报404解决办法
  18. linux挂载硬盘错误,开机后无法进入系统
  19. 央企建筑施工企业职工教育培训数字化解决方案
  20. 新知实验室_腾讯实时音视频产品体验

热门文章

  1. linux运维要掌握哪些,学习Linux运维需要掌握哪些技能?Linux运维
  2. 谷粒学院(一)项目介绍
  3. Visio 2013 永久激活,破解工具在win10下避免自动删除程序文件
  4. 如何利用迅雷下载百度云?
  5. usb转ttl测试软件,usb转ttl驱动
  6. 超强、超详细Redis入门教程
  7. vasp软件全名是什么_vasp软件主要功能
  8. sans serif字体_30种免费的Sans Serif字体下载
  9. 信息安全工程师考试大纲(含pdf)
  10. 使用Animation编辑器编辑动画