字符串匹配方法,装置,存储介质及电子设备转让专利

申请号 : CN201910471598.5

文献号 : CN110222143B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 郭志良李加佳

申请人 : 北京小米移动软件有限公司

摘要 :

本公开涉及一种字符串匹配方法,装置,存储介质及电子设备,所述方法包括:加载第一待匹配字符串;获取多模式匹配AC自动机的节点元素在所述第一待匹配字符串中的位置信息,和所述节点元素在所述AC自动机上所处的节点位置关系,所述AC自动机是根据字符串的预定匹配规则生成的;根据所述位置信息和所述节点位置关系构建跳表;深度优先遍历所述AC自动机,并根据所述跳表分别获取各目标节点与所述目标节点的父节点之间的路径与所述第一待匹配字符串的第一匹配结果,所述目标节点为每次遍历到的节点;根据所述AC自动机所包括的每一路径与所述第一待匹配字符串的第一匹配结果,输出所述第一待匹配字符串与所述预定匹配规则的匹配结果。

权利要求 :

1.一种字符串匹配方法,其特征在于,包括:

加载第一待匹配字符串;

获取多模式匹配AC自动机的每一节点元素在所述第一待匹配字符串中的位置信息,并根据所述位置信息生成对应每一所述节点元素的位置信息集合,和获取所述节点元素在所述AC自动机上所处的节点位置关系,其中,所述位置信息用于表明所述AC自动机中的每一节点元素在所述第一待匹配字符串中出现的先后顺序,所述AC自动机是根据字符串的预定匹配规则生成的;

根据所述位置信息集合建立对应每一所述节点元素的链表索引;

根据所述AC自动机中用于表征同一匹配规则的节点元素集合中节点元素之间的层次关系和所述链表索引,构建跳表,其中,在所述跳表中,子节点的链表索引为父节点链表索引的跳表下层;

深度优先遍历所述AC自动机,并根据所述跳表分别获取各目标节点与所述目标节点的父节点之间的路径与所述第一待匹配字符串的第一匹配结果,所述目标节点为每次遍历到的节点;

根据所述AC自动机所包括的每一路径与所述第一待匹配字符串的第一匹配结果,输出所述第一待匹配字符串与所述预定匹配规则的匹配结果。

2.根据权利要求1所述的方法,其特征在于,所述深度优先遍历所述AC自动机,并根据所述跳表分别获取各目标节点与所述目标节点的父节点之间的路径与所述第一待匹配字符串的第一匹配结果包括:当遍历到所述AC自动机中的第一层的节点时,依次对所述第一层的节点的节点元素对应的链表索引中的位置信息添加标记,其中,所述第一层节点的节点元素对应的链表索引中已标记的位置信息作为查找跳表的初始位置信息;

当遍历到所述AC自动机的第一层以下的节点时,将所述第一层以下的节点作为目标节点;

若通过查找所述跳表的方式,确定存在目标位置信息,则确定所述目标节点的父节点与所述目标节点之间的路径与所述第一待匹配字符串的匹配成功,其中,所述目标位置信息为所述目标节点的节点元素对应的链表索引中,晚于所述目标节点的父节点的节点元素对应的链表索引中最新被标记的位置信息的位置信息;

将所述目标位置信息添加标记,其中,已标记的所述目标位置信息为当遍历到所述目标节点的子节点时,开始查找所述跳表的起始位置信息。

3.根据权利要求1至2任一项所述的方法,其特征在于,所述加载第一待匹配字符串包括:加载第二待匹配字符串;

过滤掉所述第二待匹配字符串中非所述AC自动机节点元素的部分,得到所述第一待匹配字符串。

4.根据权利要求1至2中任一项所述的方法,其特征在于,所述第一待匹配字符串用于表征用户行为,所述匹配规则为用户异常行为匹配规则;

所述根据所述AC自动机所包括的每一路径与所述第一待匹配字符串的第一匹配结果,输出所述第一待匹配字符串与所述预定匹配规则的匹配结果,包括:在所述AC自动机所包括的所有路径匹配成功后,输出用于表征用户行为异常的匹配结果。

5.一种字符串匹配装置,其特征在于,包括:

载入模块,被配置为加载第一待匹配字符串;

第一获取模块,被配置为获取AC自动机的节点元素在所述第一待匹配字符串中的位置信息,和所述节点元素在所述AC自动机上所处的节点位置关系,所述AC自动机是根据字符串的预定匹配规则生成的;

创建模块,被配置为根据所述位置信息和所述节点位置关系构建跳表;

遍历模块,被配置为深度优先遍历所述AC自动机;

第二获取模块,被配置为根据所述跳表分别获取各目标节点与所述目标节点的父节点之间的路径与所述第一待匹配字符串的第一匹配结果,所述目标节点为每次遍历到的节点;

输出模块,被配置为根据所述AC自动机所包括的每一路径与所述第一待匹配字符串的第一匹配结果,输出所述第一待匹配字符串与所述预定匹配规则的匹配结果;

所述第一获取模块包括:

获取子模块,被配置为获取每一所述节点元素在所述第一待匹配字符串中的位置信息;

生成子模块,被配置为根据所述位置信息生成对应每一所述节点元素的位置信息集合,其中,所述位置信息用于表明所述AC自动机中的每一节点元素在所述第一待匹配字符串中出现的先后顺序;

所述创建模块包括:

第一创建子模块,被配置为根据所述位置信息集合建立对应每一所述节点元素的链表索引;

