基于倒排索引的组合敏感词过滤

本文探讨了如何使用倒排索引解决组合敏感词过滤问题。首先阐述了问题背景,即在文本中查找单个及组合敏感词的需求。接着详细介绍了求解思路,包括对单个敏感词的暴力求解和基于模式匹配的方法,重点讲解了如何利用倒排索引优化组合关键词的查找过程,以提高效率。
摘要由CSDN通过智能技术生成

1. 问题原型:

给定一段UGC文本或者网页文本,其中含有很多的敏感词或者无效词,但是有一些词只有和其他词一起出现的时候才算是敏感词,我们称其为组合敏感词,需要一种算法,找到其中的组合敏感词和单个敏感词


2. 求解思路:


  2.1 单敏感词求解:


    2.1.1 暴力求解:

将文本内容逐个和设定的敏感词(以下称之为模式)进行比较,算法的复杂度为O(m*n*k),其中m为文本长度,n为模式的数量,k为模式的总长度,显然,这种复杂度的算法是不可取的,那么接下来我们看有哪些改进算法

    2.1.2 一个模式的匹配:

对于一个模式的比较,有很多算法,比较经典的有KMP和Boyer-Moore。 他们改进的思路是,对于单个的模式而言,已经比较过的文本就不需要再回去比较了,也就是去掉了所谓的回溯过程。有些多模式匹配算法也借鉴了这种思想,可以说,有些多模式匹配算法就是泛化的单模式匹配,网上关于以上两种算法的介绍有很多,这里不再赘述。
单模式匹配对于我们2.1的问题的时间复杂度为O(m*n+k),可以想象,如果模式的个数达到10W级别,这种复杂度也是难以忍受的

    2.1.3 多模式匹配:

1. 字典树(比如trie树或者其他的改进算法double-trie),建立一颗字典树来存放所有的模式,其时间复杂度为O(m*k),可以看到其时间复杂度还不是非常让人满意
2. 自动机(比如AC自动机等),通过自动机的状态之间的转移来避免回溯问题,其时间复杂度为O(m+z),其中z为模式在文本中出现的长度之和,再看这个算法的时间复杂度:随着文本的长度线性增长,木有一个乘号,完美。(自动机的建立和查找过程可以参考网上资料)

<
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值