Python 敏感词过滤的实现示例_第1页
Python 敏感词过滤的实现示例_第2页
Python 敏感词过滤的实现示例_第3页
Python 敏感词过滤的实现示例_第4页
Python 敏感词过滤的实现示例_第5页
已阅读5页,还剩1页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论