CN114238709A - 字符串匹配方法、装置、设备和可读存储介质 - Google Patents
字符串匹配方法、装置、设备和可读存储介质 Download PDFInfo
- Publication number
- CN114238709A CN114238709A CN202111463948.7A CN202111463948A CN114238709A CN 114238709 A CN114238709 A CN 114238709A CN 202111463948 A CN202111463948 A CN 202111463948A CN 114238709 A CN114238709 A CN 114238709A
- Authority
- CN
- China
- Prior art keywords
- character string
- matched
- fixed
- length
- index tree
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
- 238000000034 method Methods 0.000 title claims abstract description 63
- 230000008569 process Effects 0.000 claims description 23
- 238000004590 computer program Methods 0.000 claims description 18
- 238000010276 construction Methods 0.000 claims description 15
- 238000012216 screening Methods 0.000 claims description 15
- 238000000605 extraction Methods 0.000 claims description 12
- 230000006870 function Effects 0.000 claims description 12
- 238000013507 mapping Methods 0.000 claims description 9
- 238000010586 diagram Methods 0.000 description 18
- 238000012545 processing Methods 0.000 description 12
- 238000012163 sequencing technique Methods 0.000 description 9
- 238000012795 verification Methods 0.000 description 6
- 238000006243 chemical reaction Methods 0.000 description 4
- 230000000694 effects Effects 0.000 description 4
- 230000009471 action Effects 0.000 description 3
- 238000001914 filtration Methods 0.000 description 3
- 238000012986 modification Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 230000001360 synchronised effect Effects 0.000 description 2
- 230000004075 alteration Effects 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 230000002045 lasting effect Effects 0.000 description 1
- 238000004519 manufacturing process Methods 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 230000000750 progressive effect Effects 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/90—Details of database functions independent of the retrieved data types
- G06F16/903—Querying
- G06F16/90335—Query processing
- G06F16/90344—Query processing by using string matching techniques
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/90—Details of database functions independent of the retrieved data types
- G06F16/901—Indexing; Data structures therefor; Storage structures
- G06F16/9027—Trees
Landscapes
- Engineering & Computer Science (AREA)
- Databases & Information Systems (AREA)
- Theoretical Computer Science (AREA)
- Data Mining & Analysis (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computational Linguistics (AREA)
- Software Systems (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本申请实施例提供了字符串匹配方法、装置、设备和可读存储介质,应用于字符串匹配模块,所述方法包括:获取原始待匹配字符串集合,将原始待匹配字符串集合抽取为定长子串集合;根据定长子串集合构建索引树,索引树为基于定长子串集合中各个定长子串的定长长度以及所包含字符构建的;根据索引树遍历预设模式字符串,得到预设模式字符串在索引树中存在的字符串。基于所划分的定长子串的定长长度构建内存可控的索引树,保证用于匹配字符串的索引树内存可控,且基于所构建的索引树进行字符串的匹配,利用状态自动机的某些操作阻止模式串匹配阶段的回溯,实现在避免内存溢出的情况下,解决匹配大量固定的待匹配字符串执行时间较长的问题。
Description
技术领域
本申请涉及计算机技术领域,特别是涉及一种字符串匹配方法、字符串匹配装置、设备和可读存储介质。
背景技术
字符串搜索,目的在于从长字符串中搜索是否包含的某字符串,主要可以对某字符串与长字符串进行匹配实现。
字符串匹配模块是数据加工引擎的核心模块,当需要匹配大量固定的待匹配字符串时,传统匹配方式的执行时间将与待匹配字符串的数量成正比,具有较高的时间复杂度,存在执行时间较长的问题,进而降低数据加工引擎的总体性能。
发明内容
鉴于上述问题,提出了本申请实施例以便提供一种克服上述问题或者至少部分地解决上述问题的一种字符串匹配方法和相应的一种字符串匹配装置,以及相应的电子设备与计算机可读存储介质。
本申请实施例公开了一种字符串匹配方法,应用于字符串匹配模块,所述方法包括:
获取原始待匹配字符串集合,将所述原始待匹配字符串集合抽取为定长子串集合;
根据所述定长子串集合构建索引树,所述索引树为基于所述定长子串集合中各个定长子串的定长长度以及所包含字符构建的;
根据所述索引树遍历预设模式字符串,得到所述预设模式字符串在所述索引树中存在的字符串。
可选地,所述将所述原始待匹配字符串集合抽取为定长子串集合,包括:
基于预先设定的定长长度以及索引串数量,将所述原始待匹配字符串集合划分为多个定长子串;
将所述多个定长子串进行组合得到定长子串集合。
可选地,所述根据所述定长子串集合构建索引树,包括:
获取所述定长子串集合中各个定长子串所包含的字符,分别将所述各个定长子串所包含的字符转换为树节点间的跳转边;
按照所述各个定长子串所包含字符的先后顺序,分别采用与所包含字符相应的跳转边依次构建索引树。
可选地,所述根据所述定长子串集合构建索引树,包括:
采用状态机的形式,基于所述定长子串集合构建针对各个定长子串所包含的各个字符的正确跳转路径和/或失败跳转路径;
还包括:
在构建索引树的过程中,根据所述正确跳转路径和/或失败跳转路径同步记录所述索引树的树节点在原始待匹配字符串集合中的索引。
可选地,所述根据所述索引树遍历预设模式字符串,得到所述预设模式字符串在所述索引树中存在的字符串,包括:
获取所述预设模式字符串所包含的字符,采用所述索引树逐个遍历所述预设模式字符串所包含的字符,得到候选待匹配字符串以及相应的待匹配字符串索引集合;
基于所述待匹配字符串索引集合从多个候选待匹配字符串中筛选得到匹配成功的字符串。
可选地,所述采用所述索引树逐个遍历所述预设模式字符串所包含的字符,得到候选待匹配字符串以及相应的待匹配字符串索引集合,包括:
确定所述预设模式字符串所包含的字符在索引树中当前遍历的树节点,并获取所述当前遍历的树节点的状态;
若所述当前遍历的树节点的状态存在符合预设模式字符串中的字符串,则将与所述当前遍历的树节点的状态相匹配的字符串添加到预先建立的候选待匹配字符串匹配进度的映射中,并同步更新相应的待匹配字符串索引集合。
可选地,所述基于所述待匹配字符串索引集合从多个候选待匹配字符串中筛选得到匹配成功的字符串,包括:
在所述多个候选待匹配字符串中,筛选出存在待匹配字符串索引集合的长度等于候选待匹配字符串的定长子串的总数的目标候选待匹配字符串为过滤成功的待匹配字符串;
若采用预设子串函数对所述过滤成功的待匹配字符串验证成功,则确定所述过滤成功的待匹配字符串为匹配成功的字符串。
本申请实施例还公开了一种字符串匹配装置,所述装置包括:
定长子串集合抽取模块,用于获取原始待匹配字符串集合,将所述原始待匹配字符串集合抽取为定长子串集合;
索引树构建模块,用于根据所述定长子串集合构建索引树,所述索引树为基于所述定长子串集合中各个定长子串的定长长度以及所包含字符构建的;
字符串匹配模块,用于根据所述索引树遍历预设模式字符串,得到所述预设模式字符串在所述索引树中存在的字符串。
可选地,所述定长子串集合抽取模块包括:
定长子串划分子模块,用于基于预先设定的定长长度以及索引串数量,将所述原始待匹配字符串集合划分为多个定长子串;
定长子串组合子模块,用于将所述多个定长子串进行组合得到定长子串集合。
可选地,所述索引树构建模块包括:
跳转边转换子模块,用于获取所述定长子串集合中各个定长子串所包含的字符,分别将所述各个定长子串所包含的字符转换为树节点间的跳转边;
索引树构建子模块,用于按照所述各个定长子串所包含字符的先后顺序,分别采用与所包含字符相应的跳转边依次构建索引树。
可选地,所述索引树构建模块包括:
跳转路径构建子模块,用于采用状态机的形式,基于所述定长子串集合构建针对各个定长子串所包含的各个字符的正确跳转路径和/或失败跳转路径。
可选地,所述索引树构建模块包括:
索引同步记录子模块,用于在构建索引树的过程中,根据所述正确跳转路径和/或失败跳转路径同步记录所述索引树的树节点在原始待匹配字符串集合中的索引。
可选地,所述字符串匹配模块包括;
字符遍历子模块,用于获取所述预设模式字符串所包含的字符,采用所述索引树逐个遍历所述预设模式字符串所包含的字符,得到候选待匹配字符串以及相应的待匹配字符串索引集合;
待匹配字符串筛选子模块,用于基于所述待匹配字符串索引集合从多个候选待匹配字符串中筛选得到匹配成功的字符串。
可选地,所述字符遍历子模块包括:
当前遍历状态确定单元,用于确定所述预设模式字符串所包含的字符在索引树中当前遍历的树节点,并获取所述当前遍历的树节点的状态;
字符遍历单元,用于在所述当前遍历的树节点的状态存在符合预设模式字符串中的字符串时,将与所述当前遍历的树节点的状态相匹配的字符串添加到预先建立的候选待匹配字符串匹配进度的映射中,并同步更新相应的待匹配字符串索引集合。
可选地,所述待匹配字符串筛选子模块包括:
待匹配字符串过滤单元,用于在所述多个候选待匹配字符串中,筛选出存在待匹配字符串索引集合的长度等于候选待匹配字符串的定长子串的总数的目标候选待匹配字符串为过滤成功的待匹配字符串;
待匹配字符串验证单元,用于在采用预设子串函数对所述过滤成功的待匹配字符串验证成功的情况下,确定所述过滤成功的待匹配字符串为匹配成功的字符串。
本申请实施例还公开了一种电子设备,包括:处理器、存储器及存储在所述存储器上并能够在所述处理器上运行的计算机程序,所述计算机程序被所述处理器执行时实现任一项所述字符串匹配方法的步骤。
本申请实施例还公开了一种计算机可读存储介质,所述计算机可读存储介质上存储计算机程序,所述计算机程序被处理器执行时实现任一项所述字符串匹配方法的步骤。
本申请实施例包括以下优点:
在本申请实施例中,将原始待匹配字符串集合抽取为定长子串集合,并基于定长子串集合中的各个定长子串的定长长度,以及各个定长子串所包含的字符对索引树进行构建,然后可以通过索引树对预设模式字符串进行遍历以得到预设模式字符串在索引树中存在的字符串,实现利用所构建的索引树对字符串进行匹配。基于所划分的定长子串的定长长度构建内存可控的索引树,保证用于匹配字符串的索引树内存可控,且基于所构建的索引树进行字符串的匹配,利用状态自动机的某些操作阻止模式串匹配阶段的回溯,实现在避免内存溢出的情况下,解决匹配大量固定的待匹配字符串执行时间较长的问题,降低算法的时间复杂度。
附图说明
图1是本申请的一种字符串匹配方法实施例的步骤流程图;
图2是本申请实施例中所构建的索引树的示意图;
图3是本申请的另一种字符串匹配方法实施例的步骤流程图;
图4是本申请实施例提供的字符串匹配的应用场景图;
图5是本申请实施例提供的字符串搜索的过程示意图;
图6是本申请的一种字符串匹配装置实施例的结构框图。
具体实施方式
为使本申请的上述目的、特征和优点能够更加明显易懂,下面结合附图和具体实施方式对本申请作进一步详细的说明。
字符串匹配模块是数据加工引擎的核心模块,字符串匹配的目的主要是实现字符串搜索,即从长字符串中搜索是否包含的某字符串,以实现对某字符串与长字符串的匹配。
字符串匹配模块的执行主要可以依赖于相关的精确字符串搜索算法实现,例如Brute-Force、KMP(Knuth-Morris-Pratt)等算法,但在相关的精确字符串搜索算法中,Brute-Force算法是在面对本次字符串比较失败的情况下,在下一次比较时仍然需要从模式字符串的起始字符开始按顺序依次进行匹配,时间复杂度不仅受到模式字符串长度、数量的影响,还可能受到匹配次数的影响;且在KMP算法中,通常利用失败信息增加用于下一次匹配索引的方式,以减少总的匹配次数,但这种方式仍然将会受到待匹配的字符串数量的影响,其针对单条待匹配字符串具有较低的时间复杂度,可是当需要匹配大量固定的待匹配字符串时,采用KMP算法的执行时间将与待匹配字符串的数量成正比,这种方式并不适用于解决匹配大量字符串,即目前精确字符串搜索算法的相关字符串匹配方式所需的时间复杂度较高。
本申请实施例应用于字符串匹配模块,其核心思想之一是提出了一种内存保护的大规模精确字符串搜索算法,主要是基于所划分的定长子串的定长长度构建内存可控的索引树,采用所抽取的定长子串的索引,以及在通过索引树对模式字符串进行遍历时的定序比较索引的方式,在保证不出现内存溢出错误的前提下,解决匹配大量固定的待匹配字符串执行时间较长的问题,降低算法的时间复杂度,提高对字符串的搜索性能。
参照图1,示出了本申请的一种字符串匹配方法实施例的步骤流程图,应用于字符串匹配模块,具体可以包括如下步骤:
步骤101,获取原始待匹配字符串集合,将原始待匹配字符串集合抽取为定长子串集合;
字符串匹配模块是数据加工引擎的核心模块,在本申请实施例中可以基于所划分的定长子串构建内存可控的索引树,以降低通过索引树对模式字符串进行定序比较时的执行时间。对于字符串匹配模块所执行的字符串匹配实现,首先可以执行定长子串抽取操作,以便后续能够采用所抽取的定长子串构建内存可控的索引树。
原始待匹配字符串集合中所包含的字符串可以用于构建内存可控的索引树,对原始待匹配字符串集合的定长子串抽取操作可以表现为将原始待匹配字符串集合按照固定长度划分为定长子串。其中,定长子串的划分可以通过基于预先设定的定长长度以及索引串数量,将原始待匹配字符串集合划分为多个定长子串,以将所划分得到的多个定长子串组合得到用于构建索引树的定长子串集合。
在实际应用中,将原始待匹配字符串集合抽取为多个定长子串,主要是通过字符串匹配模块在执行时能够基于预先所设定的参数进行抽取,在所组成的定长子串集合中前面部分抽取的子串均为定长,位于后面几个所抽取的子串长度将会逐渐减小。
示例性地,假设原始待匹配字符串集合中的某个字符串为“manyanxinxi”,最大定长为3,最小定长为2,最大索引串数量为3,则从原始待匹配字符串集合中基于预定的定长长度与索引串数量进行划分得到的子串可以为“man”、“yan”、“xin”。需要说明的是,对于字符串抽取的定长长度以及索引串数量的设定,可以基于实际情况进行设定,以及所要抽取的原始待匹配字符串集合中可以包含字母形式、数字形式、ASCII码形式、以及前述任意形式组合的字符串,对此,本申请实施例不加以限制。
步骤102,根据抽取得到的定长子串集合构建索引树;
在本申请的一种实施例中,对于字符串匹配模块所执行的字符串匹配实现,在执行完定长子串抽取操作之后,可以通过字符串匹配模块执行索引树构建操作,主要是采用所抽取的定长子串构建内存可控的索引树,即基于所限定的所有用于构建索引树的定长子串的长度以限制索引树的最大深度,进而达到控制索引树的内存空间的效果,避免出现内存溢出错误。
索引树的构建,主要是基于定长子串集合中各个定长子串的定长长度,以及各个定长子串所包含的字符进行构建的,以在基于所包含的字符进行构建的过程中通过定长子串的长度限制索引树的深度。
在实际应用中,可以采用定序字符串中所包含的字符构建索引树,定序字符串中所包含的字符可以指的是定长子串集合中各个定长子串所包含的字符,然后分别将各个定长子串所包含的字符转换为树节点间的跳转边,并按照各个定长子串所包含字符的先后顺序,分别采用字符相应的跳转边依次构建索引树。
具体的,参照图2,示出了本申请实施例中所构建的索引树的示意图,所构建的索引树,其本质上可以是AC(Aho-Corasick automation)自动机,AC自动机能够采用其自身的特性或操作阻止模式串匹配阶段的回溯,使得其在进行字符串匹配失败时无需回到开头重新进行匹配,实现对字符串匹配模块在执行时的时间复杂度进行优化。
其中,主要可以采用自动状态机的形式,基于其所具备的失败跳转的特性实现对模式串匹配阶段的回溯。在本申请的一种实施例中,可以基于定长子串集合构建针对各个定长子串所包含的各个字符的正确跳转路径和/或失败跳转路径,并在构建索引树的过程中,能够根据正确跳转路径和/或失败跳转路径同步记录索引树的树节点在原始待匹配字符串集合中的索引,以用于后续的字符串匹配阶段。
示例性地,如图2所示,将原始待匹配字符串集合每个待匹配字符串的首个字符指向索引树的根节点(即0),例如定长子串ab、klm中的a、k指向根节点,在基于各个字符串中的首个字符在索引树的第一层遍历完后,可以开始第二层(根节点为第0层,深度为1)中各个树节点的构建,以及后续各个树节点的构建,直至按照最大定长构建完所有抽取的定长字串所包含的字符为止。需要说明的是,在构建索引树时,可能遇到所抽取的定长子串为重复字符,例如aaa的情况,此时在进行跳转边转换时只需转换一次即可。
步骤103,根据索引树遍历预设模式字符串,得到预设模式字符串在索引树中存在的字符串。
对于字符串匹配模块所执行的字符串匹配实现,在执行完定长子串抽取操作,并采用所抽取的定长子串构建索引树之后,能够执行索引定序比较操作,即进入字符串匹配阶段,在基于所构建的索引树进行字符串的匹配的过程中,能够利用状态自动机的某些操作阻止模式串匹配阶段的回溯,进而降低模块执行的时间复杂度。
具体的,可以通过所构建的索引树遍历预设模式字符串,以得到匹配成功的字符串。其中,预设模式字符串可以指的是需要进行字符串搜索的母串,而其所匹配成功的字符串可以是在母串中匹配得到的子串,即预设模式字符串在索引树中存在的字符串。
在实际应用中,为了防止出现字符匹配但字符排序乱序的情况,首先可以对候选待匹配字符串进行过滤,具体可以使用索引树扫描预设模式字符串,即将预设模式字符串中的各个字符逐个遍历索引树,得到候选待匹配字符串及其待匹配字符串索引集合,直至预设模式字符串中不存在未进行遍历的剩余字符为止,此时符合要求的候选待匹配字符串即为过滤成功的待匹配字符串;然后可以采用子串函数对过滤成功的匹配字符串进一步进行验证,若验证成功则该字符串即为匹配成功的待匹配字符串。
在本申请实施例中,将原始待匹配字符串集合抽取为定长子串集合,并基于定长子串集合中的各个定长子串的定长长度,以及各个定长子串所包含的字符对索引树进行构建,然后可以通过索引树对预设模式字符串进行遍历以得到预设模式字符串在索引树中存在的字符串,实现利用所构建的索引树对字符串进行匹配。基于所划分的定长子串的定长长度构建内存可控的索引树,保证用于匹配字符串的索引树内存可控,且基于所构建的索引树进行字符串的匹配,利用状态自动机的某些操作阻止模式串匹配阶段的回溯,实现在避免内存溢出的情况下,解决匹配大量固定的待匹配字符串执行时间较长的问题,降低算法的时间复杂度。
参照图3,示出了本申请的另一种字符串匹配方法实施例的步骤流程图,应用于字符串匹配模块,具体可以包括如下步骤:
步骤301,基于所划分的定长子串集合构建内存可控的索引树;
字符串匹配模块是数据加工引擎的核心模块,在本申请实施例中可以基于所划分的定长子串构建内存可控的索引树,以降低通过索引树对模式字符串进行定序比较时的执行时间。对于字符串匹配模块所执行的字符串匹配实现,可以执行定长子串抽取以及索引树构建操作,基于所限定的所有用于构建索引树的定长子串的长度以限制索引树的最大深度,进而达到控制索引树的内存空间的效果,避免出现内存溢出错误。
索引树的构建,主要是基于定长子串集合中各个定长子串的定长长度,以及各个定长子串所包含的字符进行构建的,以基于所包含的字符进行构建的过程中通过定长子串的长度限制索引树的深度。
步骤302,创建用以记录匹配成功候选待匹配字符串匹配进度的映射;
对于字符串匹配模块所执行的字符串匹配实现,在执行完定长子串抽取操作,并采用所抽取的定长子串构建索引树之后,能够执行索引定序比较操作,即进入字符串匹配阶段,在进入字符串匹配阶段之前,可以创建用以记录匹配成功候选待匹配字符串匹配进度的映射,以存储候选待匹配字符串与其相应的待匹配字符串索引集合。
所创建的用于存储候选待匹配字符串匹配进度的映射可以是键值表的形式,具体为以候选待匹配字符串为键,以及以相应的待匹配字符串索引集合为对进行存储。其中,相同的候选待匹配字符串,由于其边跳转的路径不同,其可能具有多个待匹配字符串索引,以构成待匹配字符串索引集合。
步骤303,通过所构建的索引树扫描预设模式字符串,得到匹配成功的字符串集合。
在本申请的一种实施例中,可以通过所构建的索引树对预设模式字符串进行遍历,以得到匹配成功的待匹配字符串,在基于所构建的索引树进行字符串的匹配的过程中,能够利用状态自动机的某些操作阻止模式串匹配阶段的回溯,进而降低模块执行的时间复杂度。
具体的,可以获取预设模式字符串所包含的字符,分别采用预设模式字符串所包含的字符逐个遍历索引树,得到候选待匹配字符串以及相应的待匹配字符串索引集合,然后基于待匹配字符串索引集合从多个候选待匹配字符串中筛选得到匹配成功的待匹配字符串。其中,预设模式字符串可以指的是需要进行字符串搜索的母串,而其所匹配成功的待匹配字符串可以是在母串中匹配得到的子串。
在采用预设模式字符串所包含的字符逐个遍历时,可以确定预设模式字符串所包含的字符在索引树中当前遍历的树节点,并获取当前遍历的树节点的状态,若当前遍历的树节点的状态存在符合预设模式字符串中的字符串,则可以将与当前遍历的树节点的状态相匹配的字符串添加到预先建立的候选待匹配字符串匹配进度的映射中,并同步更新相应的待匹配字符串索引集合。
在实际应用中,为了防止出现字符匹配但字符排序乱序的情况,首先可以对候选待匹配字符串进行过滤,即可以在多个候选待匹配字符串中,筛选出存在待匹配字符串索引集合的长度等于候选待匹配字符串的定长子串的总数的目标候选待匹配字符串为过滤成功的待匹配字符串;然后可以采用子串函数对过滤成功的匹配字符串进一步进行验证,若验证成功则该字符串即为匹配成功的待匹配字符串。
在本申请实施例中,将原始待匹配字符串集合抽取为定长子串集合,并基于定长子串集合中的各个定长子串的定长长度,以及各个定长子串所包含的字符对索引树进行构建,然后可以通过索引树对预设模式字符串进行遍历以得到预设模式字符串在索引树中存在的字符串,实现利用所构建的索引树对字符串进行匹配。基于所划分的定长子串的定长长度构建内存可控的索引树,保证用于匹配字符串的索引树内存可控,且基于所构建的索引树进行字符串的匹配,利用状态自动机的某些操作阻止模式串匹配阶段的回溯,实现在避免内存溢出的情况下,解决匹配大量固定的待匹配字符串执行时间较长的问题,降低算法的时间复杂度。
为了便于本领域技术人员进一步理解本申请实施例所提出的字符串匹配方法,结合字符串匹配的应用场景图以及字符串搜索的过程示意图进行如下说明:
在本申请实施例中,主要是基于所划分的定长子串集合构建内存可控的索引树,保证所构建的索引树的内存可控,以使用索引树扫描预设模式字符串得到匹配成功的字符串集合,实现对字符串的匹配与搜索。
参照图4,示出了本申请实施例提供的字符串匹配的应用场景图,字符串匹配通常可以应用在查找日志的场景下,此时可以使用服务器上所部属的日志服务SLS(LogService)实现对日志的查找。其中,日志服务402可以是由数据加工引擎401提供的服务,数据加工引擎可以相当于服务器上的某个服务进程,而作为数据加工引擎中的核心模块—字符串匹配模块403可以是在该服务进程中所具有的功能实现。
在查找日志的场景下,其日志可以由不同形式,例如包含字母形式、数字形式、ASCII码形式、以及前述任意形式组合的字符串构成,而其线上的字符串的数量通常是不固定的,在本申请实施例中基于定长子串构建的索引树,基于定长子串的定长长度对索引树的最大深度进行限制以实现内存可控的索引树的构建,且在后续基于预设模式字符串进行字符串匹配的过程中,按照定序比较模式子串的方式,并不需要依赖于原始待匹配字符串集合的数量。
具体的,参照图5,示出了本申请实施例提供的字符串搜索的过程示意图,其过程可以包括内存可控的索引树构建阶段以及字符串匹配阶段。
(1)在内存可控的索引树构建阶段,能够执行字符串匹配模块划分原始待匹配字符串集合为定长子串,并采用定长子串构建索引树,具体为将定序字符串(即分别所划分的定长子串)所含字符转换为树节点间的跳转边,并根据所含字符的先后顺序构造索引树,同时利用AC自动机的本质构建正确跳转路径以及失败跳转路径,并在索引树构建的过程中记录定长子串索引index;
(2)在字符串匹配阶段,首先可以创建用以存储的候选待匹配字符串匹配进度的映射success Match String Map,其中。键为待匹配字符串success Match String,值为待匹配字符串索引集合index Set。
采用模式字符串逐个字符遍历索引树,currentAc State表示当前字符对应的AC状态机的状态,此时可以判断此状态currentAc State是否存在候选待匹配字符串successMatch String;如果存在,则可以将此状态对应的能够匹配的候选待匹配字符串successMatch String添加到候选待匹配字符串匹配进度的映射success Match String Map,并同步更新待匹配字符串索引集合index Set。如果此时待匹配字符串索引集合index Set的长度等于候选待匹配字符串success Match String的定长子串的总数,则候选待匹配字符串success Match String,即为过滤成功的待匹配字符串,然后再进一步采用子串函数验证成功,则表示该过滤成功的待匹配字符串匹配成功,此时返回结果true,并能够输出匹配成功的待匹配字符串。
不断重复前述的判断步骤,直至预设模式字符串中所包含的字符遍历结束时,若出现当前遍历的字符所对应的AC状态不存在候选待匹配字符串,或待匹配字符串索引集合的长度不等于候选待匹配字符串的定长子串的总数,或在采用子串函数对过滤成功的字符串验证失败的情况,则表示匹配失败,此时返回结果false,还可以提示未成功匹配到字符串的信息以告知使用日志服务的用户。
在本申请实施例中,提出了一种内存保护的大规模精确字符串搜索算法,主要是基于所划分的定长子串的定长长度构建内存可控的索引树,采用所抽取的定长子串的索引,以及在通过索引树对模式字符串进行遍历时的定序比较索引的方式,避免模式匹配程序出现内存溢出错误,提供索引树的内存利用率;以及在保证不出现内存溢出错误的前提下,采用定序比较模式子串方式,具有不强依赖于原始待匹配字符串集合数量的特性,具备的较好匹配性能,通过对索引树的内存可控以及较好的匹配性能,能够解决匹配大量固定的待匹配字符串执行时间较长的问题,降低算法的时间复杂度,提高对字符串的搜索性能。
需要说明的是,对于方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本申请实施例并不受所描述的动作顺序的限制,因为依据本申请实施例,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作并不一定是本申请实施例所必须的。
参照图6,示出了本申请的一种字符串匹配装置实施例的结构框图,具体可以包括如下模块:
定长子串集合抽取模块601,用于获取原始待匹配字符串集合,将所述原始待匹配字符串集合抽取为定长子串集合;
索引树构建模块602,用于根据所述定长子串集合构建索引树,所述索引树为基于所述定长子串集合中各个定长子串的定长长度以及所包含字符构建的;
字符串匹配模块603,用于根据所述索引树遍历预设模式字符串,得到所述预设模式字符串在所述索引树中存在的字符串。
在本申请的一种实施例中,定长子串集合抽取模块601可以包括如下子模块:
定长子串划分子模块,用于基于预先设定的定长长度以及索引串数量,将所述原始待匹配字符串集合划分为多个定长子串;
定长子串组合子模块,用于将所述多个定长子串进行组合得到定长子串集合。
在本申请的一种实施例中,索引树构建模块602可以包括如下子模块:
跳转边转换子模块,用于获取所述定长子串集合中各个定长子串所包含的字符,分别将所述各个定长子串所包含的字符转换为树节点间的跳转边;
索引树构建子模块,用于按照所述各个定长子串所包含字符的先后顺序,分别采用与所包含字符相应的跳转边依次构建索引树。
在本申请的一种实施例中,索引树构建模块602可以包括如下子模块:
跳转路径构建子模块,用于采用状态机的形式,基于所述定长子串集合构建针对各个定长子串所包含的各个字符的正确跳转路径和/或失败跳转路径。
在本申请的一种实施例中,索引树构建模块602还可以包括如下子模块:
索引同步记录子模块,用于在构建索引树的过程中,根据所述正确跳转路径和/或失败跳转路径同步记录所述索引树的树节点在原始待匹配字符串集合中的索引。
在本申请的一种实施例中,字符串匹配模块603可以包括如下子模块;
字符遍历子模块,用于获取所述预设模式字符串所包含的字符,采用所述索引树逐个遍历所述预设模式字符串所包含的字符,得到候选待匹配字符串以及相应的待匹配字符串索引集合;
待匹配字符串筛选子模块,用于基于所述待匹配字符串索引集合从多个候选待匹配字符串中筛选得到匹配成功的字符串。
在本申请的一种实施例中,字符遍历子模块可以包括如下单元:
当前遍历状态确定单元,用于确定所述预设模式字符串所包含的字符在索引树中当前遍历的树节点,并获取所述当前遍历的树节点的状态;
字符遍历单元,用于在所述当前遍历的树节点的状态存在符合预设模式字符串中的字符串时,将与所述当前遍历的树节点的状态相匹配的字符串添加到预先建立的候选待匹配字符串匹配进度的映射中,并同步更新相应的待匹配字符串索引集合。
在本申请的一种实施例中,待匹配字符串筛选子模块可以包括如下单元:
待匹配字符串过滤单元,用于在所述多个候选待匹配字符串中,筛选出存在待匹配字符串索引集合的长度等于候选待匹配字符串的定长子串的总数的目标候选待匹配字符串为过滤成功的待匹配字符串;
待匹配字符串验证单元,用于在采用预设子串函数对所述过滤成功的待匹配字符串验证成功的情况下,确定所述过滤成功的待匹配字符串为匹配成功的字符串。
对于装置实施例而言,由于其与方法实施例基本相似,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
本申请实施例还提供了一种电子设备,包括:
包括处理器、存储器及存储在所述存储器上并能够在所述处理器上运行的计算机程序,该计算机程序被处理器执行时实现上述字符串匹配方法实施例的各个过程,且能达到相同的技术效果,为避免重复,这里不再赘述。
本申请实施例还提供了一种计算机可读存储介质,计算机可读存储介质上存储计算机程序,计算机程序被处理器执行时实现上述字符串匹配方法实施例的各个过程,且能达到相同的技术效果,为避免重复,这里不再赘述。
本说明书中的各个实施例均采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似的部分互相参见即可。
本领域内的技术人员应明白,本申请实施例的实施例可提供为方法、装置、或计算机程序产品。因此,本申请实施例可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本申请实施例可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本申请实施例是参照根据本申请实施例的方法、终端设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理终端设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理终端设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理终端设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理终端设备上,使得在计算机或其他可编程终端设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程终端设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
尽管已描述了本申请实施例的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例做出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本申请实施例范围的所有变更和修改。
最后,还需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者终端设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者终端设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者终端设备中还存在另外的相同要素。
以上对本申请所提供的一种字符串匹配方法、字符串匹配装置、设备和可读存储介质,进行了详细介绍,本文中应用了具体个例对本申请的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本申请的方法及其核心思想;同时,对于本领域的一般技术人员,依据本申请的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本申请的限制。
Claims (10)
1.一种字符串匹配方法,应用于字符串匹配模块,所述方法包括:
获取原始待匹配字符串集合,将所述原始待匹配字符串集合抽取为定长子串集合;
根据所述定长子串集合构建索引树,所述索引树为基于所述定长子串集合中各个定长子串的定长长度以及所包含字符构建的;
根据所述索引树遍历预设模式字符串,得到所述预设模式字符串在所述索引树中存在的字符串。
2.根据权利要求1所述的方法,所述将所述原始待匹配字符串集合抽取为定长子串集合,包括:
基于预先设定的定长长度以及索引串数量,将所述原始待匹配字符串集合划分为多个定长子串;
将所述多个定长子串进行组合得到定长子串集合。
3.根据权利要求1所述的方法,所述根据所述定长子串集合构建索引树,包括:
获取所述定长子串集合中各个定长子串所包含的字符,分别将所述各个定长子串所包含的字符转换为树节点间的跳转边;
按照所述各个定长子串所包含字符的先后顺序,分别采用与所包含字符相应的跳转边依次构建索引树。
4.根据权利要求1或3所述的方法,所述根据所述定长子串集合构建索引树,包括:
采用状态机的形式,基于所述定长子串集合构建针对各个定长子串所包含的各个字符的正确跳转路径和/或失败跳转路径;
还包括:
在构建索引树的过程中,根据所述正确跳转路径和/或失败跳转路径同步记录所述索引树的树节点在原始待匹配字符串集合中的索引。
5.根据权利要求1所述的方法,所述根据所述索引树遍历预设模式字符串,得到所述预设模式字符串在所述索引树中存在的字符串,包括:
获取所述预设模式字符串所包含的字符,采用所述索引树逐个遍历所述预设模式字符串所包含的字符,得到候选待匹配字符串以及相应的待匹配字符串索引集合;
基于所述待匹配字符串索引集合从多个候选待匹配字符串中筛选得到匹配成功的字符串。
6.根据权利要求5所述的方法,所述采用所述索引树逐个遍历所述预设模式字符串所包含的字符,得到候选待匹配字符串以及相应的待匹配字符串索引集合,包括:
确定所述预设模式字符串所包含的字符在索引树中当前遍历的树节点,并获取所述当前遍历的树节点的状态;
若所述当前遍历的树节点的状态存在符合预设模式字符串中的字符串,则将与所述当前遍历的树节点的状态相匹配的字符串添加到预先建立的候选待匹配字符串匹配进度的映射中,并同步更新相应的待匹配字符串索引集合。
7.根据权利要求5或6所述的方法,所述基于所述待匹配字符串索引集合从多个候选待匹配字符串中筛选得到匹配成功的字符串,包括:
在所述多个候选待匹配字符串中,筛选出存在待匹配字符串索引集合的长度等于候选待匹配字符串的定长子串的总数的目标候选待匹配字符串为过滤成功的待匹配字符串;
若采用预设子串函数对所述过滤成功的待匹配字符串验证成功,则确定所述过滤成功的待匹配字符串为匹配成功的待字符串。
8.一种字符串匹配装置,所述装置包括:
定长子串集合抽取模块,用于获取原始待匹配字符串集合,将所述原始待匹配字符串集合抽取为定长子串集合;
索引树构建模块,用于根据所述定长子串集合构建索引树,所述索引树为基于所述定长子串集合中各个定长子串的定长长度以及所包含字符构建的;
字符串匹配模块,用于根据所述索引树遍历预设模式字符串,得到所述预设模式字符串在所述索引树中存在的字符串。
9.一种电子设备,包括:处理器、存储器及存储在所述存储器上并能够在所述处理器上运行的计算机程序,所述计算机程序被所述处理器执行时实现如权利要求1-7中任一项所述字符串匹配方法的步骤。
10.一种计算机可读存储介质,所述计算机可读存储介质上存储计算机程序,所述计算机程序被处理器执行时实现如权利要求1至7中任一项所述字符串匹配方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111463948.7A CN114238709A (zh) | 2021-12-02 | 2021-12-02 | 字符串匹配方法、装置、设备和可读存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111463948.7A CN114238709A (zh) | 2021-12-02 | 2021-12-02 | 字符串匹配方法、装置、设备和可读存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN114238709A true CN114238709A (zh) | 2022-03-25 |
Family
ID=80752968
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202111463948.7A Pending CN114238709A (zh) | 2021-12-02 | 2021-12-02 | 字符串匹配方法、装置、设备和可读存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN114238709A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114756591A (zh) * | 2022-04-15 | 2022-07-15 | 成都卓讯智安科技有限公司 | 一种基于双向链表的数据筛选方法和系统 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7010522B1 (en) * | 2002-06-17 | 2006-03-07 | At&T Corp. | Method of performing approximate substring indexing |
US20130066898A1 (en) * | 2011-09-09 | 2013-03-14 | Microsoft Corporation | Matching target strings to known strings |
CN110222143A (zh) * | 2019-05-31 | 2019-09-10 | 北京小米移动软件有限公司 | 字符串匹配方法,装置,存储介质及电子设备 |
CN111177491A (zh) * | 2019-12-31 | 2020-05-19 | 奇安信科技集团股份有限公司 | 正则表达式的匹配方法、装置、电子设备及存储介质 |
CN111382323A (zh) * | 2018-12-29 | 2020-07-07 | 贵州白山云科技股份有限公司 | 一种数据检索优化方法、装置和计算机设备 |
-
2021
- 2021-12-02 CN CN202111463948.7A patent/CN114238709A/zh active Pending
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7010522B1 (en) * | 2002-06-17 | 2006-03-07 | At&T Corp. | Method of performing approximate substring indexing |
US20130066898A1 (en) * | 2011-09-09 | 2013-03-14 | Microsoft Corporation | Matching target strings to known strings |
CN111382323A (zh) * | 2018-12-29 | 2020-07-07 | 贵州白山云科技股份有限公司 | 一种数据检索优化方法、装置和计算机设备 |
CN110222143A (zh) * | 2019-05-31 | 2019-09-10 | 北京小米移动软件有限公司 | 字符串匹配方法,装置,存储介质及电子设备 |
US20200380046A1 (en) * | 2019-05-31 | 2020-12-03 | Beijing Xiaomi Mobile Software Co., Ltd. | String matching method, string matching apparatus, storage medium, and electronic device |
CN111177491A (zh) * | 2019-12-31 | 2020-05-19 | 奇安信科技集团股份有限公司 | 正则表达式的匹配方法、装置、电子设备及存储介质 |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114756591A (zh) * | 2022-04-15 | 2022-07-15 | 成都卓讯智安科技有限公司 | 一种基于双向链表的数据筛选方法和系统 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US8510322B2 (en) | Enriched search features based in part on discovering people-centric search intent | |
US8532988B2 (en) | Searching for symbol string | |
EP3179383A1 (en) | Device and method for error correction in data search | |
CN111177491A (zh) | 正则表达式的匹配方法、装置、电子设备及存储介质 | |
CN111581092B (zh) | 仿真测试数据的生成方法、计算机设备及存储介质 | |
CN110275940B (zh) | 一种中文地址识别方法及设备 | |
CN110362824A (zh) | 一种自动纠错的方法、装置、终端设备及存储介质 | |
CN113239365B (zh) | 一种基于知识图谱的漏洞修复方法 | |
CN110263104A (zh) | Json字符串处理方法及装置 | |
CN114238709A (zh) | 字符串匹配方法、装置、设备和可读存储介质 | |
CN112149386A (zh) | 一种事件抽取方法、存储介质及服务器 | |
CN111008625B (zh) | 一种地址校正方法、装置、设备及存储介质 | |
US8688688B1 (en) | Automatic derivation of synonym entity names | |
WO2016206389A1 (zh) | Url匹配方法及装置 | |
CN111950267B (zh) | 文本三元组的抽取方法及装置、电子设备及存储介质 | |
CN111159362B (zh) | 文本匹配处理方法及装置 | |
CN113065419B (zh) | 一种基于流量高频内容的模式匹配算法及系统 | |
CN107688624B (zh) | 一种日志索引构建方法及装置 | |
WO2013097065A1 (zh) | 一种索引数据处理方法及设备 | |
JP2021039488A (ja) | 辞書作成装置及び辞書作成方法 | |
JP2002259186A (ja) | Tree構造型インデクスの整合性チェック処理方法およびプログラムおよび装置 | |
CN107463676B (zh) | 文本数据存储方法及装置 | |
CN109947429B (zh) | 数据处理方法及装置 | |
CN111814009B (zh) | 一种基于搜索引擎检索信息的模式匹配方法 | |
CN114997146A (zh) | 一种参数校验方法、装置、设备及存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |