本发明涉及语言文本处理技术领域,特别涉及一种基于多层字典树的敏感词过滤方法及系统。
背景技术:
现有的敏感词过滤方法主要是基于单层字典树这种数据结构来实现的,其过滤敏感词的主要实现步骤如下:首先根据敏感词构建成一颗单层的字典树,然后将待过滤语句依次与构建的敏感词字典树进行匹配,匹配到敏感词则立即返回并拦截该语句,没有匹配到任何敏感词则释放该语句。
这种基于单层字典树的敏感词过滤匹配方式,在一定程度上确实能够高效的匹配到特定敏感词,但是这种匹配方式容易造成误拦截。举个例子,如果敏感词库中有“韩梅梅、小梅、梅梅”等这样的敏感词,现在有一条待过滤的语句如下:“西湖边上盛开了很多小梅花”,那么,如果使用目前现有的单层字典树匹配算法来过滤的话,必然会匹配到“小梅”这个敏感词,且拦截该语句。但是这条语句从整个语境上都是一条非常正常的语句,这样就造成了误拦截。再比如,敏感词库中有“红黄蓝、幼儿园、虐童”等这样的敏感词,现在有这么一条语句:“红黄蓝幼儿园公开课”。这条语句也是非常常见且中性的语句,但是因为在过滤敏感词的过程中,匹配到了“红黄蓝”和“幼儿园”这两个敏感词,因此会被误拦截。
因此,现有的敏感词过滤匹配方式,容易对一些虽然包含个别敏感词但是语境正常的语句进行误拦截,从而频繁地对用户产生打扰,用户体验不好。
技术实现要素:
基于此,本发明提供了一种基于多层字典树的敏感词过滤方法及系统,通过构建多层的字典树,并结合主敏感词、并列词和排除词,能够大大降低敏感词的误拦截率,从而降低了对用户的打扰率,极大地提升了用户体验。
本发明提供的基于多层字典树的敏感词过滤方法,包括以下步骤:
s100、从敏感词库中批量获取敏感词,所述敏感词包括主敏感词、并列词以及排除词;
s200、利用获取到的敏感词构建多层字典树;
s300、将待过滤语句输入多层字典树进行匹配,若匹配到待过滤语句中不包含主敏感词、或者匹配到待过滤语句中同时包含主敏感词和排除词,且不包含并列词,则对该语句不进行拦截,释放该语句;否则,对该语句进行拦截。
作为一种可实施方式,所述步骤s300包括以下步骤:
s310、读取待过滤语句;
s311、判断待过滤语句中是否包含主敏感词,若包含主敏感词,则执行步骤s312;若不包含主敏感词,则执行步骤s314;
s312、判断待过滤语句中是否包含并列词,若包含并列词,则执行步骤s315;若不包含并列词,则执行步骤s313;
s313、判断待过滤语句中是否包含排除词,若包含排除词,则执行步骤s314;若不包含排除词,则执行步骤s315;
s314、释放该语句;
s315、拦截该语句。
作为一种可实施方式,步骤s300中,还包括以下步骤:
向待过滤语句中的主敏感词、并列词、以及排除词分别添加标识信息,以用于判断待过滤语句中是否包含主敏感词、并列词、或排除词。
作为一种可实施方式,所述步骤s300包括以下步骤:
s320、读取待过滤语句;
s321、判断待过滤语句中是否包含主敏感词,若不包含主敏感词,则执行步骤s326;
s322、若包含主敏感词,则判断主敏感词的最后一个字符是否包含并列词标志字符;若不包含并列词标志字符,则执行步骤s324;
s323、若包含了并列词标识字符,则以并列词标识字符为根节点,全句过滤以并列词标识字符为根节点的字典树,匹配并列词;若没有匹配到并列词,则执行步骤s324;若匹配到了并列词,则执行步骤s327;
s324、判断主敏感词的最后一个字符是否包含排除词标志字符;若不包含排除词标志字符,则执行步骤s327;若包含排除词标志字符,则执行步骤s325;
s325、以排除词标识字符为根节点,全句过滤以排除词标识字符为根节点的字典树,匹配排除词;若没有匹配到排除词,则执行步骤s327;若匹配到了排除词,则执行步骤s326;
s326、释放该语句;
s327、拦截该语句。
作为一种可实施方式,步骤s300还包括以下步骤:
向待过滤语句中的主敏感词、并列词、以及排除词的结束符添加标志字符。
相应地,本发明还提供一种基于多层字典树的敏感词过滤系统,包括敏感词获取模块、字典树构建模块以及过滤模块;
所述敏感词获取模块,用于从敏感词库中批量获取敏感词,所述敏感词包括主敏感词、并列词以及排除词;
所述字典树构建模块,用于利用获取到的敏感词构建多层字典树;
所述过滤模块,用于将待过滤语句输入多层字典树进行匹配,若匹配到待过滤语句中不包含主敏感词、或者匹配到待过滤语句中同时包含主敏感词和排除词,且不包含并列词,则对该语句不进行拦截,释放该语句;否则,对该语句进行拦截。
作为一种可实施方式,所述过滤模块包括第一读取单元、第一主敏感词匹配单元、第一并列词匹配单元、第一排除词匹配单元、第一释放单元以及第一拦截单元;
所述第一读取单元,用于读取待过滤语句;
所述第一主敏感词匹配单元,用于判断待过滤语句中是否包含主敏感词,若包含主敏感词,则进入所述第一并列词匹配单元;若不包含主敏感词,则进入所述第一释放单元;
所述第一并列词匹配单元,用于判断待过滤语句中是否包含并列词,若包含并列词,则进入所述第一拦截单元;若不包含并列词,则进入所述第一排除词匹配单元;
所述第一排除词匹配单元,用于判断待过滤语句中是否包含排除词,若包含排除词,则进入第一释放单元;若不包含排除词,则进入第一拦截单元;
所述第一释放单元,用于释放该语句;
所述第一拦截单元,用于拦截该语句。
作为一种可实施方式,所述过滤模块还包括第一标识单元;
所述第一标识单元,用于向待过滤语句中的主敏感词、并列词、以及排除词分别添加标识信息,以用于判断待过滤语句中是否包含主敏感词、并列词、或排除词。
作为一种可实施方式,所述过滤模块包括第二读取单元、第二主敏感词匹配单元、并列词标志字符匹配单元、第二并列词匹配单元、排除词标志字符匹配单元、第二排除词匹配单元、第二释放单元以及第二拦截单元;
所述第二读取单元,用于读取待过滤语句;
所述第二主敏感词匹配单元,用于判断待过滤语句中是否包含主敏感词,若不包含主敏感词,则进入所述第二释放单元;
所述并列词标志字符匹配单元,用于在所述第二主敏感词匹配单元判断待过滤语句中包含主敏感词时,进一步判断主敏感词的最后一个字符是否包含并列词标志字符;若不包含并列词标志字符,则进入所述排除词标志字符匹配单元;
所述第二并列词匹配单元,用于在所述并列词标志字符匹配单元判断待过滤语句中包含并列词标识字符时,以并列词标识字符为根节点,全句过滤以并列词标识字符为根节点的字典树,匹配并列词;若没有匹配到并列词,则进入所述排除词标志字符匹配单元;若匹配到了并列词,则进入第二拦截单元;
所述排除词标志字符匹配单元,用于判断主敏感词的最后一个字符是否包含排除词标志字符;若不包含排除词标志字符,则进入所述第二拦截单元;若包含排除词标志字符,则进入所述第二排除词匹配单元;
所述第二排除词匹配单元,用于以排除词标识字符为根节点,全句过滤以排除词标识字符为根节点的字典树,匹配排除词;若没有匹配到排除词,则进入所述第二拦截单元;若匹配到了排除词,进入所述第二释放单元;
所述第二释放单元,用于释放该语句;
所述第二拦截单元,用于拦截该语句。
作为一种可实施方式,所述过滤模块还包括第二标识单元;
所述第二标志单元,用于向待过滤语句中的主敏感词、并列词、以及排除词的结束符添加标志字符。
本发明相比于现有技术的有益效果在于:
本发明提供的基于多层字典树的敏感词过滤方法及系统,通过将敏感词划分为主敏感词、并列词(相当于黑名单)以及排除词(相当于白名单),并基于主敏感词、并列词以及排除词构建多层字典树,将待过滤语句输入多层字典树进行匹配,在待过滤语句没有出现主敏感词,或者出现了主敏感词,同时也出现排除词,且没有出现并列词这两种情况下,不进行语句拦截,释放该语句。利用本发明提供的基于多层字典树的敏感词过滤方法及系统,可以大大降低敏感词的误拦截率,从而减少对用户的打扰,极大地提升了用户体验。
附图说明
图1为本发明实施例一提供的基于多层字典树的敏感词过滤方法的流程示意图;
图2为本发明实施例一提供的基于多层字典树的敏感词过滤方法中的步骤s300的一实施方式的流程示意图;
图3为本发明实施例一提供的基于多层字典树的敏感词过滤方法中的步骤s300的另一实施方式的流程示意图;
图4为本发明实施例三提供的基于多层字典树的敏感词过滤系统的结构示意图。
具体实施方式
以下结合附图,对本发明上述的和另外的技术特征和优点进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明的部分实施例,而不是全部实施例。
本发明提出了一种基于多层字典树的敏感词过滤方法及系统,在原有的单层字典树上进行叠加,构建出一个包含主敏感词、并列词和排除词的多层字典树的数据结构。本发明中首次提出了主敏感词、并列词和排除词的划分,其中主敏感词就是现有方案中提到的敏感词,例如“红黄蓝”;并列词和排除词则是跟主敏感词结合使用的词语,并列词相当于黑名单,例如“虐童”,排除词相当于白名单,例如“开学”、“公开课”等与并列词毫无关联的词。
参见图1,本发明实施例一提供了一种基于多层字典树的敏感词过滤方法,包括以下步骤:
s100、从敏感词库中批量获取敏感词,敏感词包括主敏感词、并列词以及排除词。
敏感词库可以事先存储在本地文件中,也可以从数据库中获取。
s200、利用获取到的敏感词构建多层字典树。
构建好的多层字典树可以存储于内存中。
s300、将待过滤语句输入多层字典树进行匹配,匹配到待过滤语句中不包含主敏感词、或者匹配到待过滤语句中同时包含主敏感词和排除词,且不包含并列词,则对该语句不进行拦截,释放该语句;否则,对该语句进行拦截。
本发明实施例一提供的基于多层字典树的敏感词过滤方法,通过构建多层字典树,将待过滤语句依次与内存中的多层字典树进行匹配,匹配到敏感词则立即返回并拦截该语句,没有匹配到任何敏感词则释放该语句。具体的匹配策略为:当待过滤语句中没有出现主敏感词时,则不进行拦截,释放该语句;当待过滤语句中只出现主敏感词时(没有出现并列词和排除词),对该语句进行拦截;当待过滤语句中出现了主敏感词和并列词(黑名单的词),对该语句进行拦截;当待过滤语句中出现了主敏感词,没有出现并列词,且出现了排除词(白名单的词)时,则不进行拦截,释放该语句。
本发明通过对敏感词进行划分且构建多层字典树,在待过滤语句中没有出现主敏感词,或者同时出现主敏感词和排除词,且没有出现并列词时,对该语句不进行拦截,从而可以大大降低敏感词的误拦截率,减少对用户的打扰,极大地提升了用户体验。
参见图2,作为一种可实施方式,上述步骤s300,具体的匹配过程可通过以下步骤实现:
s310、读取待过滤语句;
s311、判断待过滤语句中是否包含主敏感词,若包含主敏感词,则执行步骤s312;若不包含主敏感词,则执行步骤s314;
s312、判断待过滤语句中是否包含并列词,若包含并列词,则执行步骤s315;若不包含并列词,则执行步骤s313;
s313、判断待过滤语句中是否包含排除词,若包含排除词,则执行步骤s314;若不包含排除词,则执行步骤s315;
s314、释放该语句;
s315、拦截该语句。
在上述步骤s311、s312、s313之前,可以先向待过滤语句中的主敏感词、并列词、以及排除词分别添加标识信息,以用于判断待过滤语句中是否包含主敏感词、并列词、或排除词的步骤。标识信息可以添加在主敏感词、并列词、以及排除词的起始符、结束符等任意位置上。
具体地,参见图3,实施例一中的步骤s300还可通过以下步骤实现:
s320、读取待过滤语句;
s321、判断待过滤语句中是否包含主敏感词,若不包含主敏感词,则执行步骤s326;
s322、若包含主敏感词,则判断主敏感词的最后一个字符是否包含并列词标志字符;若不包含并列词标志字符,则执行步骤s324;
s323、若包含了并列词标识字符,则以并列词标识字符为根节点,全句过滤以并列词标识字符为根节点的字典树,匹配并列词;若没有匹配到并列词,则执行步骤s324;若匹配到了并列词,则执行步骤s327;
s324、判断主敏感词的最后一个字符是否包含排除词标志字符;若不包含排除词标志字符,则执行步骤s327;若包含排除词标志字符,则执行步骤s325;
s325、以排除词标识字符为根节点,全句过滤以排除词标识字符为根节点的字典树,匹配排除词;若没有匹配到排除词,则执行步骤s327;若匹配到了排除词,则执行步骤s326;
s326、释放该语句;
s327、拦截该语句。
在此实施方式中,需要提前向待过滤语句中的主敏感词、并列词、以及排除词的结束符添加标志字符。
本发明实施例二提供了一种基于多层字典树的敏感词过滤方法,在使用多层字典树进行敏感词进行过滤之前,首先对待过滤语句中的主敏感词、并列词和排除词进行标识。具体地,使用“@”符号作为主敏感词的结束符,使用“&”作为并列词的结束符,使用“~”作为排除词的结束符。
具体匹配步骤如下:
步骤(1):读取待过滤语句,判断该语句中是否包含主敏感词,如果不包含主敏感词则直接跳转到步骤(7);
步骤(2):如果匹配到了主敏感词,还需要进一步检查主敏感词的最后一个字符是否包含并列词标识字符“&”;
步骤(3):如果包含了并列词标识字符“&”,则以“&”字符为根节点,继续全句过滤以“&”为根节点的多层字典树,检查是否包含并列词,如果没有匹配到并列词,则直接跳转到步骤(5),否则跳转到步骤(8);
步骤(4):如果不包含并列词标识字符“&”,则执行步骤(5);
步骤(5):继续检查主敏感词最后一个字符是否包含排除词标识字符“~”,如果不包含,则直接跳转到步骤(8),相反则跳转到步骤(6);
步骤(6):如果包含了排除词标识字符“~”,则以“~”字符为根节点,继续全句过滤以“~”为根节点的字典树,检查是否包含排除词,如果没有匹配到排除词,则直接跳转到(8),否则跳转到(7);
(7)该语句通过,不进行拦截;
(8)该语句不通过,进行拦截。
为更好的表达本发明的实施流程,现举例如下:
“红黄蓝”为主敏感词,“虐童”为主敏感词“红黄蓝”的并列词,“公开课”作为主敏感词“红黄蓝”的排除词;
待过滤语句:“红黄蓝幼儿园发布了最新的幼童公开课时间”。
敏感词匹配流程如下:
首先匹配到了“红黄蓝”这个实事类主敏感词,然后检查带有结束符“@”的“蓝”字符子节点中是否包含并列词字符“&”,经遍历“蓝”子节点后发现包含了并列词字符“&”,但是整个语句中并没有任何并列词;
然后继续检查带有结束符“@”的“蓝”字符子节点中是否包含排除词字符“~”,经遍历“蓝”子节点后发现包含了排除词字符“~”,并且在语句中匹配到了排除词“公开课”,因此按照匹配流程图,这条语句是通过不拦截的。
本发明通过将敏感词划分为主敏感词、并列词以及排除词,并基于主敏感词、并列词以及排除词构建多层字典树,将待过滤语句输入多层字典树进行匹配,在待过滤语句中同时出现主敏感词和排除词,且没有出现并列词时,对该语句不进行拦截,从而可以大大降低敏感词的误拦截率,减少对用户的打扰,极大地提升了用户体验。
基于同一发明构思,本发明实施例三还提供了一种基于多层字典树的敏感词过滤系统,该系统与上述于多层字典树的敏感词过滤方法的原理相同,具体可参照上述方法实现,此处不再冗述。
参见图4,实施例三提供的基于多层字典树的敏感词过滤系统,包括敏感词获取模块100、字典树构建模块200以及过滤模块300;
敏感词获取模块100用于从敏感词库中批量获取敏感词,敏感词包括主敏感词、并列词以及排除词;
字典树构建模块200用于利用获取到的敏感词构建多层字典树;
过滤模块300用于将待过滤语句输入多层字典树进行匹配,若匹配到待过滤语句中不包含主敏感词、或者匹配到待过滤语句中同时包含主敏感词和排除词,且不包含并列词,则对该语句不进行拦截,释放该语句;否则,对该语句进行拦截。
具体地,作为一种可实施方式,过滤模块300包括第一读取单元、第一主敏感词匹配单元、第一并列词匹配单元、第一排除词匹配单元、第一释放单元以及第一拦截单元;
第一读取单元用于读取待过滤语句;
第一主敏感词匹配单元用于判断待过滤语句中是否包含主敏感词,若包含主敏感词,则进入第一并列词匹配单元;若不包含主敏感词,则进入第一释放单元;
第一并列词匹配单元用于判断待过滤语句中是否包含并列词,若包含并列词,则进入第一拦截单元;若不包含并列词,则进入第一排除词匹配单元;
第一排除词匹配单元用于判断待过滤语句中是否包含排除词,若包含排除词,则进入第一释放单元;若不包含排除词,则进入第一拦截单元;
第一释放单元用于释放该语句;
第一拦截单元用于拦截该语句。
进一步地,过滤模块300还包括第一标识单元;
第一标识单元用于向待过滤语句中的主敏感词、并列词、以及排除词分别添加标识信息,以用于判断待过滤语句中是否包含主敏感词、并列词、或排除词。
作为另一种可实施方式,过滤模块300包括第二读取单元、第二主敏感词匹配单元、并列词标志字符匹配单元、第二并列词匹配单元、排除词标志字符匹配单元、第二排除词匹配单元、第二释放单元以及第二拦截单元;
第二读取单元用于读取待过滤语句;
第二主敏感词匹配单元用于判断待过滤语句中是否包含主敏感词,若不包含主敏感词,则进入第二释放单元;
并列词标志字符匹配单元用于在第二主敏感词匹配单元判断待过滤语句中包含主敏感词时,进一步判断主敏感词的最后一个字符是否包含并列词标志字符;若不包含并列词标志字符,则进入排除词标志字符匹配单元;
第二并列词匹配单元用于在并列词标志字符匹配单元判断待过滤语句中包含并列词标识字符时,以并列词标识字符为根节点,全句过滤以并列词标识字符为根节点的字典树,匹配并列词;若没有匹配到并列词,则进入排除词标志字符匹配单元;若匹配到了并列词,则进入第二拦截单元;
排除词标志字符匹配单元用于判断主敏感词的最后一个字符是否包含排除词标志字符;若不包含排除词标志字符,则进入第二拦截单元;若包含排除词标志字符,则进入第二排除词匹配单元;
第二排除词匹配单元用于以排除词标识字符为根节点,全句过滤以排除词标识字符为根节点的字典树,匹配排除词;若没有匹配到排除词,则进入第二拦截单元;若匹配到了排除词,进入第二释放单元;
第二释放单元用于释放该语句;
第二拦截单元用于拦截该语句。
进一步地,过滤模块300还包括第二标识单元;
第二标志单元用于向待过滤语句中的主敏感词、并列词、以及排除词的结束符添加标志字符。
本发明提供的基于多层字典树的敏感词过滤方法及系统,通过构建多层字典树,并结合主敏感词、并列词和排除词进行匹配,能够大大降低敏感词的误拦截率,从而减少对用户的打扰,极大地提升了用户体验。
以上所述的具体实施例,对本发明的目的、技术方案和有益效果进行了进一步的详细说明,应当理解,以上所述仅为本发明的具体实施例而已,并不用于限定本发明的保护范围。特别指出,对于本领域技术人员来说,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。