CN110245330B - 字符序列匹配方法、实现匹配的预处理方法和装置 - Google Patents
字符序列匹配方法、实现匹配的预处理方法和装置 Download PDFInfo
- Publication number
- CN110245330B CN110245330B CN201810193518.XA CN201810193518A CN110245330B CN 110245330 B CN110245330 B CN 110245330B CN 201810193518 A CN201810193518 A CN 201810193518A CN 110245330 B CN110245330 B CN 110245330B
- Authority
- CN
- China
- Prior art keywords
- character
- sample
- subsequence
- sequence
- dictionary 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.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F40/00—Handling natural language data
- G06F40/10—Text processing
- G06F40/12—Use of codes for handling textual entities
- G06F40/126—Character encoding
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F40/00—Handling natural language data
- G06F40/10—Text processing
- G06F40/12—Use of codes for handling textual entities
- G06F40/14—Tree-structured documents
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Health & Medical Sciences (AREA)
- Artificial Intelligence (AREA)
- Audiology, Speech & Language Pathology (AREA)
- Computational Linguistics (AREA)
- General Health & Medical Sciences (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Machine Translation (AREA)
- Character Discrimination (AREA)
Abstract
本发明揭示了一种字符序列匹配方法、实现字符序列匹配的预处理方法和装置、机器设备。所述方法包括:从字符序列获得对应于各字符位置的子序列;在字典树根据子序列所包含字符以及所对应字符位置,查找子序列,以判定字典树中存在字符序列匹配的样本字符序列。由于通过字典树进行存储,能够减少空间,所实现且用于进行字符序列中子序列查找的字典树,是实现字符序列中子序列的查找的,因此,对于字典树而言,是利用同一字符位置所存在的相同字符来进行的字典树中的存储,直接且有效的减少了所需要耗费的空间,在所执行的字符序列匹配中,字典树由于已经获得了存储所需要占用空间的减少,因此能够快速一次性加载至内存中,将极大提升匹配速度。
Description
技术领域
本发明涉及计算机应用技术领域,特别涉及一种字符序列匹配方法、实现字符序列匹配的预处理方法和装置、机器设备。
背景技术
随着计算机应用技术的发展,越来越多的进行着字符序列的提取,并随之进行着此字符序列的匹配,以此来获得一定的字符序列匹配结果。字符序列通过所包含的字符携带着特定内容,以此来进行特定内容所对应落地场景的识别,故字符序列的存在是与落地场景强相关的。
但无论何种落地场景的存在,都需要进行若干字符所形成字符序列的匹配。例如,一特征识别中,此字符序列即为特征的存在形式,由此,所进行的特征识别便是字符序列的匹配实现。
进一步举例说明的,在通过病毒库对可疑文件进行病毒的识别中,对于病毒库,是通过从样本,即病毒文件中提取特征进行存储而实现的。然而,在存储过程中会造成病毒库过大,从而在可疑文件的病毒识别中无法一次性加载进入内存。例如,常见的特征,一种特征需要32个字节进行存储,如果需要存储1亿条,则大约需要2.98GB的空间存储,此存储在硬盘上易于实现,但是在识别匹配的实现中,存在着难以将2.98GB的病毒库加载进入内存的困难,进而随之导致匹配速度低下。
由此可知,在实际所进行字符序列匹配的各种应用中,存在着由于样本,即样本字符序列的存储耗费巨大空间,难以将所有样本字符序列载入内存,进而匹配速度低下的局限性。
发明内容
为了解决相关技术中存在的样本字符序列的存在需耗费巨大空间,难以将所有样本字符序列载入内存,进而匹配速度低下的技术问题,本发明提供了一种字符序列匹配方法、实现字符序列匹配的预处理方法和装置、机器设备。
一种字符序列匹配方法,所述方法包括:
获取给定的字符序列;
以所述字符序列中的每一字符位置为起始提取所述字符位置对应的子序列;
在字典树根据所述子序列所包含字符以及所对应字符位置,查找各字符位置所对应子序列,所述字典树通过样本字符序列中样本子序列以及所对应样本字符位置构建;
如果所有字符位置所对应子序列都能够在所述字典树通过所包含字符和所对应字符位置匹配查找得到,则判定所述字典树中存在所述字符序列匹配的样本字符序列。
一种实现字符序列匹配的预处理方法,所述方法包括:
批量获取样本字符序列;
进行所述样本字符序列中的字符提取,在所述样本字符序列中拆分获得样本子序列以及所述样本子序列对应的样本字符位置;
将所述样本子序列中的字符按照所对应样本字符位置,在一节点路径上载入字典树中深度对应于所述样本字符位置的分支节点;
按照所述样本子序列对应的样本字符位置更新所述节点路径上的叶子节点。
一种字符序列匹配装置,所述装置包括:
字符序列获取模块,用于获取给定的字符序列;
子序列获取模块,用于以所述字符序列中的每一字符位置为起始提取所述字符位置对应的子序列;
查找模块,用于在字典树根据所述子序列所包含字符以及所对应字符位置,查找各字符位置所对应子序列,所述字典树通过样本字符序列中样本子序列以及所对应样本字符位置构建;
匹配判定模块,用于如果所有字符位置所对应子序列都能够在所述字典树通过所包含字符和所对应字符位置匹配查找得到,则判定所述字典树中存在所述字符序列匹配的样本字符序列。
在一示例性实施例中,所述子序列获取模块进一步用于在所述字符序列中逐字符进行指定长度的子序列提取,获得相应字符位置的子序列,所述字符位置为所述字符在所述字符序列中的位置。
在一示例性实施例中,所述查找模块包括:
字符匹配单元,用于针对于所述子序列中的字符,在所述字典树中以根节点为起始匹配查找每一字符,判断所述字符形成的子序列是否存在于所述字典树中;
位置匹配单元,用于如果所述字符形成的子序列存在于所述字典树中,进一步判断所述子序列在所述字典树查找匹配的节点路径是否与所述子序列对应于相同字符位置;
结果输出单元,用于如果所述子序列在所述字典树查找匹配的节点路径与所述子序列对应于相同字符位置,则判定所述字符位置对应的子序列能够在所述字典树通过所包含字符和所对应字符位置匹配查找得到。
在一示例性实施例中,所述位置匹配单元包括:
标示位获取子单元,用于从所述子序列在所述字典树所查找匹配节点路径的叶子节点中获得指示的标志位;
位置值判断子单元,用于判断所述标志位与所述子序列所对应字符位置对应于相同位置值,如果为是,则判定所述子序列在所述字典树查找匹配的节点路径与所述子序列对应于相同字符位置。
在一示例性实施例中,所述装置还包括:
匹配目标获取模块,用于获取各字符位置对应子序列的字典树查找中匹配的目标子序列以及所对应字符位置,所述目标子序列为样本字符序列中的样本子序列;
拼接模块,用于按照所对应样本字符位置进行所述目标子序列的拼接,获得所述字典树中所述字符序列匹配的样本字符序列。
在一示例性实施例中,所述装置还包括:
存储模块,用于根据所进行的子序列获取以及样本字符序列构建所述字典树,获得包含样本字符序列中样本子序列以及所对应样本字符位置的字典树。
在一示例性实施例中,所述存储模块包括:
提取拆分单元,用于进行所述样本字符序列中的字符提取,以在所述样本字符序列中拆分获得样本子序列以及所述样本子序列对应的样本字符位置;
字符载入单元,用于将所述样本子序列中的字符按照所在位置,在一节点路径上载入字典树中深度对应于所述字符所在位置的分支节点;
标志位载入单元,用于按照所述样本子序列对应的样本字符位置更新所述节点路径上的叶子节点。
在一示例性实施例中,所述存储模块还包括:
节点初始化单元,用于根据所进行的子序列获取进行字典树的初始化,初始化所获得字典树中分支节点的分布适应于获取所述子序列而对应的指定长度;
位数组初始化单元,用于在所述分支节点连接的叶子节点中进行位数组的初始化,所述位数组用于在所述样本子序列被载入时更新所对应的样本字符位置。
在一示例性实施例中,所述装置包括:
批量样本获取模块,用于批量获取样本字符序列;
样本提取拆分模块,用于进行所述样本字符序列中的字符提取,在所述样本字符序列中拆分获得样本子序列以及所述样本子序列对应的样本字符位置;
样本加载模块,用于将所述样本子序列中的字符按照所对应样本字符位置,在一节点路径上载入字典树中深度对应于所述样本字符位置的分支节点;
位置更新模块,用于按照所述样本子序列对应的样本字符位置更新所述节点路径上的叶子节点。
一种机器设备,包括:
处理器;以及
存储器,所述存储器上存储有计算机可读指令,所述计算机可读指令被所述处理器执行时实现如前所述的方法。
本发明的实施例提供的技术方案可以包括以下有益效果:
获取给定的字符序列,对于给定字符序列,首先以字符序列中的每一字符位置为起始提取字符位置对应的子序列,然后在字典树根据子序列所包含字符以及所对应字符位置,查找各字符位置所对应子序列,字典树通过样本字符串序列中样本子序列以及所对应样本字符位置构建得到,如果所有字符位置所对应子序列都能够在字典树通过所包含字符和所对应字符位置匹配查找得到,则能够判定字典树中存在字符序列匹配的样本字符序列,由于样本字符序列是通过字典树进行存储,能够减少所需要耗费的空间。
除此之外,所实现且用于进行字符序列中子序列查找的字典树,是实现字符序列中子序列的查找的,因此,对于字典树而言,是利用样本子序列相互之间在同一字符位置所存在的相同字符,例如,首位字符相同,以此来进行的字典树中的存储,直接且有效的减少了所需要耗费的空间,在所执行的字符序列匹配中,字典树由于已经获得了存储所需要占用空间的减少,因此能够快速一次性加载至内存中,将极大提升匹配速度。
应当理解的是,以上的一般描述和后文的细节描述仅是示例性的,并不能限制本发明。
附图说明
此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本发明的实施例,并于说明书一起用于解释本发明的原理。
图1是根据本发明所涉及的实施环境的示意图;
图2是根据一示例性实施例示出的一种装置的框图;
图3是根据一示例性实施例示出的一种字符序列匹配方法的流程图;
图4是根据图3对应实施例示出的对步骤330的细节进行描述的流程图;
图5是根据图4对应实施例示出的对步骤333的细节进行描述的流程图;
图6是根据另一示例性实施例示出的一种字符序列匹配方法的流程图;
图7是根据一示例性实施例示出的对根据所进行的子序列获取以及样本字符序列构建字典树,获得包含样本字符序列中样本子序列以及所对应样本字符位置的字典树步骤的细节进行描述的流程图;
图8是根据图7对应实施例示出的对根据所进行的子序列获取以及样本字符序列构建字典树,获得包含样本字符序列中样本子序列以及所对应样本字符位置的字典树步骤在另一示例性实施例进行细节描述的流程图;
图9是根据一示例性实施例示出的一种实现字符序列匹配的预处理方法的流程图;
图10是根据一示例性实施例示出的病毒识别场景下查找匹配以及存储优化的应用示意图;
图11是根据一示例性实施例示出的一种字符序列匹配装置的框图;
图12是根据图11对应实施例示出的对查找模块的细节进行描述的流程图;
图13是根据图12对应实施例示出的对位置匹配单元的细节进行描述的框图;
图14是根据另一示例性实施例示出的一种字符序列匹配装置的框图;
图15是根据一示例性实施例示出的对存储模块的细节进行描述的框图;
图16是根据另一示例性实施例示出的对存储模块的细节进行描述的框图;
图17是根据一示例性实施例示出的一种实现字符序列匹配的预处理装置的框图。
具体实施方式
这里将详细地对示例性实施例执行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本发明相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本发明的一些方面相一致的装置和方法的例子。
图1是根据本发明所涉及的实施环境的示意图。在一个示例性实施例中,如图1所示的,该实施环境包括:机器设备110以及服务器130。
所指的机器设备110,可以是终端设备,例如,便携移动终端设备,个人电脑等,也可以是区别于服务器130中的其它服务器,任一需要进行字符序列匹配的机器,都是图1所示的机器设备110。
服务器130与机器设备110相配合,用于为机器设备更新样本字符序列。
具体的,机器设备110运行着需要进行字符序列匹配的应用111,而用于匹配字符序列的样本字符序列,则存储于机器设备110所内置的样本字符序列库113中。
在样本字符序列库113的配合下,本发明所实现的应用111对自身所获得的字符序列进行样本字符序列库中的匹配。
对于样本字符序列库113所进行的批量样本字符序列存储,还将通过网络不断进行着样本字符序列的更新。
当然,应当说明的是,本发明所涉及的实施环境并不限于此,根据应用实现的需要,也可仅限于应用所在的机器设备110本身,也可辅之以其它设备,在此不进行限定。
图2是根据一示例性实施例示出的一种装置的框图。例如,装置200可以是图1所示实施环境中的机器设备110。例如,机器设备110可以是智能手机、平板电脑等便携移动终端。
参照图2,装置200可以包括以下一个或多个组件:处理组件202,存储器204,电源组件206,多媒体组件208,音频组件210,传感器组件214以及通信组件216。
处理组件202通常控制装置200的整体操作,诸如与显示,电话呼叫,数据通信,相机操作以及记录操作相关联的操作等。处理组件202可以包括一个或多个处理器218来执行指令,以完成下述的方法的全部或部分步骤。此外,处理组件202可以包括一个或多个模块,便于处理组件202和其他组件之间的交互。例如,处理组件202可以包括多媒体模块,以方便多媒体组件208和处理组件202之间的交互。
存储器204被配置为存储各种类型的数据以支持在装置200的操作。这些数据的示例包括用于在装置200上操作的任何应用程序或方法的指令。存储器204可以由任何类型的易失性或非易失性存储设备或者它们的组合实现,如静态随机存取存储器(Static RandomAccess Memory,简称SRAM),电可擦除可编程只读存储器(Electrically ErasableProgrammable Read-Only Memory,简称EEPROM),可擦除可编程只读存储器(ErasableProgrammable Read Only Memory,简称EPROM),可编程只读存储器(Programmable Red-Only Memory,简称PROM),只读存储器(Read-Only Memory,简称ROM),磁存储器,快闪存储器,磁盘或光盘。存储器204中还存储有一个或多个模块,该一个或多个模块被配置成由该一个或多个处理器218执行,以完成下述图3、图4和图5任一所示方法中的全部或者部分步骤。
电源组件206为装置200的各种组件提供电力。电源组件206可以包括电源管理系统,一个或多个电源,及其他与为装置200生成、管理和分配电力相关联的组件。
多媒体组件208包括在所述装置200和用户之间的提供一个输出接口的屏幕。在一些实施例中,屏幕可以包括液晶显示器(Liquid Crystal Display,简称LCD)和触摸面板。如果屏幕包括触摸面板,屏幕可以被实现为触摸屏,以接收来自用户的输入信号。触摸面板包括一个或多个触摸传感器以感测触摸、滑动和触摸面板上的手势。所述触摸传感器可以不仅感测触摸或滑动动作的边界,而且还检测与所述触摸或滑动操作相关的持续时间和压力。屏幕还可以包括有机电致发光显示器(Organic Light Emitting Display,简称OLED)。
音频组件210被配置为输出和/或输入音频信号。例如,音频组件210包括一个麦克风(Microphone,简称MIC),当装置200处于操作模式,如呼叫模式、记录模式和语音识别模式时,麦克风被配置为接收外部音频信号。所接收的音频信号可以被进一步存储在存储器204或经由通信组件216发送。在一些实施例中,音频组件210还包括一个扬声器,用于输出音频信号。
传感器组件214包括一个或多个传感器,用于为装置200提供各个方面的状态评估。例如,传感器组件214可以检测到装置200的打开/关闭状态,组件的相对定位,传感器组件214还可以检测装置200或装置200一个组件的位置改变以及装置200的温度变化。在一些实施例中,该传感器组件214还可以包括磁传感器,压力传感器或温度传感器。
通信组件216被配置为便于装置200和其他设备之间有线或无线方式的通信。装置200可以接入基于通信标准的无线网络,如WiFi(WIreless-Fidelity,无线保真)。在一个示例性实施例中,通信组件216经由广播信道接收来自外部广播管理系统的广播信号或广播相关信息。在一个示例性实施例中,所述通信组件216还包括近场通信(Near FieldCommunication,简称NFC)模块,以促进短程通信。例如,在NFC模块可基于射频识别(RadioFrequency Identification,简称RFID)技术,红外数据协会(Infrared DataAssociation,简称IrDA)技术,超宽带(Ultra Wideband,简称UWB)技术,蓝牙技术和其他技术来实现。
在示例性实施例中,装置200可以被一个或多个应用专用集成电路(ApplicationSpecific Integrated Circuit,简称ASIC)、数字信号处理器、数字信号处理设备、可编程逻辑器件、现场可编程门阵列、控制器、微控制器、微处理器或其他电子元件实现,用于执行下述方法。
图3是根据一示例性实施例示出的一种字符序列匹配方法的流程图。该字符序列匹配方法,在一个示例性实施例中,如图3所示,至少包括以下步骤。
在步骤310中,获取给定的字符序列。
其中,所指的给定字符序列,需要进行自身与所存储样本字符序列匹配的字符序列。根据所实现落地场景的不同,给定字符序列的来源以及所对应的内容各不相同。
例如,给定的字符序列,是以字符串形式存在的可疑文件特征。在所进行的文件扫描中,获得对应于一可疑文件的字符序列,这一字符序列即为给定的字符序列,并且通过后续所进行的字符序列匹配而确认这一可疑文件是否就是病毒文件。
在步骤320中,以字符序列中的每一字符位置为起始提取字符位置对应的子序列。
其中,字符序列是由若干字符所形成的序列。用于形成序列的字符,所对应的字符范围可以是字母a至字母z,以及数字0至数字9的范围,共36种字符。字符序列是对应于特定内容的。例如,所指的特定内容可以是某一文件所具备的特征。因此,应当理解,字符序列将是所对应特定内容的数值化信息。
字符序列由若干字符顺序形成,每一字符都有对应的字符位置。字符位置指示了所对应字符是字符序列中的第几个字符。
对应于字符位置的子序列,是为此字符位置上的字符按照指定长度而在字符序列中获得的子序列。针对于字符序列中顺序存在的若干字符,为每一字符获得对应于各字符位置的子序列。
以此类推,从字符序列获得分别对应于所有字符位置的子序列。对于需进行查找匹配的字符序列而言,将使用所有字符位置所对应的子序列进行着
在一个示例性实施例的具体实现中,字符序列是对应于可疑文件的,字符序列是可疑文件的特征,例如,此特征可以是可疑文件的信息摘要特征,即对可疑文件进行信息摘要运算而获得的特征串,亦为字符串。所进行的信息摘要运算可以是MD5(Message DigestAlgorithm 5,消息摘要算法第五版)运算,与之相对应的,字符序列即为MD5字符串。
此时,针以MD5字符串进行后续的匹配,以最终确认可疑文件是否为病毒文件。
在一个示例性实施例中,步骤310包括:在字符序列中逐字符进行指定长度的子序列提取,获得相应字符位置的子序列,字符位置为当前字符在字符序列中的位置。
其中,对于字符序列中顺序存在的字符,针对于每一字符进行着子序列的提取,所提取的子序列之间相互重叠,且具备相同的长度。字符位置是以数值的方式记录着字符在字符序列中的位置。例如,字符位置可以是位置1、位置2、……、位置n的形式。
在步骤330中,在字典树根据子序列所包含字符以及所对应字符位置,查找各字符位置所对应子序列,字典树通过样本字符序列中样子子序列以及所对应样本字符位置构建。
其中,在通过前述步骤完成了字符序列中各字符位置的子序列获得之后,便通过所有字符位置上的子序列为字符序列实现匹配,在所有字符位置上的子序列都能够在字典树查找到所对应字符位置以及所包含字符均一致的样本子序列。
样本字符序列是相对于所需要进行匹配的字符序列而言的,因此,样本字符序列的形式以及长度等,都与字符序列相匹配,并且样本字符序列是对应于特定的类型的。由此方能够通过获得与字符序列匹配的样本字符序列,获得字符序列所对应的类型,达成字符序列所相关的查找匹配进而识别的过程。
样本字符序列加载于字典树中,以此来实现批量样本字符序列的存储。
以前述所指的病毒文件识别为例,样本字符序列即为病毒文件的特征存在形式,由于存在着众多病毒文件,故相应存在着众多样本字符序列,并加载至字典树中存储。
与字符序列相对应的,所存在的样本字符序列中每一字符都有着其字符位置对应的子序列。将每一子序列都加载至字典树中,并标示其所对应字符位置,至此,便可通过字符序列中对应于各字符位置的子序列进行匹配。
通过子序列在字典树中的逐一加载,在字典树的作用下,每一子序列中字符是依赖于前一字符而载入至下一分支节点,具有相同前缀的子序列,共享相同前缀,即相同前缀所对应的字符是分布于相同分支节点上的,在此机制下,由于不需要分别存储于不同分支节点上,得以节省了存储所需要耗费的空间,且加快查找速度。
在字典树的作用下,得以实现字符序列中子序列向字典树中子序列的快速查找匹配,进而确认字符序列中每一字符位置所对应子序列是否均能够在字典树中查找得到。
字符序列中,一字符位置所对应子序列如果在字典树中查找得到与之相一致的样本子序列,并且此样本子序列被标示的样本字符位置与字符位置一致,此时,即可确认在字典树中存在着与子序列相一致的样本子序列。
以此类推,在字典树中完成每一字符位置上子序列的查找,以通过所有字符位置上子序列的查找结果判定字典树中字符序列的存在。
任意子序列在字典树中的查找失败,都说明字典树中不存在此字符序列,无法在字典树中成功进行字符序列的匹配,即不存在与字符序列匹配的样本字符序列。
在步骤350中,如果所有字符位置所对应子序列都能够在字典树通过所包含字符和所对应字符位置匹配查找得到,则判定字典树中存在字符序列匹配的样本字符序列。
其中,字符序列中,所有字符位置上的子序列,如果都能够在字典树中查找得到分支节点上分布着相同字符的节点路径,节点路径所分布分支节点携带的字符便沿着节点路径形成样本子序列。
所查找得到节点路径上标示的样本字符位置与所查找子序列对应的字符位置一致,则说明此字符位置上的子序列能够在字典树中匹配查找得到。
以此类推,在所有字符位置所对应子序列都匹配查找得到时,确认字典树中存在着字符序列所匹配的样本字符序列。
通过此示例性的实现,使得以字符序列,即字符串形式存在的数据所需要进行的匹配易于实现,且具备非常高的匹配效率,由此,使得以字符序列形式存在的特征等的匹配更为简易,且由于样本库,即字典树中样本字符序列的存在仅占据较小空间,因此,不仅内存较大的机器设备能够加载,一些低配的机器设备也能够一次性加载至内存中,具备非常高的通用性,不再受限于硬件配置。
此示例性实施例,可应用于以字符序列形式执行匹配的任意场景,包括特征识别场景、病毒识别场景等,在此不一一进行列举。
图4是根据图3对应实施例示出的对步骤330的细节进行描述的流程图。该步骤330,如图4所示,至少包括以下步骤。
在步骤331中,针对于子序列中的字符,在字典树中以根节点为起始匹配查找每一字符,判断此字符形成的子序列是否存在于字典树中。
在步骤333中,如果此字符形成的子序列存在于字典树中,进一步判断子序列在字典树查找匹配的节点路径是否与子序列对应于相同字符位置。
在步骤335中,如果子序列在字典树查找匹配的节点路径与子序列对应于相同字符位置,则判定字符位置对应的子序列能够在字典树通过所包含字符和所对应字符位置匹配查找得到。
其中,首先应当说明的是,字典树是通过节点的分布以及节点之间的相互关联形成的,字典树中的节点,包括根节点、分支节点以及叶子节点三大类。
根节点是唯一存在的,用于指示字典树中查找的起始。分支节点用来携带样本子序列中的字符,并且各分支节点都有着唯一对应的层级,所有层级便构成了字典树中的深度。
随着层级的不断深入,对于分支节点所存在的下一分支节点,将用于存储当前分支节点所携带字符在样本子序列中的下一字符,以此类推来完成整个样本子序列中字符的顺序存储。
叶子节点则用于进行标志位的记录,通过标志位的记录来标示样本子序列在样本字符序列对应的样本字符位置。
至此,通过字典树中分支节点以及叶子节点中实现的存储,使得所构建的字典树不会随着样本字符序列的长度而对应于过大的深度,并且也保证了字符存储以及位置标示的准确性。
对于字符序列中的每一子序列,其包含着若干几个字符,并且有着字符序列中对应的字符位置,应当理解,字符位置的大小,便决定着这一子序列所对应字符在字符序列中的前后顺序。
而子序列中的若干几个字符,也是顺序存在的。故需以字典树中的根节点为起始,进行着子序列中每一字符在分支节点上查找。子序列中字符存在的前后顺序,便决定了此字符在字典树中进行查找的层级。
例如,对于子序列中的首字符,则会在字典树中的第一层进行分支节点所存储字符的查找,与根节点连接的分支节点便形成了字典树中的第一层。
又例如,对于子序列中位置n上的字符,则在字符中第n层进行分支节点所存储字符的查找,以根节点为起始,所在每一条节点路径上连接的第n个分支节点便形成字典树中的第n层。
因此,针对于子序列中的字符,在字典树逐层进行所对应字符的查找,进而最终确认这一子序列是否存在于字典树中。
存在于字典树中的子序列,其字符是顺次存在于一节点路径上的分支节点中,因此,随着子序列中字符匹配查找的进行,便获得相应节点路径,以在此情况下确认得到子序列在字典树中的存在。
在确认子序列在字典树的存在之后,由查找匹配所获得的节点路径得到相应记录的标示位,进而根据此标示位以及子序列所对应的字符位置,判断节点路径上存储的样本子序列与子序列是否对应于相同的字符位置。
如果子序列在字典树查找匹配的节点路径与子序列对应于相同字符位置,即可最终判定字符位置对应的子序列能够在字典树通过所包含字符和所对应字符位置匹配查找得到。
综上所述的,字符序列中子序列在字典树中的查找得到,是在字符和所对应字符位置均一致时实现的,至此,保证了字符序列拆分而进行查找的准确性。
应当理解,通过字符序列拆分而进行的查找,一方面能够提高查找速度,另一方面也能够在提高查找速度的同时,提高查找的准确性。
图5是根据图4对应实施例示出的对步骤333的细节进行描述的流程图。在一个示例性实施例中,如图5所示,该步骤333,至少包括以下步骤。
在步骤401中,从子序列在字典树所查找匹配节点路径的叶子节点中获得指示的标志位。
其中,如前所述的,随着子序列在字典树中的查找匹配,获得对应的节点路径,此节点路径上顺次连接的分支节点进行着子序列所顺序存在字符的存储,亦为匹配于子序列的样本子序列存储。除此之外,此节点路径上的叶子节点也记录了样本子序列对应的样本字符位置,其以标志位的形式存在。
在步骤403中,判断标志位与子序列所对应字符位置对应于相同位置值,如果为是,则执行步骤405,如果为否,则子序列匹配失败。
其中,如前所述的,无论记录样本字符位置的标志位,还是子序列所对应字符位置,都是以位置值的形式,例如,位置1,进行着一定顺序方向的位置标示,因此,对于子序列中字符所查找匹配得到的节点路径而言,还需要判断此节点路径上指示的标志位是否与子序列对应着相同的位置值。
在步骤405中,判定子序列在字典树查找匹配的节点路径与子序列对应于相同字符位置。
其中,如果节点路径,即所对应的样本子序列,与子序列是对应于相同位置值,则可说明二者对应着相同字符位置,即样本子序列的样本字符位置与这一子序列在字符序列中的字符位置相同。
以通过此方式,来确定所查找匹配得到的样本子序列与当前所对应的子序列之间,不仅在字符分布上相一致,也在自身所在样本字符序列以及字符序列中的位置分布上是一致的。
图6是根据另一示例性实施例示出的一种字符序列匹配方法的流程图。在一个示例性实施例中,该字符序列匹配方法,如图6所示,至少包括以下步骤。
在步骤510中,获取各字符位置对应子序列的字典树查找中匹配的目标子序列以及所对应字符位置,此目标子序列为样本字符序列中的样本子序列。
在步骤530中,按照对应样本字符位置进行目标子序列的拼接,获得字典树中字符序列匹配的样本字符序列。
其中,应当理解,字典树所进行的各样本子序列存储,是用于实现样本字符序列的存储的。因此,对于字符序列的匹配而言,只需要获得每一子序列所匹配的目标子序列,即在字典树中通过所包含字符以及字符位置查找匹配得到的样本子序列,就可以通过样本子序列之间的拼接获得所匹配的样本字符序列。
所指的目标子序列,即为字典树中当前所查找子序列所匹配的样本子序列,是在子序列中顺序进行逐字符在相应层级上的查找匹配而获得的。
如前所述的,查找匹配所获得的样本子序列,即相对于子序列而言的目标子序列,都映射着对应的样本字符位置,因此,将根据所映射的样本字符位置而进行各目标子序列之间的拼接,以还原得到整个样本字符序列。
至此,即在子序列以及字典树的作用下,获得字符序列所匹配的样本字符序列,实现了字符序列的匹配,对于在应用中需要相应实现的功能而言,就可以根据字符序列所匹配的样本字符序列直接实现部署的功能,因此,简单易行,且具备非常高的通用性。
在前述示例性实施例中,应用子序列以及字典树实现了子序列所在字符序列的匹配,且由于字典树对样本字符序列存储的优化,而使得字符序列的匹配快速且不会受限于硬件设备的配置。
基于此,在该字符序列匹配中,有必要探讨字典树的构建,即提供通过字典树而进行样本字符序列存储优化的过程。
在另一个示例性实施例中,该字符序列匹配方法,还包括以下步骤:
根据所进行的子序列获取以及样本字符序列构建字典树,获得包含样本字符序列中样本子序列以及所对应样本字符位置的字典树。
其中,所进行的子序列获取,并不限于所需要匹配的字符序列中子序列的获取,还包括着处理批量样本字符序列而涉及的样本子序列获取,因此在此以所进行的子序列获取为字典树构建的依据,是指以子序列以及样本子序列的获取机制为依据。
以所进行的子序列获取为依据,进行着样本字符序列的处理以及字典树的初始化,在获得样本子序列之后就可以将样本子序列加载至字典树中,获得可实现字符序列匹配的字典树。
通过所进行的样本字符序列处理,以及所获得样本子序列在字典树中的存储,便实现了样本字符序列的优化存储。
图7是根据一示例性实施例示出的对根据所进行的子序列获取以及样本字符序列构建字典树,获得包含样本字符序列中样本子序列以及所对应样本字符位置的字典树步骤的细节进行描述的流程图。
在一个示例性实施例中,如图7所示,该根据所进行的子序列获取以及样本字符序列构建字典树,获得包含样本字符序列中样本子序列以及所对应样本字符位置的字典树步骤,包括:
在步骤610中,进行样本字符序列中的字符提取,在样本字符序列中拆分获得样本子序列以及样本子序列所对应的样本字符位置。
其中,对于所进行的字典树构建或者字典树中样本字符序列的更新,都将进行样本字符序列中的字符提取,以在样本字符序列中根据每一字符以及指定长度拆分获得样本子序列,此过程是与字符序列中子序列获得相类似的。
具体而言,无论是字符序列中子序列的获得,还是样本字符序列中样本子序列的获得,都是采用相同指定长度进行的。
对于字典树的构建而言,样本字符序列是大批量存在的,而对于向字典树进行的样本字符序列更新而言,样本字符序列是小批量或者单一存在的。
但无论是进行字典树的构建还是样本字符序列向字典树的更新,都将进行此样本字符序列中的字符提取,以此来获得拆分的样本子序列。
在步骤630中,将样本子序列中的字符按照所在位置,在一节点路径上载入字典树中深度对应于此字符所在位置的分支节点。
其中,字典树中,为适应于样本字符序列以及后续所进行的字符序列匹配,在叶子节点提供了样本字符位置的标示实现,而叶子节点和根节点之间构成的节点路径,则分布着顺次连接的分支节点,通过顺次连接的分支节点来实现着样本子序列中字符的顺序存储。
也就是说,样本子序列中字符在顺序连接的分支节点中的载入,是对应于字符在样本子序列中存在的前后顺序的。分支节点所在的深度与所载入字符在样本子序列中的前后顺序一致,并且此分支节点所在的节点路径上叶子节点指示的标志位所进行位置值指示是与样本字符位置相一致的。
在对分支节点所进行的字符载入中,所指的字符所在位置,用于标示此字符在样本子序列中的前后顺序。通过字符适应于自身所在样本子序列中的位置而进行节点路径上分支节点的字符载入,将保证了此节点路径上字符在分支节点的分布是与样本子序列中字符的顺序存在相一致,进而使得所载入字符的此条节点路径对应于字符所在的样本子序列。
在步骤650中,按照样本子序列对应的样本字符位置更新节点路径上的叶子节点。
其中,在完成节点路径中分支节点的字符载入之后,即可对此节点路径进行标志位的更新,以将初始化的标志位更新指示为所对应样本子序列的样本字符位置。
通过此示例性实施例,便可实现字典树的构建,以及所构建字典树中样本字符序列的更新存储,由此,对于所进行的字符序列匹配而言,将保证了存储的优化,并且也不会随着样本字符序列的不断更新而占用非常大的空间,避免了样本字符序列的存储而导致的字符序列匹配日趋困难。
图8是根据图7对应实施例示出的对根据所进行的子序列获取以及样本字符序列构建字典树,获得包含样本字符序列中样本子序列以及所对应样本字符位置的字典树步骤在另一示例性实施例进行细节描述的流程图。
在另一个示例性实施例中,如图8所示的,在执行步骤610之后,根据所进行的子序列获取以及样本字符序列构建字典树,获得包含样本字符序列中样本子序列以及所对应样本字符位置的字典树步骤,还包括以下步骤。
在步骤710中,根据所进行的子序列获取进行字典树的初始化,初始化所获得的字典树中分支节点的分布适应于获取子序列而对应的指定长度。
其中,为实现字典树的构建,在向字典树加载批量样本字符序列之前,需进行字典树的初始化。所指的字典树初始化,是构建根节点、分支节点以及叶子节点的拓扑分布,在所构建的拓扑分布中,根节点、分支节点以及叶子节点顺次连接以构成节点路径。所构成的节点路径中,根节点和叶子节点之间顺次连接着单一一个或者若干个分支节点。
由此可知,根节点和叶子节点之间分支节点所载入的字符,是对应于样本子序列,并有在后续的字符序列匹配中,也是对应于子序列的,因此,需根据子序列以及样本子序列获得而使用的指定长度进行根节点、叶子节点之间的分支节点部署,所部署的分支节点深度,即所形成的多层分支节点是与指定长度相符合的,进而获得适应于字符序列匹配的字典树。
在步骤730中,在分支节点连接的叶子节点中进行位数组的初始化,位数组用于在样本子序列被载入时更新所对应的样本字符位置。
其中,在通过前述步骤710的执行,进行了字典树所包含节点初始化之后,即可进行叶子节点中位数组的初始化,以便于在后续所进行的样本子序列加载中,通过叶子节点携带的位数组而构建与所载入样本子序列相适应的标志位,标示此样本子序列的位置值。
位数组通过二进制位来表示所样本字符位置,其内部为整数数组,整数的每一位都表示此位置顺序映射至样本字符序列时的样本字符位置,因此,通过对初始化的位数组进行某一位的数值变化即可标示所映射的样本字符位置。
在一个示例性实施例的具体实现中,步骤730包括:在与样本字符序列的序列长度匹配的位数组,初始化每一比特位置为0。
其中,如前所述的,位数组中某一位上的数值变化便指示了所在节点路径上存储样本子序列对应的位置值,即样本字符位置。而对于一样本字符序列而言,每一字符都有着对应的样本子序列。换而言之,样本字符序列中每一样本字符位置上都着对应的样本子序列,因此,样本字符位置的数量是与样本字符序列的序列长度相一致的。
对于标示样本字符位置的位数组而言,为实现整个字典树中基于位数组而进行的所有样本字符位置完整标示,位数组所包含的比特位置数量与样本字符序列的序列长度相匹配,以保证任意样本字符位置都能够通过位数组所包含的比特位置标示。
基于此,位数组中包含着对应于样本字符序列序列长度的比特位,并且在未标示所对应样本字符位置之前是置为0的。
与之相对应的,步骤650包括:按照样本子序列所对应样本字符位置,在节点路径上的叶子节点中,标示与样本字符位置指示了相同位置值的比特位为1,以将样本字符位置更新至叶子节点上。
其中,在载入样本子序列之后,便可在样本子序列所在的节点路径上,根据样本子序列对应的样本字符位置进行位数组中所映射比特位的数值变换,将此比特位上的数值由0变换为1。
此时,即可能位数组的实现来记录位置值,对于后续所进行的字符序列匹配而言,在查找匹配至叶子节点时已经完成了前几层分支节点中字符的遍历,此时,再读取叶子节点中记录的位置值就可以确认所存储的样本子序列是否即为所查找的子序列,对于所进行的字符序列匹配而言,简单易行,具备非常高的处理效率。
在前述示例性实施例中,实现了字符序列的匹配以及由字符序列而衍生的样本字符序列存储的优化实现。
因此,有必要提供一种样本字符序列存储的优化方法,亦为实现字符序列匹配的预处理方法。
至此,图9是根据一示例性实施例示出的一种实现字符序列匹配的预处理方法的流程图。在一示例性实施例中,如图9所示,该实现字符序列匹配的预处理方法,如图9所示,至少包括以下步骤。
在步骤810中,批量获取样本字符序列。
在步骤830中,进行样本字符序列中的字符提取,以在样本字符序列中拆分获得样本子序列以及样本子序列对应的样本字符位置。
在步骤850中,将样本子序列中的字符按照所对应样本字符位置,在一节点路径上载入字典树中深度对应于样本字符位置的分支节点。
在步骤870中,按照样本子序列对应的样本字符位置更新节点路径上的叶子节点。
其中,通过此示例性实施例,进行着批量样本字符序列存储的优化,通过每一样本字符序列预处理的进行,使得每一样本字符序列都以样本子序列为位置载入字典树,并相应进行字典树中已载入样本子序列的节点路径上叶子节点的更新。
至此,便实现了字典树的构建,进行着批量样本字符序列的存储以及更新。
进一步的,还将通过图8进行着字典树以及字典树中叶子节点的初始化,以便于逐字符的进行着样本子序列中字符及所对应样本字符位置的载入。
以通过病毒库对可疑文件进行病毒识别为例,进行本发明的字符序列匹配以及样本字符序列的优化存储进行详细阐述。
在病毒识别场景下,前述所指的样本字符序列是字符串形式的病毒MD5特征,所需要匹配的字符序列则是可疑文件的MD5特征。批量样本字符序列优化存储而获得的字典树,即为所构建的病毒库。
应当首先进行说明的是,无论是字符序列,还是样本字符序列,都是长度为32字符的字符串,而子序列以及样本子序列的长度则为6字符。
在所需要进行的病毒查杀中,对于一可疑文件,需要通过所持有的MD5特征来确认其是否为病毒文件。
将分为两大部分进行阐述,一部分是基于本发明的字符序列匹配而实现的病毒识别,另一部分则是通过本发明样本字符序列优化存储而实现的病毒库构建。
首先,对于基于本发明的字符序列匹配所实现的病毒识别部分,对于32字符的字符序列,例如,“25e41a91a6a83f9b400e2ff1fc28a1f9”,按照6字符的指定长度进行每一字符位置上的子序列提取,以将此字符序列拆分为32个子序列。
具体的,对于首字符“2”,所对应的字符位置是位置值“1”,在此字符位置上提取得到子序列“25e41a”;按照从左到右的顺序,对于第二个字符“5”所对应的字符位置是位置值“2”,在此字符位置上提取得到子序列“5e41a9”。
以此类推,将获得对应于一字符位置的子序列“e41a91”、“925e41”等一共32个子序列。
对于字符序列而言,在为其获得所有字符位置对应的子序列之后,就可以在病毒库进行字典树内查找子序列每一位字符在相应层级中分支节点的出现情况,确认子序列是否在病毒库中。
在针对所有子序列完成32次匹配之后,就可以确认字符序列是否存在于病毒库中,进而确认可疑文件是否为病毒文件。
对于一子序列在字典树内进行的查找,包括:以子序列“25e41a”为例,在字典树内查找第一层是否存在携带了字符“2”的分支节点,如果存在,则由此分支节点继续向下一层的分支节点查找是否存在携带了字符“5”的分支节点,以此类推,直至完成子序列“25e41a”中所有字符的依次查找匹配。
在查找匹配得到子序列“25e41a”之后,便获得了以根节点为起始,由6个分支节点顺次连接,以叶子节点为结尾的节点路径。
此时,需在叶子节点上读取位数组所指示的位置值。子序列“25e41a”是对应于首字符的,因此其所对应的位置值为1,相应的,将查看叶子节点的位数组中第一个比特位是为1,如果为1,则说明是对应于位置值“1”的,在此节点路上存储的样本子序列匹配于字符序列中字符位置“1”上的子序列。
将所有32个字符位置的子序列依次进行匹配,如果所有32个子序列均符合,则说明病毒库记录过这一条目,所对应的可疑文件是病毒文件。
其次,对于通过本发明样本字符序列优化存储而实现的病毒库构建部分,是通过字典树的形式进行病毒MD5特征的存储,进而获得病毒库。
具体的,将获取得到批量样本字符序列,其数量为1000万条。此时,一方面提取样本子序列,在样本字符序列中拆分得到样本子序列,另一方面则需执行字典树的构建以及样本字符序列的存储。
样本子序列的获得,与字符序列中子序列的获得一致,在此不再赘述。
而对于字典树的构建,与前述字符序列的匹配相类似的,将以根节点为起始,构建6层分支节点,并在第6层分支节点之外部署携带位数组的叶子节点。
如前所述的,字符范围是字母a-字母z,数字0-数字9,共36种字符,至此,共有36^6次方个叶子节点,每个叶子节点包含一个34比特位的整型值,且所有比特位均初始化为0。
至此,每一条节点路径上的分支节点便可以存储一条6字符的样本子序列。
对于所进行的样本子序列存储,则首先将位置值“1”所对应样本字符位置上的样本子序列逐字符载入到分支节点,并将所对应的叶子节点上位数组首个比特位置为1,以此类推,位置值“n”则将第n个比特位置为n。
一共32个样本字符位置,故32位的位数组恰好可完全记录。
通过此实现过程,将所有1000万样本字符序列进行提取并载入字典树。
图10是根据一示例性实施例示出的病毒识别场景下查找匹配以及存储优化的应用示意图。如图10所示的,病毒识别中进行的查找匹配将通过步骤910至步骤970的执行实现,而存储优化的实现则通过步骤1010至步骤1030的执行实现。
由此,对于病毒库中进行的查找匹配而言,由于字典树的构建可以进行36^6次方个样本子序列的存储,因此,每一次匹配时,1000万条样本字符序列下,每条样本字符序列包含着32条样本子序列,因此,1000万的样本字符序列将会占用总量的100000000/36^6=0.0046,一共需要进行32次匹配,即所有匹配具有相同样本子序列的概率为0.0046^32,大约是1.6e-75,由此,在撞库成功下,具备极小的匹配错误率,而存储容量获得极大提升。
所有匹配具有相同样本子序列的概率为100000000/36^6=0.0046,=0.147。
通过此病毒识别场景的实现,将有效减少病毒库的存储空间。原先都是存储32个字符的字符序列,现在则是拆分,利用公共前缀来构建字典树,减少了所需要占用的存储空间。
无论采用种匹配方式,都会具有一定的匹配错误率,而本发明的实现中,一方面匹配错误率非常低,另一方面,错误只有出现在没有匹配过的子序列被错误的认为是存在于库中的。
因为仅录入了病毒文件相关的信息,所以只会存在一定的将文件误报为病毒的极小概率,而不会出现将病毒文件错报成正常文件,且误报的几率已经被压缩至极低而可忽略不计。
在现有所实现的样本字符序列匹配中,时间复杂度为0(n),n为所匹配样本字符序列的条数,而通过本发明的实现,获得0(1)的时间复杂度。
由此,不再出现由于病毒库过大而造成无法加载至内存的困难,也不再需要频繁读取硬盘,具备非常高的读取效率,实现了高效准确匹配。
而通过如上所述的病毒库构建过程,对于字典树的初始化而言,不需要耗费很长时间,且能够适用于大规模的样本字符序列。
下述为本发明装置实施例,可以用于执行本发明上述字符序列匹配方法实施例。对于本发明装置实施例中未披露的细节,请参照本发明字符序列匹配方法实施例。图11是根据一示例性实施例示出的一种字符序列匹配装置的框图。该字符序列匹配装置,如图11所示,包括但不限于:字符序列获取模块1310、子序列获取模块1320、查找模块1330和匹配判定模块1350。
字符序列获取模块1310,用于获取给定的字符序列。
子序列获取模块1320,用于以字符序列中的每一字符位置为起始提取字符位置对应的子序列。
查找模块1330,用于在字典树根据子序列所包含字符以及所对应字符位置,查找各字符位置所对应子序列,字典树通过样本字符序列中样本子序列以及所对应样本字符位置构建。
匹配判定模块1350,用于如果所有字符位置所对应子序列都能够在字典树通过所包含字符和所对应字符位置匹配查找得到,则判定字典树中存在字符序列匹配的样本字符序列。
在一个示例性实施例中,子序列获取模块1310进一步用于在字符序列中逐字符进行指定长度的子序列提取,获得相应字符位置的子序列,字符位置为字符在字符序列中的位置。
图12是根据图11对应实施例示出的对查找模块的细节进行描述的流程图。在一示例性实施例中,如图12所示,该查找模块1330,包括但不限于:字符匹配单元1331、位置匹配单元1333和结果输出单元1335。
字符匹配单元1331,用于针对于子序列中的字符,在字典树中以根节点为起始匹配查找每一字符,判断字符形成的子序列是否存在于字典树中。
位置匹配单元1333,用于如果字符形成的子序列存在于字典树中,进一步判断子序列在字典树查找匹配的节点路径是否与子序列对应于相同字符位置。
结果输出单元1335,用于如果子序列在字典树查找匹配的节点路径与子序列对应于相同字符位置,则判定字符位置对应的子序列能够在字典树通过所包含字符和所对应字符位置匹配查找得到。
图13是根据图12对应实施例示出的对位置匹配单元的细节进行描述的框图。该位置匹配单元1333,如图13所示,包括但不限于:标示位获取子单元1401和位置值判断子单元1403。
标示位获取子单元1401,用于从子序列在字典树所查找匹配节点路径的叶子节点中获得指示的标志位。
位置值判断子单元1403,用于判断标志位与子序列所对应字符位置对应于相同位置值,如果为是,则判定子序列在字典树查找匹配的节点路径与子序列对应于相同字符位置。
图14是根据另一示例性实施例示出的一种字符序列匹配装置的框图。在另一示例性实施例中,如图14所示,该字符序列匹配装置,还包括但不限于:匹配目标获取模块1510和拼接模块1530。
匹配目标获取模块1510,用于获取各字符位置对应子序列的字典树查找中匹配的目标子序列以及所对应字符位置,所述目标子序列为样本字符序列中的样本子序列;
拼接模块1530,用于按照所对应样本字符位置进行所述目标子序列的拼接,获得所述字典树中所述字符序列匹配的样本字符序列。
在另一示例性实施例中,该字符序列匹配装置,还包括但不限于:存储模块。
存储模块,用于根据所进行的子序列获取以及样本字符序列构建所述字典树,获得包含样本字符序列中样本子序列以及所对应样本字符位置的字典树。
图15是根据一示例性实施例示出的对存储模块的细节进行描述的框图。该存储模块1600,如图15所示的,包括但不限于:提取拆分单元1610、字符载入单元1630和标志位载入单元1650。
提取拆分单元1610,用于进行所述样本字符序列中的字符提取,以在所述样本字符序列中拆分获得样本子序列以及所述样本子序列对应的样本字符位置;
字符载入单元1630,用于将所述样本子序列中的字符按照所在位置,在一节点路径上载入字典树中深度对应于所述字符所在位置的分支节点;
标志位载入单元1650,用于按照所述样本子序列对应的样本字符位置更新所述节点路径上的叶子节点。
图16是根据另一示例性实施例示出的对存储模块的细节进行描述的框图。该存储模块1600,如图16所示的,包括但不限于:节点初始化单元1670和位数组初始化单元1690。
节点初始化单元1670,用于根据所进行的子序列获取进行字典树的初始化,初始化所获得字典树中分支节点的分布适应于获取所述子序列而对应的指定长度;
位数组初始化单元1690,用于在所述分支节点连接的叶子节点中进行位数组的初始化,所述位数组用于在所述样本子序列被载入时更新所对应的样本字符位置。
图17是根据一示例性实施例示出的一种实现字符序列匹配的预处理装置的框图。在一示例性实施例中,如图17所示的,一种实现字符序列匹配的预处理装置,包括但不限于:批量样本获取模块1810、样本提取拆分模块1830、样本加载模块1850和位置更新模块1870。
批量样本获取模块1810,用于批量获取样本字符序列;
样本提取拆分模块1830,用于进行所述样本字符序列中的字符提取,以在所述样本字符序列中拆分获得样本子序列以及所述样本子序列对应的样本字符位置;
样本加载模块1850,用于将所述样本子序列中的字符按照所对应样本字符位置,在一节点路径上载入字典树中深度对应于所述样本字符位置的分支节点;
位置更新模块1870,用于按照所述样本子序列对应的样本字符位置更新所述节点路径上的叶子节点。
可选的,本发明还提供一种终端设备,执行图3、图4、图5、图6、图7、图8和图9任一所示的方法的全部或者部分步骤。所述装置包括:
处理器;
用于存储处理器可执行指令的存储器;
其中,所述处理器被配置为执行如上所述的方法。
该实施例中的装置的处理器执行操作的具体方式已经在如上所述的方法的实施例中执行了详细描述,此处将不做详细阐述说明。
在示例性实施例中,还提供了一种存储介质,该存储介质为计算机可读存储介质,例如可以为包括指令的临时性和非临时性计算机可读存储介质。该存储介指例如包括指令的存储器204,上述指令可由装置200的处理器218执行以完成上述方法。
应当理解的是,本发明并不局限于上面已经描述并在附图中示出的精确结构,并且可以在不脱离其范围执行各种修改和改变。本发明的范围仅由所附的权利要求来限制。
Claims (13)
1.一种字符序列匹配方法,其特征在于,所述方法包括:
获取给定的字符序列;
以所述字符序列中的每一字符位置为起始提取所述字符位置对应的子序列;
在字典树根据所述子序列所包含字符以及所对应字符位置,查找各字符位置所对应子序列,所述字典树通过样本字符序列中样本子序列以及所对应样本字符位置构建,所述字典树节点包括根节点、分支节点以及叶子节点,所述分支节点携带样本子序列中的字符;
各分支节点都有着唯一对应的层级,随着层级的不断深入对分支节点存在的下一分支节点查找字符,所述在字典树根据所述子序列所包含字符以及所对应字符位置,查找各字符位置所对应子序列,包括:
针对于所述子序列中的字符,按照子序列中字符存在的前后顺序确定所述字符在字典树中进行查找的层级,对首位字符在字典树内查找第一层是否存在携带了所述首位字符的分支节点,如果存在,则由所述分支节点继续向下一层的分支节点查找是否存在携带了下一字符的分支节点,直至完成所述子序列中所有字符的依次查找匹配,以查找匹配得到所述子序列,获得节点路径,所述节点路径以根节点为起始,所查找匹配得到的多层分支节点顺次连接,以叶子节点为结尾的节点路径,多层分支节点与所述子序列的长度相符;
在叶子节点上由位数组通过二进制表示在一位上的数值变化读取指示的位置值,根据所述位置值进一步判断所述子序列在所述字典树查找匹配的节点路径是否与所述子序列对应于相同字符位置,指示所述位置值的所述位数组的二进制表示为整数数组,整数的每一位都表示所在位置顺序映射至子序列的字符位置;
如果所述子序列在所述字典树查找匹配的节点路径与所述子序列对应于相同字符位置,则判定所述字符位置对应的子序列能够在所述字典树通过所包含字符和所对应字符位置匹配查找得到,所述节点路径中,所述根节点和叶子节点之间顺次连接着单一一个或者若干个分支节点,匹配查找得到的所述节点路径上字符在分支节点的分布与所述字符序列匹配的样本字符序列中字符的顺序存在相一致;
如果所有字符位置所对应子序列都能够在所述字典树通过所包含字符和所对应字符位置匹配查找得到,则判定所述字典树中存在所述字符序列匹配的样本字符序列。
2.根据权利要求1所述的方法,其特征在于,所述以所述字符序列中的每一字符位置为起始提取所述字符位置对应的子序列,包括:
在所述字符序列中逐字符进行指定长度的子序列提取,获得相应字符位置的子序列,所述字符位置为所述字符在所述字符序列中的位置。
3.根据权利要求2所述的方法,其特征在于,所述进一步判断所述子序列在所述字典树查找匹配的节点路径是否与所述子序列对应相同字符位置,包括:
从所述子序列在所述字典树所查找匹配节点路径的叶子节点中获得指示的标志位;
判断所述标志位与所述子序列所对应字符位置对应于相同位置值,如果为是,则判定所述子序列在所述字典树查找匹配的节点路径与所述子序列对应于相同字符位置。
4.根据权利要求1所述的方法,其特征在于,所述如果所有字符位置所对应子序列都能够在所述字典树通过所包含字符和所对应字符位置匹配查找得到,则判定所述字典树中存在所述字符序列匹配的样本字符序列之后,所述方法还包括:
获取各字符位置对应子序列的字典树查找中匹配的目标子序列以及所对应字符位置,所述目标子序列为样本字符序列中的样本子序列;
按照所对应样本字符位置进行所述目标子序列的拼接,获得所述字典树中所述字符序列匹配的样本字符序列。
5.根据权利要求1所述的方法,其特征在于,所述方法还包括:
根据所进行的子序列获取以及样本字符序列构建所述字典树,获得包含样本字符序列中样本子序列以及所对应样本字符位置的字典树。
6.根据权利要求5所述的方法,其特征在于,所述根据所进行的子序列获取以及样本字符序列构建所述字典树,获得包含样本字符序列中样本子序列以及所对应样本字符位置的字典树,包括:
进行所述样本字符序列中的字符提取,以在所述样本字符序列中拆分获得样本子序列以及所述样本子序列对应的样本字符位置;
将所述样本子序列中的字符按照所在位置,在一节点路径上载入字典树中深度对应于所述字符所在位置的分支节点;
按照所述样本子序列对应的样本字符位置更新所述节点路径上的叶子节点。
7.根据权利要求6所述的方法,其特征在于,所述进行所述样本字符序列中的特征提取,以在所述样本字符序列中拆分获得样本子序列以及所述样本子序列对应的样本字符位置之前,
所述根据所进行的子序列获取以及样本字符序列构建所述字典树,获得包含样本字符序列中子序列以及所对应字符位置的字典树,还包括:
根据所进行的子序列获取进行字典树的初始化,初始化所获得字典树中分支节点的分布适应于获取所述子序列而对应的指定长度;
在所述分支节点连接的叶子节点中进行位数组的初始化,所述位数组用于在所述样本子序列被载入时更新所对应的样本字符位置。
8.一种实现字符序列匹配的预处理方法,其特征在于,所述方法包括:
批量获取样本字符序列;
进行所述样本字符序列中的字符提取,在所述样本字符序列中拆分获得样本子序列以及所述样本子序列对应的样本字符位置;
将所述样本子序列中的字符按照所对应样本字符位置,在一节点路径上载入字典树中层级对应于所述样本字符位置的分支节点,所述字典树节点包括根节点、分支节点以及叶子节点,所述分支节点携带样本子序列中的字符,各分支节点都有着唯一对应的层级;
按照所述样本子序列对应的样本字符位置更新所述节点路径上的叶子节点上位数组指示的位置值,所述位数组通过二进制表示在一位上的数值变化读取指示的位置值,所述二进制表示为整数数组,整数的每一位都表示所在位置顺序映射至子序列的字符位置。
9.根据权利要求8所述的方法,其特征在于,所述进行所述样本字符序列中的特征提取,在所述样本字符序列中拆分获得样本子序列以及所述样本子序列对应的样本字符位置之前,所述方法还包括:
根据所进行的样本子序列获取进行字典树的初始化,初始化所获得字典树中分支节点的分布适应于获取所述子序列而对应的指定长度;
在所述分支节点连接的叶子节点中进行位数组的初始化,所述位数组用于在所述样本子序列被载入时更新所对应的样本字符位置。
10.一种字符序列匹配装置,其特征在于,所述装置包括:
字符序列获取模块,用于获取给定的字符序列;
子序列获取模块,用于以所述字符序列中的每一字符位置为起始提取所述字符位置对应的子序列;
查找模块,各分支节点都有着唯一对应的层级,随着层级的不断深入对分支节点存在的下一分支节点查找字符,所述查找模块用于在字典树根据所述子序列所包含字符以及所对应字符位置,查找各字符位置所对应子序列,所述字典树通过样本字符序列中样本子序列以及所对应样本字符位置构建,所述字典树节点包括根节点、分支节点以及叶子节点,所述分支节点携带样本子序列中的字符;
所述查找模块包括:
字符匹配单元,用于针对于所述子序列中的字符,按照子序列中字符存在的前后顺序确定所述字符在字典树中进行查找的层级,对首位字符在字典树内查找第一层是否存在携带了所述首位字符的分支节点,如果存在,则由所述分支节点继续向下一层的分支节点查找是否存在携带了下一字符的分支节点,直至完成所述子序列中所有字符的依次查找匹配,以查找匹配得到所述子序列,获得节点路径,所述节点路径以根节点为起始,所查找匹配得到的多层分支节点顺次连接,以叶子节点为结尾的节点路径,多层分支节点与所述子序列的长度相符;
在叶子节点上由位数组通过二进制表示在一位上的数值变化读取指示的位置值,根据所述位置值进一步判断所述子序列在所述字典树查找匹配的节点路径是否与所述子序列对应于相同字符位置,指示所述位置值的所述位数组的二进制表示为整数数组,整数的每一位都表示所在位置顺序映射至子序列的字符位置;
结果输出单元,用于如果所述子序列在所述字典树查找匹配的节点路径与所述子序列对应于相同字符位置,则判定所述字符位置对应的子序列能够在所述字典树通过所包含字符和所对应字符位置匹配查找得到;
匹配判定模块,用于如果所有字符位置所对应子序列都能够在所述字典树通过所包含字符和所对应字符位置匹配查找得到,则判定所述字典树中存在所述字符序列匹配的样本字符序列。
11.根据权利要求10所述的装置,其特征在于,所述子序列获取模块进一步用于在所述字符序列中逐字符进行指定长度的子序列提取,获得相应字符位置的子序列,所述字符位置为所述字符在所述字符序列中的位置。
12.一种实现字符序列匹配的预处理装置,其特征在于,所述装置包括:
批量样本获取模块,用于批量获取样本字符序列;
样本提取拆分模块,用于进行所述样本字符序列中的字符提取,在所述样本字符序列中拆分获得样本子序列以及所述样本子序列对应的样本字符位置;
样本加载模块,用于将所述样本子序列中的字符按照所对应样本字符位置,在一节点路径上载入字典树中层级对应于所述样本字符位置的分支节点,所述字典树节点包括根节点、分支节点以及叶子节点,所述分支节点携带样本子序列中的字符,各分支节点都有着唯一对应的层级;
位置更新模块,用于按照所述样本子序列对应的样本字符位置更新所述节点路径上的叶子节点上位数组指示的位置值,所述位数组通过二进制表示在一位上的数值变化读取指示的位置值,所述二进制表示为整数数组,整数的每一位都表示所在位置顺序映射至子序列的字符位置;
其中,所述节点路径中,所述根节点和叶子节点之间顺次连接着单一一个或者若干个分支节点,匹配查找得到的节点路径上字符在分支节点的分布与给定字符序列匹配的样本字符序列中字符的顺序存在相一致。
13.一种机器设备,其特征在于,包括:
处理器;以及
存储器,所述存储器上存储有计算机可读指令,所述计算机可读指令被所述处理器执行时实现根据权利要求1至9中任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810193518.XA CN110245330B (zh) | 2018-03-09 | 2018-03-09 | 字符序列匹配方法、实现匹配的预处理方法和装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810193518.XA CN110245330B (zh) | 2018-03-09 | 2018-03-09 | 字符序列匹配方法、实现匹配的预处理方法和装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110245330A CN110245330A (zh) | 2019-09-17 |
CN110245330B true CN110245330B (zh) | 2023-07-07 |
Family
ID=67882247
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201810193518.XA Active CN110245330B (zh) | 2018-03-09 | 2018-03-09 | 字符序列匹配方法、实现匹配的预处理方法和装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110245330B (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114090840A (zh) * | 2020-08-24 | 2022-02-25 | 华为技术有限公司 | 序列查找方法、装置、设备及介质 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101577662A (zh) * | 2008-05-05 | 2009-11-11 | 华为技术有限公司 | 一种基于树形数据结构的最长前缀匹配方法和装置 |
CN102402692A (zh) * | 2010-09-13 | 2012-04-04 | 中国科学院遥感应用研究所 | 一种特征字符串识别方法及系统 |
CN107169054A (zh) * | 2017-04-26 | 2017-09-15 | 四川长虹电器股份有限公司 | 基于前缀森林的ip索引方法 |
Family Cites Families (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1253817C (zh) * | 2002-08-23 | 2006-04-26 | 华为技术有限公司 | 一种实现长字符串前缀匹配的方法 |
JP4402120B2 (ja) * | 2007-01-24 | 2010-01-20 | 株式会社エスグランツ | ビット列検索装置、検索方法及びプログラム |
CN102024046B (zh) * | 2010-12-14 | 2013-04-24 | 华为数字技术(成都)有限公司 | 数据重复性校验方法和装置及系统 |
CN103793440B (zh) * | 2012-11-02 | 2018-03-27 | 阿里巴巴集团控股有限公司 | 信息显示方法和装置 |
EP3014482B1 (en) * | 2013-06-28 | 2018-03-07 | Khalifa University of Science, Technology and Research | Method and system for searching and storing data |
JP5989919B2 (ja) * | 2013-12-10 | 2016-09-07 | 日本電信電話株式会社 | Urlマッチング装置、urlマッチング方法、および、urlマッチングプログラム |
CN103646101B (zh) * | 2013-12-20 | 2017-06-27 | 北京奇虎科技有限公司 | 查找内容项中是否存在标志的方法及装置 |
CN104933363B (zh) * | 2015-06-19 | 2018-09-11 | 安一恒通(北京)科技有限公司 | 检测恶意文件的方法和装置 |
CN105095369A (zh) * | 2015-06-29 | 2015-11-25 | 北京金山安全软件有限公司 | 网址匹配方法及装置 |
-
2018
- 2018-03-09 CN CN201810193518.XA patent/CN110245330B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101577662A (zh) * | 2008-05-05 | 2009-11-11 | 华为技术有限公司 | 一种基于树形数据结构的最长前缀匹配方法和装置 |
CN102402692A (zh) * | 2010-09-13 | 2012-04-04 | 中国科学院遥感应用研究所 | 一种特征字符串识别方法及系统 |
CN107169054A (zh) * | 2017-04-26 | 2017-09-15 | 四川长虹电器股份有限公司 | 基于前缀森林的ip索引方法 |
Non-Patent Citations (1)
Title |
---|
兴趣点数据的组织模型与检索算法;黄秦;李英冰;范雨东;;测绘科学(第08期);145-149+154 * |
Also Published As
Publication number | Publication date |
---|---|
CN110245330A (zh) | 2019-09-17 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110580290B (zh) | 用于文本分类的训练集的优化方法及装置 | |
CN106951228B (zh) | 版本迭代中差异的处理方法和装置 | |
CN110019647B (zh) | 一种关键词搜索方法、装置和搜索引擎 | |
US10229111B1 (en) | Sentence compression using recurrent neural networks | |
CN108985934B (zh) | 区块链修改方法和装置 | |
US20180218077A1 (en) | Method and apparatus for searching application and mobile terminal | |
CN107590214A (zh) | 搜索关键词的推荐方法、装置及电子设备 | |
CN107832035B (zh) | 一种智能终端的语音输入方法 | |
CN103559065A (zh) | 一种ota升级的方法和系统 | |
US11232025B2 (en) | Method, device and computer program product for storage management | |
CN107885483B (zh) | 音频信息的校验方法、装置、存储介质及电子设备 | |
CN104615546A (zh) | 文件数据管理方法及装置 | |
CN110245330B (zh) | 字符序列匹配方法、实现匹配的预处理方法和装置 | |
CN112712795A (zh) | 标注数据确定方法、装置、介质及电子设备 | |
CN109545223B (zh) | 应用于用户终端的语音识别方法及终端设备 | |
CN102184115B (zh) | 升级系统软件的方法及终端设备 | |
CN110046095B (zh) | 基于测试流程改进的系统集成方法及装置 | |
CN110716914A (zh) | 数据库配置方法、系统、计算机可读存储介质及终端设备 | |
US11829428B2 (en) | App name search method and system | |
CN116071590A (zh) | 模型训练方法、系统、计算机设备以及存储介质 | |
CN105930332A (zh) | 代码发布查询方法及终端 | |
CN113849415A (zh) | 控件测试方法、装置、存储介质及电子设备 | |
CN111460141B (zh) | 一种文本处理方法、装置及电子设备 | |
CN112101023A (zh) | 文本处理方法、装置以及电子设备 | |
CN109635175B (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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |