1.本发明涉及计算机应用技术领域,具体涉及一种敏感词的识别方法和敏感词树的构建方法、计算设备以及计算机存储介质。
背景技术:2.在当下的互联网中,文本内容是重要的信息载体,在论坛、网站和应用中都允许用户自主的编辑上传大量的文本内容,作为论坛、网站和应用的管理方则有义务对文本内容进行过滤,从而保证网络环境的健康和谐。敏感词识别和过滤是一种非常有效的方法。
3.现有的敏感词过滤常用的方法之一是维护一个敏感词库,实现文本中敏感词的查找,这种算法虽然简单,但却需要维护庞大的敏感词库,特别是为了应对敏感词的各种变形会进一步导致敏感词库急剧扩大。另一个方法就是使用正则表达式和nlp自然语言处理,但是也存在对敏感词的变形无法有效识别等问题。
4.综上,现有的敏感词过滤方案存在如下的问题:无法有效应对敏感词的变形,如拆分字、中文拼音混杂、同音字、同形字等情形;采用敏感词库,处理敏感词变形时则会导致敏感词库呈数十上百倍扩张,进而导致内存急剧消耗,数据构建性能急剧降低;nlp算法在应对敏感词变形则会导致训练样本急剧膨胀,甚至达到不可接受的程度;另外,现有方案也无法有效处理敏感词不相邻的情况。
技术实现要素:5.鉴于上述问题,提出了本发明以便提供一种克服上述问题或者至少部分地解决上述问题的敏感词的识别方法和敏感词树的构建方法。
6.根据本发明的一个方面,提供了一种敏感词的识别方法,包括:
7.步骤s11,依次读取待检测文本中的字符作为第一字符,并以敏感词树的根节点作为初始的父节点;
8.步骤s12,从字典表中获取所述第一字符的字符封装值,在所述敏感词树中遍历所述父节点的子节点数据表,确定与所述第一字符的字符封装值对应的子节点;
9.步骤s13,判断所述子节点是否为叶子节点,若是,则输出敏感词,执行步骤s15;若否,执行步骤s14;
10.步骤s14,以所述待检测文本中下一个字符作为新的第一字符,以所述子节点作为新的父节点,执行步骤s12;
11.步骤s15,判断所述待检测文本是否全部检测完毕,若是,则方法结束,若否,则返回步骤s11。
12.可选的,在所述步骤s12中,若未查找到与所述第一字符的字符封装值对应的子节点,则所述方法还包括:
13.从所述第一字符的字符封装值中提取所述第一字符的至少一个变形字符信息;
14.根据所述至少一个变形字符信息,从字典表中获取至少一个变形字符的字符封装
值;
15.在所述敏感词树中遍历所述父节点的子节点数据表,查找与所述至少一个变形字符中任一变形字符的字符封装值对应的子节点;
16.将与所述任一变形字符的字符封装值对应的子节点作为与所述第一字符的字符封装值对应的子节点。
17.可选的,在所述步骤s12之前,所述方法还包括:
18.判断所述第一字符是否为英文字符;
19.若是,则继续读取第一字符之后的一个或多个英文字符,组成英文字符组,若所述英文字符组是中文拼音,则在所述敏感词树中遍历父节点的子节点数据表,查找包含所述中文拼音的字符封装值对应的子节点。
20.可选的,在所述步骤s14之前,所述方法还包括:
21.步骤s21,判断所述子节点是否包含连接子节点;若是,则执行步骤s22;若否,则执行步骤s14;
22.步骤s22,以所述第一字符在所述待检测文本中所在的位置为起点位置开始依次读取第二字符,以所述连接子节点对应的连接节点作为新的父节点,从字典表中查询所述第二字符的字符封装值,在所述敏感词树中遍历所述父节点的子节点数据表,查找与所述第二字符的字符封装值对应的子节点,若未查找到与所述第二字符的字符封装值对应的子节点,则以下一个字符作为新的第二字符,继续执行本步骤s22;若查找到与所述第二字符的字符封装值对应的子节点,执行步骤s13。
23.可选的,在所述以下一个字符作为新的第二字符,继续执行本步骤s22之前,所述方法还包括:
24.判断是否满足非连续敏感词匹配的结束条件,若是,则执行步骤s11;
25.所述以下一个字符作为新的第二字符,继续执行本步骤s22,进一步为:若判断出未满足非连续敏感词匹配的结束条件,则以下一个字符作为新的第二字符,继续执行本步骤s22。
26.可选的,在所述步骤s11之前,所述方法还包括:
27.对所述待检测文本进行预处理,其中,所述预处理包括但不限于:将非文本字符转换为固定占位符、繁简体转换、将表情符号转换为文本字符。
28.根据本发明的另一方面,提供了一种敏感词树的构建方法,包括:
29.步骤s31,创建敏感词的根节点,以所述根节点作为初始的父节点,读取所述敏感词的第一个字符作为初始的第三字符;
30.步骤s32,从字典表中获取所述第三字符的字符封装值以及所述第三字符的至少一个关联字符的字符封装值,创建所述父节点的多个子节点,并将所述第三字符的字符封装值以及所述第三字符的至少一个关联字符的字符封装值写入父节点的子节点数据表中;
31.步骤s33,判断所述第三字符是否为所述敏感词的最后一个字符,若是,则设置所述多个子节点为叶子节点;若否,则分别以各个子节点为新的父节点,以所述敏感词的下一个字符作为新的第三字符,执行步骤s32。
32.可选的,在所述步骤s32之前,所述方法还包括:
33.判断所述第三字符是否为敏感词连接符;
34.若是,创建所述父节点的连接子节点,并创建所述敏感词连接符对应的连接节点,建立所述连接节点与所述连接子节点的父子关系,以所述连接节点为新的父节点,以下一个字符作为新的第三字符,执行步骤s32;
35.若否,则直接执行步骤s32。
36.根据本发明的又一方面,提供了一种计算设备,包括:处理器、存储器、通信接口和通信总线,所述处理器、所述存储器和所述通信接口通过所述通信总线完成相互间的通信;
37.所述存储器用于存放至少一可执行指令,所述可执行指令使所述处理器执行根据上述任一项所述的敏感词的识别方法对应的操作,和/或,所述可执行指令使所述处理器执行根据上述任一项所述的敏感词树的构建方法对应的操作。
38.根据本发明的再一方面,提供了一种计算机存储介质,所述存储介质中存储有至少一可执行指令,所述可执行指令使处理器执行根据上述任一项所述的敏感词的识别方法对应的操作,和/或,所述可执行指令使处理器执行根据上述任一项所述的敏感词树的构建方法对应的操作。
39.根据本发明的敏感词的识别方法,通过汉字字典表和敏感词树的设计,灵活的扩展了敏感词的识别方式,可以快速地识别出敏感词,不会造成内存急剧增大,提升了内存的使用效率,尤其适用在内容审核的场景中。
40.上述说明仅是本发明技术方案的概述,为了能够更清楚了解本发明的技术手段,而可依照说明书的内容予以实施,并且为了让本发明的上述和其它目的、特征和优点能够更明显易懂,以下特举本发明的具体实施方式。
附图说明
41.通过阅读下文优选实施方式的详细描述,各种其他的优点和益处对于本领域普通技术人员将变得清楚明了。附图仅用于示出优选实施方式的目的,而并不认为是对本发明的限制。而且在整个附图中,用相同的参考符号表示相同的部件。在附图中:
42.图1示出了本发明一实施例提供的字典表的结构示意图;
43.图2示出了本发明一实施例提供的敏感词树的结构示意图;
44.图3示出了本发明一实施例提供的敏感词树的构建方法的流程图;
45.图4示出了本发明另一实施例提供的敏感词树的构建方法的流程图;
46.图5示出了本发明一实施例提供的敏感词的识别方法的流程图;
47.图6示出了本发明另一实施例提供的敏感词的识别方法的流程图;
48.图7示出了本发明一实施例提供的敏感词非连续查找方法的流程图;
49.图8示出了本发明一实施例提供的敏感词树的构建装置的结构示意图;
50.图9示出了本发明一实施例提供的敏感词的识别装置的结构示意图;
51.图10示出了本发明一实施例提供的计算设备的结构示意图。
具体实施方式
52.下面将参照附图更详细地描述本发明的示例性实施例。虽然附图中显示了本发明的示例性实施例,然而应当理解,可以以各种形式实现本发明而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地理解本发明,并且能够将本发明的范围
完整的传达给本领域的技术人员。
53.本发明提供了一种敏感词树的构建方法实施例,该方法应用于计算设备中。所述计算设备包括但不限于服务器、个人计算机、笔记本以及各种智能终端设备等,该计算设备可以实现敏感词的管理、字典表的设计、敏感词树的构建以及文本内容中敏感词的识别等功能中的至少一项。
54.在本发明的实施例中,为了构建敏感词树,首先对需要识别的敏感词或者敏感词词组进行梳理,确定待识别的敏感词。
55.可选的,为了便于后续工作的展开,本发明实施例将敏感词分为两类,即连续敏感词和非连续名敏感词,连续敏感词是敏感词的所有字符在目标文本中连续出现时才能匹配,非连续敏感词是在连续敏感词的基础上增加了连接符(比如符号“||”),敏感词中连接符两侧的字符在目标文本中不相邻(比如间隔了数个汉字字符)也可以匹配。上述两种敏感词中又分别可以包括汉字变形,比如包括汉语拼音、首字母、左右拆分字、变形字(包括但不限于同型字、异型字、同音字)。
56.为了便于对上述变形字的表达和存储,还设计有字典表,该字典表可以是内存哈希表。在该字典表内,以汉字字符作为键值,将汉字字符及其关联的汉语拼音、左右拆分字、变形字等信息封装在一起作为字符封装值。如图1所示,在字典表中,以汉字字符作为表的键值,而表值对应的是封装好的字符封装值。
57.需要强调的是,字符封装值中的变形字集合保存的是对应变形字在字典表中值的地址,通过这种字典结构设计,可以快速的通过字符获取到字符对应的字符封装值,从而在字符封装值中获取到汉语拼音、左右拆分字、变形字等信息,有利于后续简化流程和内存开销。
58.除了构建字典表外,还可以对敏感词树进行构建。优选的,在该实施例中,首先,将敏感词拆分成一个个的汉字或字母类的字符,一个字符对应敏感词树中的一个节点,敏感词会被解析成由这些节点组成的树结构。如图2示出了敏感词树的结构示意图,该敏感词树中的节点包括根节点、子节点、连接节点、叶子节点四种节点类型。
59.根节点是敏感词构建乃至识别的起始节点,敏感词解析出的第一个字符被封装成一个子节点,并以该字符在字典中的字符封装值作为子节点数据表的键存入根节点的子节点数据表中,其中该子节点数据表优选为哈希表。并且,所述子节点数据表中的键除了保存字符本身的字符封装值,还保存字符的至少一个关联字符的字符封装值,该至少一个关联字符包括但不限于:拼音首字母和/或拆分字符等。子节点数据表中各个键对应的值是子节点地址,通过查询到键,可以索引到相应的子节点。此外,根节点中还可以保存有子节点拼音集合。
60.如图2所示,子节点中保存了节点值、子节点数据表、连接子节点等信息。其中,节点值保存的是当前子节点对应字符在字典表中的字符封装值地址,通过该地址可以快速获取到该字符关联的字符值、中文拼音、拆分字、变形字(变形字为可选项)等信息,进而也节约了内存空间。子节点数据表用于保存当前子节点的下一级节点。需要指出的是,该子节点数据表中保存的子节点用于敏感词连续字符查找,该子节点中还可以包括连接子节点,其保存的是该子节点下的连接节点,用于非连续字符查找。
61.连接节点是一种特殊节点,它没有节点值等信息,只有子节点数据表,该子节点数
据表中保存的子节点被用于敏感词非连续字符查找。
62.叶子节点是敏感词最后一个字符构造的节点,叶子节点也是一种特殊的子节点。
63.需要指出的是,上述字典表和敏感词树可以根据需要进行实时更新。
64.针对不同类型和不同长度的敏感词,根据字典表的信息,其敏感词树的构建方法可以如图3所示的步骤进行:
65.步骤s31,创建敏感词的根节点,以所述根节点作为初始的父节点,读取所述敏感词的第一个字符作为初始的第三字符;
66.步骤s32,从字典表中获取所述第三字符的字符封装值以及所述第三字符的至少一个关联字符的字符封装值,创建所述父节点的多个子节点,并将所述第三字符的字符封装值以及所述第三字符的至少一个关联字符的字符封装值写入父节点的子节点数据表中;
67.步骤s33,判断所述第三字符是否为所述敏感词的最后一个字符,若是,则设置所述多个子节点为叶子节点;若否,则分别以各个子节点为新的父节点,以所述敏感词的下一个字符作为新的第三字符,执行步骤s32。
68.需要指出的是,本发明实施例中以第一字符、第二字符(下文将提及)以及第三字符作为当前需处理的字符,该三种字符的表达方式仅是为了区分各实施例中的当前字符。
69.为了构建敏感词树,需要用到预先构建的字典表,可选地,该字典表可以预先存储到内存中,提升查询效率。
70.在步骤s31中,创建敏感词的根节点,该根节点不与敏感词的任一个字符对应,其表达的是某一个敏感词的起始节点。
71.在步骤s32中,在先创建某个敏感词的根节点之后,以根节点为父节点,根据读取到的第一个字符创建根节点的子节点。
72.以敏感词“高利贷”为例,第一个字符即为“高”,在实际执行时,可以首先读取其中的“高”字符,根据读取到的“高”字创建子节点,并将“高”字符的字符封装值作为键写入根节点的子节点数据表中;同时,还根据第一个字符的至少一个关联字符创建根节点的其它子节点,该至少一个关联字符包括但不限于:拼音首字母和/或拆分字符,其中拆分字符可以为左右拆分字符或上下拆分字符,比如根据“高”字的拼音首字母“g”创建子节点,并将“g”字符的字符封装值作为键写入根节点的子节点数据表中。
73.对于敏感词中包括多个字符的情况,步骤s32将迭代执行,在迭代过程中,以父节点为变量,需要以敏感词中的前一个字符对应的各个子节点分别作为父节点,创建当前字符对应的子节点。
74.仍然以“高利贷”为例,在第二次迭代过程中,则分别以“高”、“g”等对应的子节点为父节点,创建该父节点的多个子节点,即创建“利”以及与“利”相关的拼音首字母或者拆分字符对应的子节点,并将“利”以及与“利”相关的拼音首字母或者拆分字符(如“禾”和“刂”)的字符封装值分别写入到对应的子节点的子节点数据表中。在第三次迭代过程中,则分别以“利”以及与“利”相关的拼音首字母或者拆分字符对应的子节点为父节点,创建父节点的多个子节点,即创建“贷”以及与“贷”相关的拼音首字母或者拆分字符(如“代”和“贝”)对应的子节点,并将“贷”以及与“贷”相关的拼音首字母或者拆分字符的字符封装值分别写入到“利”和与“利”相关的拼音首字母或者拆分字符对应的子节点的子节点数据表中。
75.在步骤s33中,判断第三字符是否为敏感词的最后一个字符,比如,“贷”为“高利
贷”的最后一个字符,那么设置“贷”以及与“贷”相关的拼音首字母或者拆分字符对应的子节点为叶子节点,由此完整创建“高利贷”这个敏感词的敏感词树。
76.需要说明的是,本发明实施例第三字符的至少一个关联字符可以不包括变形字,而是将变形字的地址放置在对应字符的字符封装值内,当需要进行识别时需要借助字典表,从字典表中提取变形字集合,从而避免了敏感词树过渡膨胀,影响敏感词树的查询效率。
77.但应当理解的是,本发明实施例中第三字符的至少一个关联字符也可以包括变形字,即在敏感词树中除了创建当前字符的拼音首字母和/或拆分字符对应的子节点,还可一并创建当前字符的变形字对应的子节点,这样在进行识别时,无需从字典表中提取变形字集合,依赖敏感词树即可实现变形字的识别。
78.上述实施例中具体详述了连续性敏感词树的创建方法,进一步的,在另一个实施方式中,还可以创建非连续性的敏感词树。
79.为了构建非连续敏感词树,需要设置连接节点,具体如下:在步骤s31后步骤s32之前,进一步包括:首先,判断所述第三字符是否为敏感词连接符;若是,如果父节点的连接子节点为空,则创建所述父节点的连接子节点,并创建所述敏感词连接符对应的连接节点,建立所述连接节点与所述连接子节点的父子关系,以所述连接节点为新的父节点,并以下一个字符作为新的第三字符,然后执行步骤s32;若否,则直接执行步骤s32。
80.在一个可选的实施例中,公开了一种如图4所示的敏感词树构建的完整流程,具体包括根节点、子节点、叶子节点和连接节点的创建过程,可普遍适用于各种类型的敏感词树的构建。首先,需要创建一个根节点,在第1步中,读取敏感词的第一个字符,获取该根节点作为初始的父节点;在第2步中,使用获取到的字符(即第三字符)从内存字典表中获取字符封装值,以该封装值作为节点值创建子节点,同时还使用封装值中的拼音首字母或拆分字符创建子节点;在第3、4和5步中,遍历父节点的所有子节点,作为当前子节点,执行后续步骤;在第6步中,判断当前字符是否为敏感词最后一个字符;在第7步中,设置当前子节点为叶子节点,结束该敏感词树的创建;在第8步中,获取敏感词的下一个字符,并设置当前子节点作为后续操作的父节点;在第9步中,判断当前字符是否为敏感词连接符,若否,则跳转第2步;若是,则执行第10步,使用连接子节点作为父节点创建连接节点,后续以连接节点作为新的父节点;在第11步中,获取敏感词的下一个字符,跳转第2步。
81.正如图4中公开的步骤,敏感词树的构建过程就是根据上述步骤将敏感词中的每一个字符逐个放置到如图2所示的敏感词树的过程。
82.图5示出了本发明敏感词的识别方法实施例的流程图,该方法中采用了上述实施例中的敏感词树,并且识别过程与创建过程具有对应的关系,并且该方法同样应用于计算设备中。
83.如图5所示,该识别方法包括以下步骤:
84.步骤s11,依次读取待检测文本中的字符作为第一字符,以敏感词树的根节点作为初始的父节点。
85.其中,在获取待检测文本后,可逐个读取其中字符作为第一字符,直到读取完所述待检测文本;并且,通过字符封装值的信息在预创建的各敏感词树的根节点中查询所述第一字符,若不存在则以所述待检测文本中的下一字符作为第一字符重新查询;若存在,以相
应敏感词树的根节点作为初始的父节点,并通过如下的步骤判断待检测文本中是否存在与预创建的敏感词树中的敏感词相同的字符串。
86.例如,以“提供高利贷服务”作为待检测文本中的句子为例,其中“高利贷”为敏感词,并且构建好相应的敏感词树。在识别过程中,应逐个读取其中的字符,由于根据“提”、“供”均没有根据敏感词树找到相应的敏感词,直到读取到“高”时,与敏感词树“高利贷”开始匹配。
87.步骤s12,从字典表中获取所述第一字符的字符封装值,在所述敏感词树中遍历所述父节点的子节点数据表,并确定与所述第一字符的字符封装值对应的子节点。
88.其中,从字典表中查询“高”的字符封装值,遍历各个敏感词树的根节点,查看哪个根节点的子节点数据表中存储有“高”的字符封装值。在查找到之后,也就定位到敏感词树。可选地,定位第一字符对应的敏感词树可以为多个,在后续处理流程中,需要分别针对每个敏感词树进行识别匹配。
89.步骤s13,判断所述子节点是否为叶子节点,若是,则输出敏感词,执行步骤s15;若否,执行步骤s14。
90.在上述示例中,比如第一字符为“高”时,当前子节点不是叶子节点,此时需要执行步骤s14。在迭代多次后,第一字符为“贷”时,当前子节点是叶子节点,输出敏感词“高利贷”,并执行步骤s15。若当前子节点不是叶子节点,则根据步骤s14继续执行该敏感词的检测。
91.步骤s14,以所述待检测文本中下一个字符作为新的第一字符,以所述子节点作为新的父节点,执行步骤s12。
92.根据该步骤,仍然以“高利贷”为例,以“高”的下一个字符“利”作为新的第一字符,以“高”对应的子节点作为新的父节点,迭代执行步骤s12。
93.步骤s15,判断所述待检测文本是否全部检测完毕,若是,则方法结束,若否,则返回步骤s11。
94.在输出一个完整的敏感词后,则需要判断对待检测文本的检测是否完毕,若检测完毕则结束本方法的执行,否则,以上述“提供高利贷服务”的句子为例,则继续执行步骤s11,读取下一个字符“服”,继续识别过程。
95.进一步的,在所述步骤s12中,若未查找到与所述第一字符的字符封装值对应的子节点,则所述方法还包括对变形字的判断步骤:
96.从所述第一字符的字符封装值中提取所述第一字符的至少一个变形字符信息;根据所述至少一个变形字符信息,从字典表中获取至少一个变形字符的字符封装值;在所述敏感词树中遍历父节点的子节点数据表,查找与任一变形字符的字符封装值对应的子节点;然后,将所述与任一变形字符的字符封装值对应的子节点作为与所述第一字符的字符封装值对应的子节点。
97.以待检测文本中为“高丽贷”为例,即待检测文本中为敏感词的变形词,此时,当迭代到第一字符为“丽”时,由于“丽”并没有出现在相应的敏感词树的子节点中,本方法需要根据“丽”的字符封装值查找其相应的变形字,通过遍历“丽”字符封装值中的变形字集合中是否存在某个变形字符且该变形字符的字符封装值对应有子节点,若存在,则认定匹配成功。
98.在另一个实施方式中,在所述步骤s12之前,在所述从所述待检测文本中读取第一字符之后,所述方法还包括:
99.判断所述第一字符是否为英文字符;若是,则继续读取第一字符之后的一个或多个英文字符,组成英文字符组,若所述英文字符组是中文拼音,则在所述敏感词树中遍历该父节点的子节点数据表对应的各子节点,查找包含所述中文拼音的字符封装值对应的子节点。
100.该步骤中,如果检查到当前匹配的字符是英文字符,则使用后续字符与当前字符合并查找是否为中文拼音,若为中文拼音,则根据子节点中保存的字符封装值进一步判断是否存在与该中文拼音对应的子节点。
101.在一个或一些的实施方式中,结合图7所示的非连续查找流程,在所述步骤s14之前,所述方法还包括:
102.步骤s21,判断所述子节点是否包含连接子节点,比如,可以通过检测图2中的子节点中是否包括连接子节点进行判断;若是,则执行步骤s22;若否,则执行步骤s14。
103.具体的,在执行步骤s22,则以第一字符在所述待检测文本中所在的位置为起点位置开始依次读取第二字符,以所述连接子节点对应的连接节点作为新的父节点,从字典表中查询所述第二字符的字符封装值,在所述敏感词树中遍历父节点的子节点数据表,查找与所述第二字符的字符封装值对应的子节点,若未查找到与所述第二字符的字符封装值对应的子节点,则以下一个字符作为新的第二字符,继续执行本步骤s22;若查找到与所述第二字符的字符封装值对应的子节点,执行步骤s13。
104.进一步的,在所述以下一个字符作为新的第二字符,继续执行本步骤s22之前,所述方法还包括:判断是否满足非连续敏感词匹配的结束条件,其中该结束条件包括:系统规定的最大非连续检测长度或者文本结束等;若是,则执行步骤s11。
105.其中,所述以下一个字符作为新的第二字符,继续执行本步骤s22进一步为:若判断出未满足非连续敏感词匹配的结束条件,则以下一个字符作为新的第二字符,继续执行本步骤s22。
106.综上,对于非连续敏感词的识别,可以以子节点所属字符在待检测文本中的位置作为起点,以后续字符依次作为开始位置进行非连续敏感词查找。
107.另外,在进行敏感词识别之前,可以对待检测文本进行预处理,预处理内容包括但不限于:非文本字符转换成固定占位符、繁简体字转换、将表情符号转换为文本字符等操作,完成预处理后,将预处理完成的待检测文本交由敏感词树进行敏感词识别,并输出敏感词。需要指出的是,本发明实施例中的敏感词识别与敏感词树的构建过程紧密联系。
108.在一个可选的实施例中,如图6所示的一种敏感词的识别方法的整体步骤,该图6的实施例可认为是对图5所示实施例的进一步说明。
109.具体的,在图6的步骤2中如果检查到当前匹配的字符是英文字符,则使用后续字符与当前字符合并查找是否为中文拼音,如果能获取到中文拼音则执行步骤4。
110.在步骤3中通过从目标文本中获取到的字符从内存字典表中获取到字符对应的字符封装值,如果通过字符封装值能直接从父节点的子节点哈希表中找到对应子节点则执行后续步骤,如果直接通过字符封装值未找到子节点,则使用字符封装值中保存的变形字从父节点的子节点哈希中查找子节点并依次执行后续步骤。
111.在步骤4中,使用中文拼音和父节点包含的子节点哈希中的各个子节点进行匹配,如果子节点保存的字符封装值的中文拼音与当前拼音匹配,则执行后续步骤。
112.在步骤5中判断是否查找到了子节点,如果未找到则结束本轮查找,继续执行其他步骤描述的分支查找。
113.步骤6中判断找到的子节点是否为叶子节点,如果是叶子节点则输出匹配到的敏感词,否则执行步骤7。
114.步骤7中判断目标文本是否检查完毕,如果未找到则结束本轮查找,继续执行其他步骤描述的分支查找。
115.步骤8中如果发现子节点包含连接子节点,说明在该子节点下有连接节点,应当执行非连续敏感词匹配操作,该操作详见图7。
116.如图7所示是敏感词非连续查找的操作步骤,在图6的步骤8中,当子节点存在连接子节点则会进入图7所示的处理分支,并以子节点所属字符在待检测文本中的位置作为起点,使用后续字符依次作为开始位置进行连续敏感词查找。图7中第三步的敏感词查找则参照图6中的敏感词查找方式。
117.综上所述,与现有技术相比,本发明公开的技术方案有以下特点和优势:
118.构建了汉字字典表,通过字典表来维护汉字信息,通过字典表可以方便的维护和查询汉字的拼音、拆分字、变形字等信息。
119.敏感词树的构建方式,除了字符本身节点外,自动构建了敏感词拼音节点、拆分字节点,有效的提高敏感词的识别效率。
120.敏感词树构建节点中能够间接支持变形字的查找,不需要为每个变形字创建节点从而降低树的节点数量,节约内存。
121.敏感词识别支持非连续敏感词查找,能够有效应对攻击者将敏感词拆分成多个部分的情况。
122.敏感词支持非连续识别,从而能应对单独一个词语不是敏感词,但多个组合放在一个句子中则变成敏感词的非连续情况,提升敏感词识别准确率。
123.敏感词的识别支持汉语拼音查找和拼音首字母的方式,能有效应对非法用户对敏感词的拼音变形和首字母变形。
124.敏感词识别支持敏感词变形词查找的方式,能够有效应对非法用户对敏感词进行同形字、异形字、同音字等变形的识别。
125.将字典表加载到内存中以哈希字典表的方式存在,并在构建敏感词树时复用这些字典表结构达到节约内存的目的。
126.敏感词识别增加了预处理方法,通过对待检测文本的预处理以提高敏感词识别准确率。
127.如图8所示,本发明实施例还提供了一种敏感词的构建装置800,其中,该构建装置800包括:
128.根节点创建模块810,适于创建敏感词的根节点,以所述根节点作为初始的父节点,读取所述敏感词的第一个字符作为初始的第三字符;
129.子节点创建模块820,适于从字典表中获取所述第三字符的字符封装值以及所述第三字符的至少一个关联字符的字符封装值,创建所述父节点的多个子节点,并将所述第
三字符的字符封装值以及所述第三字符的至少一个关联字符的字符封装值写入父节点的子节点数据表中;
130.迭代创建模块830,适于判断所述第三字符是否为所述敏感词的最后一个字符,若是,则设置所述多个子节点为叶子节点;若否,则分别以各个子节点为新的父节点,以所述敏感词的下一个字符作为新的第三字符,触发子节点创建模块820。
131.在一个实施方式中,所述装置还包括连接节点创建模块,该连接节点创建模块适于:
132.判断所述第三字符是否为敏感词连接符;
133.若是,创建所述父节点的连接子节点,并创建所述敏感词连接符对应的连接节点,建立所述连接节点与所述连接子节点的父子关系,以所述连接节点为新的父节点,以下一个字符作为新的第三字符,触发子节点创建模块820;若否,则直接触发子节点创建模块820。
134.如图9所示,本发明实施例提供了一种敏感词的识别装置900,该装置900包括:
135.检测开始模块910,适于依次读取待检测文本中的字符作为第一字符,以敏感词树的根节点作为初始的父节点;
136.遍历识别模块920,适于从字典表中获取所述第一字符的字符封装值,在所述敏感词树中遍历所述父节点的子节点数据表,并确定与所述第一字符的字符封装值对应的子节点;
137.敏感词输出模块930,适于判断所述子节点是否为叶子节点,若是,则输出敏感词,触发结束判断模块950;若否,触发迭代识别模块940;
138.迭代识别模块940,适于以所述待检测文本中下一个字符作为新的第一字符,以所述子节点作为新的父节点,触发遍历识别模块920;
139.结束判断模块950,适于判断所述待检测文本是否全部检测完毕,若是,则结束识别,若否,则重新触发检测开始模块910。
140.在一个实施方式中,所述装置还包括变形字识别模块,适于:
141.从所述第一字符的字符封装值中提取所述第一字符的至少一个变形字符信息;
142.根据所述至少一个变形字符信息,从字典表中获取至少一个变形字符的字符封装值;
143.在所述敏感词树中遍历父节点的子节点数据表,查找与任一变形字符的字符封装值对应的子节点;
144.将所述与任一变形字符的字符封装值对应的子节点作为与所述第一字符的字符封装值对应的子节点。
145.在一个实施方式中,所述装置还包括拼音识别模块,适于:
146.判断所述第一字符是否为英文字符;
147.若是,则继续读取第一字符之后的一个或多个英文字符,组成英文字符组,若所述英文字符组是中文拼音,则在所述敏感词树中遍历父节点的子节点数据表,查找包含所述中文拼音的字符封装值对应的子节点。
148.在一个实施方式中,所述装置还包括非连续词识别模块,适于:
149.判断子模块,适于判断所述子节点是否包含连接子节点;若是,则触发迭代子模
块;若否,则触发迭代识别模块940;
150.迭代子模块,适于以第一字符在所述待检测文本所在的位置为起点位置开始依次读取第二字符,以所述连接子节点对应的连接节点作为新的父节点,从字典表中查询所述第二字符的字符封装值,在所述敏感词树中遍历父节点的子节点数据表,查找与所述第二字符的字符封装值对应的子节点,若未查找到与所述第二字符的字符封装值对应的子节点,则以下一个字符作为新的第二字符,继续触发本模块;若查找到与所述第二字符的字符封装值对应的子节点,触发敏感词输出模块930。
151.可选的,非连续词识别模块还适于:
152.判断是否满足非连续敏感词匹配的结束条件,若是,则触发检测开始模块910;
153.所述以下一个字符作为新的第二字符,若判断出未满足非连续敏感词匹配的结束条件,则以下一个字符作为新的第二字符,触发迭代子模块。
154.在一个实施方式中,所述装置还包括预处理模块,适于:
155.对所述待检测文本进行预处理,其中,所述预处理包括但不限于:将非文本字符转换为固定占位符、繁简体转换、将表情符号转换为文本字符。
156.综上,本发明公开的上述装置,能够快速实现敏感词树的构建和敏感词的识别;支持变形词、拼音等敏感词变形,且不会大大增加敏感词树的节点数量,不会造成内存急剧增大;支持敏感词非连续查找,提升敏感词识别准确率;敏感词识别前的预处理,通过对文本的预处理,提升敏感词的识别准确率;通过字典表,灵活的扩展了敏感词的构建与识别,降低了内存的使用。
157.本发明实施例提供了一种非易失性计算机存储介质,所述计算机存储介质存储有至少一可执行指令,该计算机可执行指令可执行上述任意方法实施例中的敏感词树的构建方法或敏感词的识别方法。
158.图10示出了本发明计算设备实施例的结构示意图,本发明具体实施例并不对计算设备的具体实现做限定。
159.如图10所示,该计算设备可以包括:处理器(processor)1002、通信接口(communications interface)1004、存储器(memory)1006、以及通信总线1008。
160.其中:处理器1002、通信接口1004、以及存储器1006通过通信总线1008完成相互间的通信。通信接口1004,用于与其它设备比如客户端或其它服务器等的网元通信。处理器1002,用于执行程序1010,具体可以执行上述用于计算设备的敏感词识别或者敏感词树构建的方法实施例中的相关步骤。
161.具体地,程序1010可以包括程序代码,该程序代码包括计算机操作指令。
162.处理器1002可能是中央处理器cpu,或者是特定集成电路asic(application specific integrated circuit),或者是被配置成实施本发明实施例的一个或多个集成电路。计算设备包括的一个或多个处理器,可以是同一类型的处理器,如一个或多个cpu;也可以是不同类型的处理器,如一个或多个cpu以及一个或多个asic。
163.存储器1006,用于存放程序1010。存储器1006可能包含高速ram存储器,也可能还包括非易失性存储器(non-volatile memory),例如至少一个磁盘存储器。
164.程序1010具体可以用于使得处理器1002执行根据上述敏感词树的构建方法或者敏感词的识别方法的实施例对应的操作。
165.在此提供的算法或显示不与任何特定计算机、虚拟系统或者其它设备固有相关。各种通用系统也可以与基于在此的示教一起使用。根据上面的描述,构造这类系统所要求的结构是显而易见的。此外,本发明实施例也不针对任何特定编程语言。应当明白,可以利用各种编程语言实现在此描述的本发明的内容,并且上面对特定语言所做的描述是为了披露本发明的最佳实施方式。
166.在此处所提供的说明书中,说明了大量具体细节。然而,能够理解,本发明的实施例可以在没有这些具体细节的情况下实践。在一些实例中,并未详细示出公知的方法、结构和技术,以便不模糊对本说明书的理解。
167.类似地,应当理解,为了精简本发明并帮助理解各个发明方面中的一个或多个,在上面对本发明的示例性实施例的描述中,本发明实施例的各个特征有时被一起分组到单个实施例、图、或者对其的描述中。然而,并不应将该公开的方法解释成反映如下意图:即所要求保护的本发明要求比在每个权利要求中所明确记载的特征更多的特征。更确切地说,如下面的权利要求书所反映的那样,发明方面在于少于前面公开的单个实施例的所有特征。因此,遵循具体实施方式的权利要求书由此明确地并入该具体实施方式,其中每个权利要求本身都作为本发明的单独实施例。
168.本领域那些技术人员可以理解,可以对实施例中的设备中的模块进行自适应性地改变并且把它们设置在与该实施例不同的一个或多个设备中。可以把实施例中的模块或单元或组件组合成一个模块或单元或组件,以及此外可以把它们分成多个子模块或子单元或子组件。除了这样的特征和/或过程或者单元中的至少一些是相互排斥之外,可以采用任何组合对本说明书(包括伴随的权利要求、摘要和附图)中公开的所有特征以及如此公开的任何方法或者设备的所有过程或单元进行组合。除非另外明确陈述,本说明书(包括伴随的权利要求、摘要和附图)中公开的每个特征可以由提供相同、等同或相似目的的替代特征来代替。
169.此外,本领域的技术人员能够理解,尽管在此的一些实施例包括其它实施例中所包括的某些特征而不是其它特征,但是不同实施例的特征的组合意味着处于本发明的范围之内并且形成不同的实施例。例如,在下面的权利要求书中,所要求保护的实施例的任意之一都可以以任意的组合方式来使用。
170.本发明的各个部件实施例可以以硬件实现,或者以在一个或者多个处理器上运行的软件模块实现,或者以它们的组合实现。本领域的技术人员应当理解,可以在实践中使用微处理器或者数字信号处理器(dsp)来实现根据本发明实施例的一些或者全部部件的一些或者全部功能。本发明还可以实现为用于执行这里所描述的方法的一部分或者全部的设备或者装置程序(例如,计算机程序和计算机程序产品)。这样的实现本发明的程序可以存储在计算机可读介质上,或者可以具有一个或者多个信号的形式。这样的信号可以从因特网网站上下载得到,或者在载体信号上提供,或者以任何其他形式提供。
171.应该注意的是上述实施例对本发明进行说明而不是对本发明进行限制,并且本领域技术人员在不脱离所附权利要求的范围的情况下可设计出替换实施例。在权利要求中,不应将位于括号之间的任何参考符号构造成对权利要求的限制。单词“包含”不排除存在未列在权利要求中的元件或步骤。位于元件之前的单词“一”或“一个”不排除存在多个这样的元件。本发明可以借助于包括有若干不同元件的硬件以及借助于适当编程的计算机来实
现。在列举了若干装置的单元权利要求中,这些装置中的若干个可以是通过同一个硬件项来具体体现。单词第一、第二、以及第三等的使用不表示任何顺序。可将这些单词解释为名称。上述实施例中的步骤,除有特殊说明外,不应理解为对执行顺序的限定。