第二创建子模块,被配置为根据所述AC自动机中用于表征同一匹配规则的节点元素集合中节点元素之间的层次关系和所述链表索引构建所述跳表,其中,在所述跳表中,子节点的链表索引为父节点链表索引的跳表下层。

6.根据权利要求5所述的装置,其特征在于,所述第二获取模块包括:第一标记子模块,被配置为当所述遍历模块遍历到所述AC自动机中的第一层的节点时,依次对所述第一层的节点的节点元素对应的链表索引中的位置信息添加标记,其中,所述第一层节点的节点元素对应的链表索引中已标记的位置信息作为查找跳表的初始位置信息;

确定子模块,被配置为在所述遍历模块遍历到所述AC自动机的第一层以下的节点,将所述第一层以下的节点作为目标节点时,查找跳表,在通过查找所述跳表的方式,确定存在目标位置信息时,确定所述目标节点的父节点与所述目标节点之间的路径与所述第一待匹配字符串的匹配成功;其中,所述目标位置信息为所述目标节点的节点元素对应的链表索引中,晚于所述目标节点的父节点的节点元素对应的链表索引中最新被标记的位置信息的位置信息;

第二标记子模块,被配置为将所述目标位置信息添加标记,其中,已标记的所述目标位置信息为当遍历到所述目标节点的子节点时,开始查找所述跳表的起始位置信息。

7.根据权利要求5至6任一项所述的装置,其特征在于,所述载入模块包括:载入子模块,被配置为加载第二待匹配字符串;

过滤子模块,被配置为过滤掉所述第二待匹配字符串中非所述AC自动机节点元素的部分,得到所述第一待匹配字符串。

8.根据权利要求5至6中任一项所述的装置,其特征在于,所述第一待匹配字符串用于表征用户行为,所述预定匹配规则为用户异常行为匹配规则,所述输出模块,被配置为在所述AC自动机所包括的所有路径匹配成功后,输出用于表征用户行为异常的匹配结果。

9.一种计算机可读存储介质,其上存储有计算机程序指令,其特征在于,该程序指令被处理器执行时实现权利要求1至4中任一项所述方法的步骤。

10.一种电子设备,其特征在于,包括:

存储器,其上存储有计算机程序;

处理器,用于执行所述存储器中的所述计算机程序,以实现权利要求1至4中任一项所述方法的步骤。

说明书 :

字符串匹配方法,装置,存储介质及电子设备

技术领域

[0001] 本公开涉及文本或网络内容处理领域,尤其涉及一种字符串匹配方法,装置,存储介质及电子设备。

背景技术

[0002] 信息,是一种普遍联系的形式。合理的对信息进行匹配筛选对人们的工作和生活大有裨益,例如在服务领域,可以通过对客服的服务内容进行关键字匹配,从而简便地监测其服务质量;在网络安全领域,可以将用户行为序列与异常行为序列进行匹配,实现对异常用户的检测和拦截。
[0003] AC自动机(Aho‑Corasick automaton)是一种常用的多模匹配方法,可以在待匹配字符串中对多个目标字符串进行并行匹配,其在搜索引擎、词频统计等领域得到了广泛的应用。

发明内容

[0004] 为克服相关技术中存在的问题,本公开提供一种字符串匹配方法,装置,存储介质及电子设备。
[0005] 根据本公开实施例的第一方面,提供一种字符串匹配方法,包括:
[0006] 加载第一待匹配字符串;
[0007] 获取多模式匹配AC自动机的节点元素在所述第一待匹配字符串中的位置信息,和所述节点元素在所述AC自动机上所处的节点位置关系,所述AC自动机是根据字符串的预定匹配规则生成的;
[0008] 根据所述位置信息和所述节点位置关系构建跳表;
[0009] 深度优先遍历所述AC自动机,并根据所述跳表分别获取各目标节点与所述目标节点的父节点之间的路径与所述第一待匹配字符串的第一匹配结果,所述目标节点为每次遍历到的节点;
[0010] 根据所述AC自动机所包括的每一路径与所述第一待匹配字符串的第一匹配结果,输出所述第一待匹配字符串与所述预定匹配规则的匹配结果。
[0011] 可选地,所述获取AC自动机的节点元素在所述第一待匹配字符串中的位置信息包括:
[0012] 获取每一所述节点元素在所述第一待匹配字符串中的位置信息;
[0013] 根据所述位置信息生成对应每一所述节点元素的位置信息集合,其中,所述位置信息用于表明所述AC自动机中的每一节点元素在所述第一待匹配字符串中出现的先后顺序;
[0014] 所述根据所述位置信息和所述节点位置关系构建跳表包括:
[0015] 根据所述位置信息集合建立对应每一所述节点元素的链表索引;
[0016] 根据所述AC自动机中用于表征同一匹配规则的节点元素集合中节点元素之间的层次关系和所述链表索引,构建所述跳表,其中,在所述跳表中,子节点的链表索引为父节点链表索引的跳表下层。
[0017] 可选地,所述深度优先遍历所述AC自动机,并根据所述跳表分别获取各目标节点与所述目标节点的父节点之间的路径与所述第一待匹配字符串的第一匹配结果包括:
[0018] 当遍历到所述AC自动机中的第一层的节点时,依次对所述第一层的节点的节点元素对应的链表索引中的位置信息添加标记,其中,所述第一层节点的节点元素对应的链表索引中已标记的位置信息作为查找跳表的初始位置信息;
[0019] 当遍历到所述AC自动机的第一层以下的节点时,将所述第一层以下的节点作为目标节点;
[0020] 若通过查找所述跳表的方式,确定存在目标位置信息,则确定所述目标节点的父节点与所述目标节点之间的路径与所述第一待匹配字符串的匹配成功,其中,所述目标位置信息为所述目标节点的节点元素对应的链表索引中,晚于所述目标节点的父节点的节点元素对应的链表索引中最新被标记的位置信息的位置信息;
[0021] 将所述目标位置信息添加标记,其中,已标记的所述目标位置信息为当遍历到所述目标节点的子节点时,开始查找所述跳表的起始位置信息。
[0022] 可选地,所述加载第一待匹配字符串包括:
[0023] 加载第二待匹配字符串;
[0024] 过滤掉所述第二待匹配字符串中非所述AC自动机节点元素的部分,得到所述第一待匹配字符串。
[0025] 可选地,所述第一待匹配字符串用于表征用户行为,所述匹配规则为用户异常行为匹配规则;
[0026] 所述根据所述AC自动机所包括的每一路径与所述第一待匹配字符串的第一匹配结果,输出所述第一待匹配字符串与所述预定匹配规则的匹配结果,包括:
[0027] 在所述AC自动机所包括的所有路径匹配成功后,输出用于表征用户行为异常的匹配结果。
[0028] 根据本公开实施例的第二方面,提供一种字符串匹配装置,包括:
[0029] 载入模块,被配置为加载第一待匹配字符串;
[0030] 第一获取模块,被配置为获取AC自动机的节点元素在所述第一待匹配字符串中的位置信息,和所述节点元素在所述AC自动机上所处的节点位置关系,所述AC自动机是根据字符串的预定匹配规则生成的;
[0031] 创建模块,被配置为根据所述位置信息和所述节点位置关系构建跳表;
[0032] 遍历模块,被配置为深度优先遍历所述AC自动机;
[0033] 第二获取模块,被配置为根据所述跳表分别获取各目标节点与所述目标节点的父节点之间的路径与所述第一待匹配字符串的第一匹配结果,所述目标节点为每次遍历到的节点;
[0034] 输出模块,被配置为根据所述AC自动机所包括的每一路径与所述第一待匹配字符串的第一匹配结果,输出所述第一待匹配字符串与所述预定匹配规则的匹配结果。
[0035] 可选地,所述第一获取模块包括:
[0036] 获取子模块,被配置为获取每一所述节点元素在所述第一待匹配字符串中的位置信息;
[0037] 生成子模块,被配置为根据所述位置信息生成对应每一所述节点元素的位置信息集合,其中,所述位置信息用于表明所述AC自动机中的每一节点元素在所述第一待匹配字符串中出现的先后顺序;
[0038] 所述创建模块包括:
[0039] 第一创建子模块,被配置为根据所述位置信息集合建立对应每一所述节点元素的链表索引;
[0040] 第二创建子模块,被配置为根据所述AC自动机中用于表征同一匹配规则的节点元素集合中节点元素之间的层次关系和所述链表索引构建所述跳表,其中,在所述跳表中,子节点的链表索引为父节点链表索引的跳表下层。
[0041] 可选地,所述第二获取模块包括:
[0042] 第一标记子模块,被配置为当所述遍历模块遍历到所述AC自动机中的第一层的节点时,依次对所述第一层的节点的节点元素对应的链表索引中的位置信息添加标记,其中,所述第一层节点的节点元素对应的链表索引中已标记的位置信息作为查找跳表的初始位置信息;
[0043] 确定子模块,被配置为在所述遍历模块遍历到所述AC自动机的第一层以下的节点,将所述第一层以下的节点作为目标节点时,查找跳表,在通过查找所述跳表的方式,确定存在目标位置信息时,确定所述目标节点的父节点与所述目标节点之间的路径与所述第一待匹配字符串的匹配成功;其中,所述目标位置信息为所述目标节点的节点元素对应的链表索引中,晚于所述目标节点的父节点的节点元素对应的链表索引中最新被标记的位置信息的位置信息;
[0044] 第二标记子模块,被配置为将所述目标位置信息添加标记,其中,已标记的所述目标位置信息为当遍历到所述目标节点的子节点时,开始查找所述跳表的起始位置信息。
[0045] 可选地,所述载入模块包括:
[0046] 载入子模块,被配置为加载第二待匹配字符串;
[0047] 过滤子模块,被配置为过滤掉所述第二待匹配字符串中非所述AC自动机节点元素的部分,得到所述第一待匹配字符串。
[0048] 可选地,所述第一待匹配字符串用于表征用户行为,所述预定匹配规则为用户异常行为匹配规则,所述输出模块,被配置为在所述AC自动机所包括的所有路径匹配成功后,输出用于表征用户行为异常的匹配结果。
[0049] 根据本公开实施例的第三方面,提供一种计算机可读存储介质,其上存储有计算机程序指令,该程序指令被处理器执行时实现本公开第一方面所提供的字符串匹配方法的步骤。
[0050] 根据本公开实施例的第四方面,提供一种电子设备,包括:
[0051] 存储器,其上存储有计算机程序;
[0052] 处理器,用于执行所述存储器中的所述计算机程序,以实现本公开第一方面所提供的字符串匹配方法的步骤。
[0053] 采用上述技术方案,至少可以包括以下有益效果:
[0054] 通过将预定匹配规则生成AC自动机,利用了AC自动机能够通过匹配规则的公共前缀减少查询时间的特性,极大限度的减少了重复的比较过程。同时,根据AC自动机上的节点元素在所述AC自动机上所处的节点位置关系以及相应节点元素在待匹配字符串中的位置信息建立了跳表。利用跳表索引能够实现快速查找的特点,对AC自动机中的每一路径,都采用跳表索引的方式快速获取路径的匹配结果。最终通过优先遍历所述AC自动机来完成对匹配路径顺序的选择,并通过跳表来获取对应路径的第一匹配结果,再根据所述AC自动机上每一路径与所述第一待匹配字符串的第一匹配结果来确定所述第一待匹配字符串与所述预定匹配规则的匹配结果,从而结合了AC自动机与跳表索引的优点,实现了高效的并行模糊匹配,提升了字符串匹配效率。
[0055] 应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本公开。

附图说明

[0056] 此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本公开的实施例,并与说明书一起用于解释本公开的原理。
[0057] 图1是根据一示例性实施例示出的一种字符串匹配方法的流程图。
[0058] 图2是根据一示例性实施例示出的一种字符串匹配方法的流程图。
[0059] 图3是根据一示例性实施例示出的一种字符串匹配方法的流程图。
[0060] 图4是根据一示例性实施例示出的一种字符串匹配方法的流程图。
[0061] 图5是根据一示例性实施例示出的一种字符串匹配方法的流程图。
[0062] 图6是根据一示例性实施例示出的另一种字符串匹配方法的流程图。
[0063] 图7是根据一示例性实施例示出的一种AC自动机的示意图。
[0064] 图8是根据一示例性实施例示出的一种字符串匹配装置的框图。
[0065] 图9是根据一示例性实施例示出的一种字符串匹配装置的框图。
[0066] 图10是根据一示例性实施例示出的一种字符串匹配装置的框图。
[0067] 图11是根据一示例性实施例示出的一种字符串匹配装置的框图。
[0068] 图12是根据一示例性实施例示出的一种字符串匹配装置的框图。

具体实施方式

[0069] 这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本公开相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本公开的一些方面相一致的装置和方法的例子。
[0070] 介绍本公开所提供的字符串匹配方法,装置,存储介质及电子设备之前,首先对本公开的应用场景进行介绍。本公开所提供的实施例可以应用在各种字符串匹配场合,例如从客服的聊天记录中匹配关键字,或是将用户的行为序列与异常行为序列进行匹配等等。AC自动机是一种著名的并行多模匹配方法,在词频统计、搜索引擎领域有着广泛的应用,但是其只能进行精确匹配,即要求匹配规则是确定的。如果要通过AC自动机实现模糊字段的匹配,可以通过编写大量的正则表达式或者拆解匹配规则的方法实现,但是前者无法并行操作,后者的流程复杂,系统的时间复杂度较高,总体来说效率都比较低下,因而在实际的模糊匹配场合中难以得到应用。跳表是一个随机化的数据结构,实质上就是一种可以进行二分查找的有序链表,通过在原有的有序链表上面增加多级索引,跳表可以借助所述索引来实现快速查找,从而能够提高搜索性能。
[0071] 图1是根据一示例性实施例示出的一种字符串匹配方法的流程图,如图1所示,所述字符串匹配方法包括:
[0072] S11,加载第一待匹配字符串。
[0073] S12,获取AC自动机的节点元素在所述第一待匹配字符串中的位置信息,和所述节点元素在所述AC自动机上所处的节点位置关系,所述AC自动机是根据字符串的预定匹配规则生成的。
[0074] 其中,所述预定匹配规则可以是确定的匹配规则,也可以是含通配符的模糊匹配规则,所述匹配规则的数量可以是一个或者多个。在具体实施过程中,若所述匹配规则中含有通配符,可以将所述通配符进行忽略过滤,从而得到确定的匹配规则,并根据所述确定的匹配规则生成AC自动机。
[0075] 示例地,所述字符串匹配方法可以应用于网络安全领域,所述匹配规则可以是系统获知的表征用户异常状态的异常行为序列3*6*7*8,2*5*6,在对所述异常行为序列建立AC自动机时,系统可以将通配符从所述异常行为序列中进行过滤,得到确定的匹配规则3678,256,并根据新的匹配规则3678,256建立AC自动机。
[0076] 值得注意的是,所述节点元素可以是单个字符,也可以是一个字符串,本公开对此并不限定。此外,对于某一个具体的匹配规则,其在所述AC自动机上可以体现为从根节点到终态节点之间的一段连续路径,所述路径连接了构成所述匹配规则的所有节点元素,所述路径可以包括一个或多个子路径。在具体实施中,可以根据相应节点元素在所述AC自动机上的位置关系构建对应匹配规则的跳表索引。
[0077] S13,根据所述位置信息和所述节点位置关系构建跳表。
[0078] S14,深度优先遍历所述AC自动机,并根据所述跳表分别获取各目标节点与所述目标节点的父节点之间的路径与所述第一待匹配字符串的第一匹配结果,所述目标节点为每次遍历到的节点。
[0079] 也就是说,在匹配过程中,可以通过深度优先遍历AC自动机的方式来确定路径匹配的顺序并通过跳表来获取所述路径的匹配结果。
[0080] S15,根据所述AC自动机所包括的每一路径与所述第一待匹配字符串的第一匹配结果,输出所述第一待匹配字符串与所述预定匹配规则的匹配结果。
[0081] 应当理解的是,所述第一待匹配字符串与所述匹配规则的匹配结果是可以根据实际情况设定的,其可以依据所述AC自动机所包括的每一路径与所述第一待匹配字符串的第一匹配结果来确定。即,在判定所述第一待匹配字符串与所述匹配规则是否匹配成功时,可以不要求AC自动机所包括的所有路径与所述第一待匹配字符串匹配成功。例如,在对客服的服务内容进行违禁字匹配时,只要任一个违禁字匹配成功即可确定违禁行为的出现。
[0082] 采用上述方法,能够达到以下技术效果:
[0083] 通过将预定匹配规则生成AC自动机,利用了AC自动机能够通过匹配规则的公共前缀减少查询时间的特性,极大限度的减少了重复的比较过程。同时,根据AC自动机上的节点元素在所述AC自动机上所处的节点位置关系以及相应节点元素在待匹配字符串中的位置信息建立了跳表。利用跳表索引能够实现快速查找的特点,对AC自动机中的所有路径,都采用跳表索引的方式快速获取路径的匹配结果。最终通过优先遍历所述AC自动机来完成对匹配路径顺序的选择,并通过跳表来获取对应路径的第一匹配结果,再根据所述AC自动机上每一路径与所述第一待匹配字符串的第一匹配结果来确定所述第一待匹配字符串与所述预定匹配规则的匹配结果,从而结合了AC自动机与跳表索引的优点,实现了高效的并行模糊匹配,提升了字符串匹配效率。
[0084] 图2是根据一示例性实施例示出的一种字符串匹配方法的流程图。参照图2,所述方法包括:
[0085] S21,加载第一待匹配字符串。
[0086] S22,获取AC自动机的每一节点元素在所述第一待匹配字符串中的位置信息;
[0087] S23,根据所述位置信息生成对应每一所述节点元素的位置信息集合。
[0088] 其中,所述位置信息用于表明所述AC自动机中的每一节点元素在所述第一待匹配字符串中出现的先后顺序。在具体实施时,所述位置信息可以是节点元素在所述第一待匹配字符串中出现位置的下标。示例地,节点元素在所述第一待匹配字符串的第1位,第3位,第5位分别出现,则所述节点元素的位置信息集合为{1,3,5}。
[0089] S24,获取AC自动机的节点元素在所述AC自动机上所处的节点位置关系。
[0090] S25,根据所述位置信息集合建立对应每一所述节点元素的链表索引。
[0091] S26,根据所述AC自动机中用于表征同一匹配规则的节点元素集合中节点元素之间的层次关系和所述链表索引构建所述跳表。
[0092] 其中,在所述跳表中,子节点的链表索引为父节点链表索引的跳表下层。应当理解的是,对于某一个匹配规则,所述匹配规则在所述AC自动机上可以体现为从根节点到终态节点之间的一段连续路径,所述路径连接了构成所述匹配规则的所有节点元素。在构建跳表时,可以利用AC自动机的相邻节点之间存在的父节点与子节点这样的位置关系,将子节点的链表索引设置为为父节点链表索引的跳表下层。
[0093] S27,深度优先遍历所述AC自动机,并根据所述跳表分别获取各目标节点与所述目标节点的父节点之间的路径与所述第一待匹配字符串的第一匹配结果,所述目标节点为每次遍历到的节点。
[0094] S28,根据所述AC自动机所包括的每一路径与所述第一待匹配字符串的第一匹配结果,输出所述第一待匹配字符串与所述预定匹配规则的匹配结果。
[0095] 也就是说,通过对匹配规则创建跳表索引,使得在实际匹配过程中,可以通过深度优先遍历AC自动机来确定路径的匹配顺序,实现一次性对所有匹配规则进行并行匹配的效果。同时还可以根据建立好的跳表索引来确定相关路径的匹配结果,不仅利用了跳表索引降低了方法的时间复杂度,还使得匹配规则扩充到了模糊字段,解决了传统AC自动机无法高效的进行并行模糊匹配的问题。
[0096] 图3是根据一示例性实施例示出的一种字符串匹配方法的流程图,如图3所示,所述字符串匹配方法包括:
[0097] S31,加载第一待匹配字符串。
[0098] S32,获取AC自动机的每一节点元素在所述第一待匹配字符串中的位置信息,根据所述位置信息生成对应每一所述节点元素的位置信息集合。其中,所述位置信息用于表明所述AC自动机中的每一节点元素在所述待匹配字符串中出现的先后顺序。
[0099] S33,获取AC自动机的节点元素在所述AC自动机上所处的节点位置关系。
[0100] S34,根据所述位置信息集合建立对应每一所述节点元素的链表索引。
[0101] S35,根据所述AC自动机中用于表征同一匹配规则的节点元素集合中节点元素之间的层次和所述链表索引构建所述跳表。其中,在所述跳表中,子节点的链表索引为父节点链表索引的跳表下层
[0102] S36,深度优先遍历所述AC自动机,当遍历到所述AC自动机的第一层的节点时,依次对所述第一层的节点的节点元素对应的链表索引中的位置信息添加标记。
[0103] 其中,所述第一层节点的节点元素对应的链表索引中已标记的位置信息作为查找跳表的初始位置信息。
[0104] S37,当遍历到所述AC自动机的第一层以下的节点时,将所述第一层以下的节点作为目标节点。
[0105] S38,若通过查找所述跳表的方式,确定存在目标位置信息,则确定所述目标节点的父节点与所述目标节点之间的路径与所述第一待匹配字符串的匹配成功。
[0106] 其中,所述目标位置信息为所述目标节点的节点元素对应的链表索引中,晚于所述目标节点的父节点的节点元素对应的链表索引中最新被标记的位置信息的位置信息。
[0107] S39,对所述目标位置信息添加标记,其中,已标记的所述目标位置信息为当遍历到所述目标节点的子节点时,开始查找所述跳表的起始位置信息。
[0108] S10,根据所述AC自动机所包括的每一路径与所述第一待匹配字符串的第一匹配结果,输出所述第一待匹配字符串与所述预定匹配规则的匹配结果。
[0109] 这样,在匹配的过程中,所述字符串匹配方法不但能够将匹配规则扩展到模糊字段,还能够对匹配到的所有结果进行标记,即能够在待匹配字符串中找到所有符合匹配规则的目标。从而不仅实现了高效的并行模糊匹配,还能够对符合模糊匹配规则的目标进行标记,以便于后续的统计和分析,提升了方法的实用性。
[0110] 值得注意的是,在实际的匹配过程中,根据实际需求,可以仅判断待匹配字符串中是否存在符合所述匹配规则的目标(存在一条符合匹配规则的目标即可),也可以找出所有符合匹配规则的目标,本公开对此不做限定。
[0111] 此外值得说明的是,对于上述方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本公开并不受所描述的动作顺序的限制。例如,参照图3和图4,所述获取AC自动机的节点元素在所述第一待匹配字符串中的位置信息和获取所述节点元素在所述AC自动机上所处的节点位置关系也可以同时进行,二者之间并无先后之分。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均为示例,所涉及的动作并不一定是本发明所必须的。
[0112] 图4是根据一示例性实施例示出的一种字符串匹配方法的流程图,如图4所示,所述字符串匹配方法包括:
[0113] S41,加载第二待匹配字符串。
[0114] S42,过滤掉所述第二待匹配字符串中非AC自动机节点元素的部分,得到第一待匹配字符串。
[0115] S43,获取AC自动机的节点元素在所述第一待匹配字符串中的位置信息,和所述节点元素在所述AC自动机上所处的节点位置关系,所述AC自动机是根据字符串的预定匹配规则生成的。
[0116] S44,根据所述位置信息和所述节点位置关系构建跳表。
[0117] S45,深度优先遍历所述AC自动机,并根据所述跳表分别获取各目标节点与所述目标节点的父节点之间的路径与所述第一待匹配字符串的第一匹配结果,所述目标节点为每次遍历到的节点。
[0118] S46,根据所述AC自动机所包括的每一路径与所述第一待匹配字符串的第一匹配结果,输出所述第一待匹配字符串与所述预定匹配规则的匹配结果。
[0119] 也就是说,在构建跳表之前,可以预先加载第二待匹配字符串,将所述第二待匹配字符串中不存在于任一匹配规则中的元素进行过滤,得到所述第一待匹配字符串。这样,所述第一待匹配字符串就全部由所述AC自动机的节点元素构成,从而简化了待匹配字符串的复杂度,也降低了构建跳表的难度,提升了方法的实用性。
[0120] 图5是根据一示例性实施例示出的一种字符串匹配方法的流程图,如图5所示,所述字符串匹配方法包括:
[0121] S51,加载表征用户行为的第一待匹配字符串。
[0122] S52,获取AC自动机的节点元素在所述第一待匹配字符串中的位置信息,和所述节点元素在所述AC自动机上所处的节点位置关系,所述AC自动机是根据用户异常行为匹配规则生成的。
[0123] S53,根据所述位置信息和所述节点位置关系构建跳表。
[0124] S54,深度优先遍历所述AC自动机,并根据所述跳表分别获取各目标节点与所述目标节点的父节点之间的路径与所述第一待匹配字符串的第一匹配结果,所述目标节点为每次遍历到的节点。
[0125] S55,在所述AC自动机所包括的所有路径匹配成功后,输出用于表征用户行为异常的匹配结果。
[0126] 这样,通过对用户异常行为匹配规则建立AC自动机,采用AC自动机结合跳表索引的方式,能够高效的将表征用户行为的字符串与异常行为匹配规则进行匹配,解决了相关技术中当异常行为没有连续发生或异常行为中夹杂其他行为时,匹配效率较低导致异常状态难以及时发现的问题。
[0127] 上述方法实施例仅为示例,在实际的实施过程中,还可以有多种其他的实施方式,例如图6所示的实施方式。参照图6,所述字符串匹配方法包括:
[0128] 加载规则集合,根据所述规则集合中的匹配规则生成AC自动机;
[0129] 对待匹配序列进行过滤,过滤掉其中不在所述AC自动机中出现的元素,根据所述AC自动机中的节点元素在过滤后的待匹配序列中的位置信息创建对应节点元素的索引;
[0130] 深度优先遍历所述AC自动机,通过查找索引确定具体路径的匹配结果;
[0131] 根据所述AC自动机所包括的所有路径与所述待匹配序列的匹配结果,输出所述待匹配序列与所述规则集合的匹配结果。
[0132] 示例地,在待匹配字符串183935672332中对匹配规则3*6*7,3*3*2,3*2进行匹配。可以包括:
[0133] 加载所述匹配规则,将规则集中的通配符进行过滤,得到新的匹配规则367,332,32,根据新的匹配规则生成AC自动机如图7所示。
[0134] 加载所述待匹配字符串183935672332,过滤掉其中不在所述AC自动机中出现的元素,得到过滤后的待匹配字符串33672332。
[0135] 获取所述AC自动机中的节点元素在所述过滤后的待匹配字符串中的所有位置脚标(按照节点元素在待匹配字符串中出现的先后顺序从小到大排列)并建立对应节点元素的索引,得到索引:
[0136] 3‑>0,1,5,6;
[0137] 6‑>2;
[0138] 7‑>3;
[0139] 2‑>4,7;
[0140] 根据属于同一匹配规则的节点元素在AC自动机上所处的节点位置关系以及对应节点元素的索引构建跳表,例如在建立匹配规则367的跳表时,匹配规则367对应的节点元素在AC自动机上体现为节点元素3位于节点元素6的父节点,节点元素6位于节点元素7的父节点,因此对于匹配规则367构建的跳表可以包括三层,从上到下依次是节点元素3,6,7的索引。其中,所述索引可以以链表的形式实现,索引中的每一个元素可以包括一个指向同一层下一个索引元素的指针以及一个指向下一层链表索引的指针。
[0141] 深度优先遍历所述AC自动机,通过跳表查找确定所述AC自动机中每一条路径的匹配结果。
[0142] 根据所述AC自动机所包括的所有路径与所述待匹配字符串的匹配结果,输出所述待匹配字符串与所述匹配规则的匹配结果。
[0143] 图8是根据一示例性实施例示出的一种字符串匹配装置800的框图,该装置包括:
[0144] 载入模块801,被配置为加载第一待匹配字符串。
[0145] 第一获取模块802,被配置为获取AC自动机的节点元素在所述第一待匹配字符串中的位置信息,和所述节点元素在所述AC自动机上所处的节点位置关系,所述AC自动机是根据字符串的预定匹配规则生成的。
[0146] 创建模块803,被配置为根据所述位置信息和所述节点位置关系构建跳表。
[0147] 遍历模块804,被配置为深度优先遍历所述AC自动机。
[0148] 第二获取模块805,被配置为根据所述跳表分别获取各目标节点与所述目标节点的父节点之间的路径与所述第一待匹配字符串的第一匹配结果,所述目标节点为每次遍历到的节点。
[0149] 输出模块806,被配置为根据所述AC自动机所包括的每一路径与所述第一待匹配字符串的第一匹配结果,输出所述第一待匹配字符串与所述预定匹配规则的匹配结果。
[0150] 采用上述装置,可以包括如下技术效果:
[0151] 通过将预定匹配规则生成AC自动机,利用了AC自动机能够通过匹配规则的公共前缀减少查询时间的特性,极大限度的减少了重复的比较过程。同时,根据AC自动机上的节点元素在所述AC自动机上所处的节点位置关系以及相应节点元素在待匹配字符串中的位置信息采用创建模块建立了跳表。利用跳表索引能够实现快速查找的特点,对AC自动机中的所有路径,都采用跳表索引的方式快速确定路径的匹配结果。最终通过遍历模块优先遍历所述AC自动机来完成对匹配路径顺序的选择,并由第二获取模块通过跳表来获取对应路径的第一匹配结果,再根据所述AC自动机上每一路径与所述第一待匹配字符串的第一匹配结果来确定所述第一待匹配字符串与所述预定匹配规则的匹配结果,由输出模块输出所述待匹配字符串与所述匹配规则的匹配结果。从而结合了AC自动机与跳表索引的优点,实现了高效的并行模糊匹配,提升了字符串匹配效率。
[0152] 图9是根据一示例性实施例示出的一种字符串匹配装置800的框图,参照图9,所述装置在图8的基础上,所述第一获取模块802包括:
[0153] 获取子模块8021,被配置为获取每一节点元素在所述第一待匹配字符串中的位置信息。
[0154] 生成子模块8022,被配置为根据所述位置信息生成对应每一所述节点元素的位置信息集合。
[0155] 其中,所述位置信息用于表明所述AC自动机中的每一节点元素在所述待匹配字符串中出现的先后顺序。
[0156] 所述创建模块803包括:
[0157] 第一创建子模块8031,被配置为根据所述位置信息集合建立对应每一所述节点元素的链表索引。
[0158] 第二创建子模块8032,被配置为根据所述AC自动机中用于表征同一匹配规则的节点元素集合中节点元素之间的层次和所述链表索引构建所述跳表。
[0159] 其中,在所述跳表中,子节点的链表索引为父节点链表索引的跳表下层。
[0160] 这样,通过所述创建模块对匹配规则分别创建跳表索引,使得在实际匹配过程中,可以通过遍历模块来确定路径的匹配顺序,实现一次性对所有匹配规则进行并行匹配的效果。同时还可以根据建立好的跳表索引来确定具体路径的匹配情况,不仅利用了跳表索引降低了方法的时间复杂度,还使得匹配规则扩充到了模糊字段,解决了传统AC自动机无法高效的进行模糊匹配的问题。
[0161] 图10是根据一示例性实施例示出的一种字符串匹配装置800的框图,参照图10,所述装置在图9的基础上,所述第二获取模块805还包括:
[0162] 第一标记子模块8051,被配置为当所述遍历模块遍历到所述AC自动机中的第一层的节点时,依次对所述第一层的节点的节点元素对应的链表索引中的位置信息添加标记,其中,所述第一层节点的节点元素对应的链表索引中已标记的位置信息作为查找跳表的初始位置信息。
[0163] 确定子模块8052,被配置为在所述遍历模块804遍历到所述AC自动机的第一层以下的节点,将所述第一层以下的节点作为目标节点时,查找跳表,在通过查找所述跳表的方式,确定存在目标位置信息时,确定所述目标节点的父节点与所述目标节点之间的路径与所述第一待匹配字符串的匹配成功。
[0164] 其中,所述目标位置信息为所述目标节点的节点元素对应的链表索引中,晚于所述目标节点的父节点的节点元素对应的链表索引中最新被标记的位置信息的位置信息。
[0165] 第二标记模块8053,被配置为对所述目标位置信息添加标记,其中,已标记的所述目标位置信息为当遍历到所述目标节点的子节点时,开始查找所述跳表的起始位置信息。
[0166] 也就是说,所述装置不仅能够使得匹配规则扩展到模糊字段,还能够对匹配到的所有结果进行标记,即能够在待匹配字符串中找到所有符合匹配规则的目标。从而不仅实现了高效的并行模糊匹配,还能够对符合模糊匹配规则的目标进行标记,以便于后续的统计和分析,提升了装置的实用性。
[0167] 图11是根据一示例性实施例示出的一种字符串匹配装置800的框图,参照图11,所述装置在图8的基础上,所述载入模块801包括:
[0168] 载入子模块8011,被配置为加载第二待匹配字符串;
[0169] 过滤子模块8012,被配置为过滤掉所述第二待匹配字符串中非所述AC自动机节点元素的部分,得到第一待匹配字符串。
[0170] 这样,在构建跳表之前,可以预先加载第二待匹配字符串,通过过滤子模块将所述第二待匹配字符串中非AC自动机节点元素的部分进行过滤,得到第一待匹配字符串。这样,所述第一待匹配字符串就全部由所述AC自动机的节点元素构成,从而简化了第一待匹配字符串的复杂度,也降低了构建跳表的难度,提升了装置的实用性。
[0171] 在一种可能的实施方式中,所述载入模块801,被配置为加载用于表征用户行为的第一待匹配字符串。
[0172] 所述第一获取模块802,被配置为获取AC自动机的节点元素在所述待第一匹配字符串中的位置信息,和所述节点元素在所述AC自动机上所处的节点位置关系。其中,所述AC自动机是根据用户异常行为匹配规则生成的。
[0173] 所述创建模块803,被配置为根据所述位置信息和所述节点位置关系构建跳表。
[0174] 所述遍历模块804,被配置为深度优先遍历所述AC自动机。
[0175] 所述第二获取模块804,被配置为根据所述跳表分别获取各目标节点与所述目标节点的父节点之间的路径与所述第一待匹配字符串的第一匹配结果,所述目标节点为每次遍历到的节点。
[0176] 所述输出模块805,被配置为在所述AC自动机所包括的所有路径匹配成功后,输出用于表征用户行为异常的匹配结果。
[0177] 这样,通过对用户异常行为匹配规则建立AC自动机,采用AC自动机结合跳表索引的方式,能够高效的将表征用户行为的字符串与异常行为匹配规则进行匹配,解决了相关技术中当异常行为没有连续发生或异常行为中夹杂其他行为时,因匹配效率较低导致异常状态难以及时发现的问题。
[0178] 关于上述实施例中的装置,其中各个模块执行操作的具体方式已经在有关该方法的实施例中进行了详细描述,此处将不做详细阐述说明。
[0179] 本公开还提供一种计算机可读存储介质,其上存储有计算机程序指令,该程序指令被处理器执行时实现本公开提供的字符串匹配方法的步骤。
[0180] 本公开还提供一种电子设备,包括:
[0181] 存储器,其上存储有计算机程序;
[0182] 处理器,用于执行所述存储器中的所述计算机程序,以实现本公开提供的字符串匹配方法的步骤。
[0183] 图12是根据一示例性实施例示出的一种用于字符串匹配的装置1200的框图。例如,装置1200可以被提供为一服务器。参照图12,装置1200包括处理组件1222,其进一步包括一个或多个处理器,以及由存储器1232所代表的存储器资源,用于存储可由处理组件1222的执行的指令,例如应用程序。存储器1232中存储的应用程序可以包括一个或一个以上的每一个对应于一组指令的模块。此外,处理组件1222被配置为执行指令,以执行上述字符串匹配方法。
[0184] 装置1200还可以包括一个电源组件1226被配置为执行装置1200的电源管理,一个有线或无线网络接口1250被配置为将装置1200连接到网络,和一个输入输出(I/O)接口1258。装置1200可以操作基于存储在存储器1232的操作系统,例如Windows ServerTM,Mac OS XTM,UnixTM,LinuxTM,FreeBSDTM或类似。
[0185] 本领域技术人员在考虑说明书及实践本公开后,将容易想到本公开的其它实施方案。本申请旨在涵盖本公开的任何变型、用途或者适应性变化,这些变型、用途或者适应性变化遵循本公开的一般性原理并包括本公开未公开的本技术领域中的公知常识或惯用技术手段。说明书和实施例仅被视为示例性的,本公开的真正范围和精神由下面的权利要求指出。
[0186] 应当理解的是,本公开并不局限于上面已经描述并在附图中示出的精确结构,并且可以在不脱离其范围进行各种修改和改变。本公开的范围仅由所附的权利要求来限制。