版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第Python敏感词过滤的实现示例目录一个简单的实现使用BSF(宽度优先搜索)进行实现
使用DFA(DeterministicFiniteAutomaton)进行实现
一个简单的实现
主要是通过循环和replace的方式进行敏感词的替换
classNaiveFilter():
'''FilterMessagesfromkeywords
verysimplefilterimplementation
f=NaiveFilter()
f.parse("filepath")
f.filter("hellosexybaby")
hello****baby
def__init__(self):
self.keywords=set([])
defparse(self,path):
forkeywordinopen(path):
self.keywords.add(keyword.strip().decode('utf-8').lower())
deffilter(self,message,repl="*"):
message=str(message).lower()
forkwinself.keywords:
message=message.replace(kw,repl)
returnmessage
使用BSF(宽度优先搜索)进行实现
对于搜索查找进行了优化,对于英语单词,直接进行了按词索引字典查找。对于其他语言模式,我们采用逐字符查找匹配的一种模式。
BFS:宽度优先搜索方式
classBSFilter:
'''FilterMessagesfromkeywords
UseBackSortedMappingtoreducereplacementtimes
f=BSFilter()
f.add("sexy")
f.filter("hellosexybaby")
hello****baby
def__init__(self):
self.keywords=[]
self.kwsets=set([])
self.bsdict=defaultdict(set)
self.pat_en=pile(r'^[0-9a-zA-Z]+$')#englishphraseornot
defadd(self,keyword):
ifnotisinstance(keyword,str):
keyword=keyword.decode('utf-8')
keyword=keyword.lower()
ifkeywordnotinself.kwsets:
self.keywords.append(keyword)
self.kwsets.add(keyword)
index=len(self.keywords)-1
forwordinkeyword.split():
ifself.pat_en.search(word):
self.bsdict[word].add(index)
else:
forcharinword:
self.bsdict[char].add(index)
defparse(self,path):
withopen(path,"r")asf:
forkeywordinf:
self.add(keyword.strip())
deffilter(self,message,repl="*"):
ifnotisinstance(message,str):
message=message.decode('utf-8')
message=message.lower()
forwordinmessage.split():
ifself.pat_en.search(word):
forindexinself.bsdict[word]:
message=message.replace(self.keywords[index],repl)
else:
forcharinword:
forindexinself.bsdict[char]:
message=message.replace(self.keywords[index],repl)
returnmessage
使用DFA(DeterministicFiniteAutomaton)进行实现
DFA即DeterministicFiniteAutomaton,也就是确定有穷自动机。
使用了嵌套的字典来实现。
classDFAFilter():
'''FilterMessagesfromkeywords
UseDFAtokeepalgorithmperformconstantly
f=DFAFilter()
f.add("sexy")
f.filter("hellosexybaby")
hello****baby
def__init__(self):
self.keyword_chains={}
self.delimit='\x00'
defadd(self,keyword):
ifnotisinstance(keyword,str):
keyword=keyword.decode('utf-8')
keyword=keyword.lower()
chars=keyword.strip()
ifnotchars:
return
level=self.keyword_chains
foriinrange(len(chars)):
ifchars[i]inlevel:
level=level[chars[i]]
else:
ifnotisinstance(level,dict):
break
forjinrange(i,len(chars)):
level[chars[j]]={}
last_level,last_char=level,chars[j]
level=level[chars[j]]
last_level[last_char]={self.delimit:0}
break
ifi==len(chars)-1:
level[self.delimit]=0
defparse(self,path):
withopen(path,encoding='UTF-8')asf:
forkeywordinf:
self.add(keyword.strip())
deffilter(self,message,repl="*"):
ifnotisinstance(message,str):
message=message.decode('utf-8')
message=message.lower()
ret=[]
start=0
whilestartlen(message):
level=self.keyword_chains
step_ins=0
forcharinmessage[start:]:
ifcharinlevel:
step_ins+=1
ifself.delimitnotinlevel[char]:
level=level[char]
else:
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年福建泉州丰泽区清源街道社区卫生服务中心招聘工作人员考试备考题库及答案解析
- 2026福建三明兵工装备有限公司社会招聘一线生产操作员工岗位招聘8人笔试备考题库及答案详解
- 2026内蒙古锡林郭勒盟锡林浩特市贝康口腔门诊部招聘37人考试模拟试题及答案解析
- 2026贵州黔东南州镇远县妇幼保健院招聘6人考试参考题库及答案解析
- 2026及未来5-10年本色麦秸画项目投资价值市场数据分析报告
- 2025年河北衡水景县人民医院公开招聘临床医学专业人员10名笔试备考题库及答案解析
- 2026及未来5-10年广告圆珠笔项目投资价值市场数据分析报告
- 2026年国开电大财经法规与会计职业道德形考测试卷及参考答案详解(新)
- 粉尘作业场所设备维修保养制度
- 安全岗位考核制度
- 2026四川宜宾港信资产管理有限公司第一批员工招聘10人笔试历年常考点试题专练附带答案详解
- 2026年云南省文山州初中学业水平质量监测物理试题卷(含答案)
- 河北省石家庄市2026届高三二模数学试卷(含答案)
- 2026年广东省广州市高考语文二模试卷
- 2026年服装制版师中级理论知识考核试卷及完整答案详解【考点梳理】
- T∕CPCPA 0017-2026 托育机构婴幼儿回应性照护服务规范
- 山东省2026届普通高中学业水平4月调研生物试卷(含答案)
- 湖北省武汉市南湖区重点中学2026届初三第三次大联考语文试题含解析
- 康复器具发展问题研究报告
- 2026年专管药品培训专项测试题及答案
- 2026年1月浙江省高考(首考)历史试题(含答案)
评论
0/150
提交评论