CN108628907B - 一种用于基于Aho-Corasick的Trie树多关键词匹配的方法 - Google Patents
一种用于基于Aho-Corasick的Trie树多关键词匹配的方法 Download PDFInfo
- Publication number
- CN108628907B CN108628907B CN201710181879.8A CN201710181879A CN108628907B CN 108628907 B CN108628907 B CN 108628907B CN 201710181879 A CN201710181879 A CN 201710181879A CN 108628907 B CN108628907 B CN 108628907B
- Authority
- CN
- China
- Prior art keywords
- byte
- keyword
- trie
- node
- trie 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
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明提供一种用于基于Aho‑Corasick的Trie树多关键词匹配的方法、系统、电子设备和可读存储介质,能够解决非拉丁语言的文本匹配问题。所述方法包括:获取预定关键词中每个字的编码,将所述预定关键词中每个字的所述编码转化为相对应的以二进制表示的byte;将与所述预定关键词中每个字的编码相对应的byte序列化以生成Trie树;以及利用所生成的Trie树,将与待匹配的所传入的文本中每个字的编码相对应的byte序列化,以对待匹配的所传入的文本进行匹配。
Description
技术领域
本发明涉及计算机及软件技术领域,特别地涉及一种用于基于Aho-Corasick的Trie树多关键词匹配的方法、系统、电子设备和可读存储介质。
背景技术
互联网的普及给大家带来了更为便捷获取多种文字信息的方式,同时大量的文字信息里面也充斥着各种虚假、欺骗、不健康等各种信息。传统的人为识别方式已经无法处理如此大量的数据,相应算法的应运而生为大量数据的处理提供了可能。目前多关键词匹配算法已经有很多,比如利用关键词做正则表达式对文本内容进行匹配Aho-Corasick算法、Wu-Manber算法等,本文便是基于Aho-Corasick算法实现的一种关键词匹配方法。Trie树,又称前缀树或字典树,是一种有序树,用于保存关联数组,其中的键通常是字符串。字典中的每一个单词在Trie树中表现为一条从根结点出发的路径,路径上的点连起来就是一颗Trie树。与二叉查找树不同,键不是直接保存在节点中,而是由节点在树中的位置决定的。一个节点的所有子孙都有相同的前缀,该前缀就是这个节点对应的字符串,而根节点对应空字符串。一般情况下,不是所有的节点都有对应的值,只有叶子节点和部分内部节点所对应的键才有相关的值。
Trie树的基本性质可以归纳为:(1)根结点不包含字符,其他的每一个节点只包含一个字符;(2)从根结点到某一节点,路径上经过的字符连接起来,为该节点对应的字符串;(3)每个节点的所有子节点包含的字符都不相同。
典型的应用是用于统计和排序大量的字符串(但不仅限于字符串),所以经常被搜索引擎系统用于文本词频统计。它的优点是:最大限度的减少无谓的字符串比较,查询效率要高于哈希表。Trie树核心是空间换时间,利用字符串的公共前缀来降低查询的时间开销,从而达到提高效率的目的。对于庞大的空间消耗,我们可以用链表来动态开辟空间,达到空间上利用率的最大化。
Aho-Corasick算法在1975年产生于贝尔实验室,是著名的多模式匹配算法之一。Aho-Corasick算法是一种利用char建立Trie树的实现方法。在大量关键词的情况下,利用正则表达式来做匹配的效率较低,无法满足关键词较多的情况。Aho-Corasick算法的各种原生实现,主要是利用char来建立Trie树,但是char并不能支持所有中文字,编码值超出65535的中文字无法使用char来存储。一个常见的例子就是给定N个单词,给定包含M个字符的文章,要求确定给定的单词中有多少个在文章中出现过。与KMP算法类似,AC自动机也是利用前一个匹配模式串失效之后得到的信息来确定下一个匹配的开始位置,从而避免回移主串的匹配指针。
发明内容
有鉴于此,本发明提供一种用于基于Aho-Corasick的Trie树多关键词匹配方法和系统,利用byte数组替代char来构建Trie树,有助于解决诸如中文、日语等非拉丁语系关键词的快速匹配,利用提升空间复杂度来换取时间复杂度的降低。本领域技术人员应该理解的是,虽然本文以中文为例描述基于Aho-Corasick的Trie树多关键词匹配方法和系统,但是本发明旨在针对无法用char解决的各种语言的关键词匹配问题。此外,虽然本文中以UTF-8编码、byte数组为例进行阐述,但是可以使用能够实现本发明主题的任何其他技术。
为实现上述目的,根据本发明的一个方面,提供了一种用于基于Aho-Corasick的Trie树多关键词匹配方法、系统、电子设备和可读存储介质。
根据本发明的技术方案的一个方面,提供了一种用于基于Aho-Corasick的Trie树多关键词匹配的方法。
根据本发明的技术方案的一个方面的用于基于Aho-Corasick的Trie树多关键词匹配的方法,包括:获取预定关键词中每个字的编码,将所述预定关键词中每个字的所述编码转化为相对应的以二进制表示的byte;将与所述预定关键词中每个字的编码相对应的byte序列化以生成Trie树;以及利用所生成的Trie树,将与待匹配的所传入的文本中每个字的编码相对应的byte序列化,以对待匹配的所传入的文本进行匹配。
可选地,序列化包括:对每个byte进行处理,求取所述byte对应的索引值;基于所求取的所述索引值确定与所述byte相对应的节点在所述Trie树中的位置。
可选地,对所述byte求取索引值包括:将所述byte与和整数255相对应的二进制的byte进行“与”运算,得到的正整数值作为索引值。
可选地,所生成的Trie树的每个层级有255个节点。
可选地,所生成的Trie树的每个层级的255个节点用长度为255的数组来表示。
可选地,每个节点被表示为“层级、索引、状态”三元组。
根据本发明的技术方案的另一个方面,提供了一种用于基于Aho-Corasick的Trie树多关键词匹配的系统。
根据本发明的技术方案的另一方面的用于基于Aho-Corasick的Trie树多关键词匹配的系统,包括:关键词加载器,所述关键词加载器被配置成获取预定关键词,其中,所获取的预定关键词中每个字的编码被转化为相对应的以二进制表示的byte;Trie树生成器,所述Trie树生成器被配置成将与所述预定关键词中每个字的编码相对应的byte序列化以生成Trie树;以及关键词匹配器,所述关键词匹配器被配置获取待匹配的所传入的文本,利用所生成的Trie树,将与所述待匹配的所传入的文本中每个字的编码相对应的byte序列化,以对待匹配的所传入的文本进行匹配。
可选地,序列化包括:对每个byte进行处理,求取所述byte对应的索引值;基于所求取的所述索引值确定与所述byte相对应的节点在所述Trie树中的位置。
可选地,对所述byte求取索引值包括:将所述byte与和整数255相对应的二进制的byte进行“与”运算,得到的正整数值作为索引值。
可选地,所生成的Trie树的每个层级有255个节点。
可选地,所生成的Trie树的每个层级的255个节点用长度为255的数组来表示。
可选地,每个节点被表示为“层级、索引、状态”三元组。
根据本发明实施例的另一个方面,还提供了一种电子设备,包括:
一个或多个处理器;
存储装置,用于存储一个或多个程序,
当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现上述任一用于基于Aho-Corasick的Trie树多关键词匹配所述的方法。
根据本发明实施例的另一个方面,还提供了一种计算机可读介质,其上存储有计算机程序,所述程序被处理器执行时实现上述任一用于基于Aho-Corasick的Trie树多关键词匹配所述的方法。
上述发明中的一个实施例具有如下优点或有益效果:因为采用byte数组替代char来构建Trie树,有助于解决诸如中文、日语等非拉丁语系关键词的快速匹配,进而实现利用提升空间复杂度来换取时间复杂度的降低的技术效果。
上述的非惯用的可选方式所具有的进一步效果将在下文中结合具体实施方式加以说明。
附图说明
附图用于更好地理解本发明,不构成对本发明的不当限定。其中:
图1是根据本发明实施方式的一种用于基于Aho-Corasick的Trie树多关键词匹配系统架构的示意图;
图2是根据本发明实施方式的Trie树生成流程的框图;
图3是根据本发明实施方式的构建完成的Trie树的示意图;
图4是根据本发明实施方式的构建完成的Trie树的数组表示;
图5是根据本发明实施方式的Trie树关键词匹配流程的框图。
图6是用来实现本发明实施例的用于基于Aho-Corasick的Trie树多关键词匹配方法的电子设备的硬件结构示意图图。
具体实施方式
以下结合附图对本发明的示范性实施方式做出说明,其中包括本发明实施方式的各种细节以助于理解,应当将它们认为仅仅是示范性的。因此,本领域普通技术人员应当认识到,可以对这里描述的实施方式做出各种改变和修改,而不会背离本发明的范围和精神。同样,为了清楚和简明,以下的描述中省略了对公知功能和结构的描述。
图1是根据本发明实施方式的一种用于基于Aho-Corasick的Trie树多关键词匹配系统架构的示意图。整个关键词匹配引擎的结构主要包含关键词加载器11、Trie树生成器12、和关键词匹配器13。
如图1所示,关键词匹配单元是实现基于Aho-Corasick的Trie树多关键词匹配系统的核心。关键词匹配单元与存储单元和输入单元数据通信,从存储单元中读取预定关键词集合中的关键词,实现了图2的Trie树生成流程以及图3的Trie树关键词匹配流程。在一种实施方式中,关键词匹配单元主要由关键词匹配器、Trie树生成器、关键词加载器构成。
关键词加载器11:关键词加载器是关键词匹配单元和存储单元之间的接口,被配置成实现关键词匹配单元和存储单元之间的数据通信。关键词加载器用于从存储单元中加载关键词信息。存储单元可以是数据库、缓存、数据存储库、基于云的数据存储等各种数据存储方式。在某些实施方式中,预定的关键词集合被以预定的数据结构预先存储在数据库中,或者存储在缓存中;在缓存失效的情况下,则直接从数据库中读取。关键词可以以二进制byte数组结构存储。预定的关键词集合是从用户输入读取的、或者从诸如先前数据库的先前存储单元导入的。例如,关键词“北京市”,以UTF-8编码存储在存储单元中;或者以UTF-8编码的其他转化形式存储,诸如存储为与UTF-8编码相对应的二进制byte数组。本领域技术人员应该理解的是,虽然本文中以UTF-8为例描述Trie树的生成和匹配过程,但是也可以使用诸如UTF-16等任意其他编码标准。
Trie树生成器12:Trie树生成器被配置成与关键词加载器和关键词匹配器进行数据通信,通过读取经由关键词加载器所获取到的预定关键词集合来生成Trie树。在一种实施方式中,Trie树生成器从关键词加载器中逐个byte读取每个预定关键词,为每个byte求取索引,并从根节点开始创建Trie树。Trie树的每个节点可以存储表示该节点信息的各种内容。在某些实施方式中,例如,每个节点可以被表示为“层级,索引,状态”的三元组。在下面的示例实施例中,以长度为255的数组来表示每个节点的子节点,但不限于这样的实施例。
关键词匹配器13:如图1所示,关键词匹配器模块可以被配置成从输入单元接收传入文本,并且与Trie树生成器数据通信,利用Trie树生成器预先生成的预定关键词集合的Trie树,来对所传入的文本内容进行多关键词匹配,并返回命中的关键词集合。关键词匹配器逐个byte读取每个传入的关键词,将读取到的传入的文本与Trie树中的节点进行匹配,找到命中的关键词集合。
存储单元:存储单元可包括一个或多个计算机可读存储介质,其可被配置成在操作期间存储信息。在某些示例中,存储单元被描述为计算机可读存储介质。在某些示例中,存储单元是临时存储器,意味着存储设备的主要目的并不是长期存储。在某些示例中,将存储单元被描述为易失性存储器,意味着存储单元在计算设备被关掉时不保持存储的内容。在某些示例中,计算设备包括一个或多个通信单元。在一个示例中,关键词匹配单元利用通信单元经由诸如一个或多个无线网络之类的一个或多个网络来与存储单元通信。通信单元可以是网络接口卡(诸如以太网卡)、光学收发机、射频收发机或可以发送和接收信息的任何其他类型的设备。此类网络接口的其他示例可包括蓝牙、3G和WiFi无线电组件以及通用串行总线(USB)。在示例性实施例中,例如,存储单元中存储关键词集合“北京市”、“北平市”。在以byte数组存储的实施方式中,关键词“北京市”的UTF-8编码表示为“e5-8c-97(北)”“e4-ba-ac(京)”“e5-b8-82(市)”,关键词“北平市”的UTF-8编码表示为“e5-8c-97(北)”“e5-b9-b3(平)”“e5-b8-82(市)”。将关键词“北京市”的UTF-8编码转换成二进制byte表示,所存储的byte数组为:“11100101-10001100-10010111-11100100-10111010-10101100-11100101-10111000-10000010”。
图2是根据本发明实施方式的Trie树生成过程的流程图。在某些实施方式中,在使用UTF-8编码标准的情况下,预定关键词集合中的每个关键词的UTF-8编码被存储为byte数组。在其他实施方式中,也可以使用诸如链表等的其他数据结构来存储每个关键词的UTF-8编码。在该示例实施例中,对于预定关键词集合中的每个关键词,将其每个字的UTF-8编码对应的byte依次存储,组成byte数组。例如,存储单元中存储关键词集合“北京市”、“北平市”。在以byte数组存储的实施方式中,关键词“北京市”的UTF-8编码表示为“e5-8c-97(北)”“e4-ba-ac(京)”“e5-b8-82(市)”,关键词“北平市”的UTF-8编码表示为“e5-8c-97(北)”“e5-b9-b3(平)”“e5-b8-82(市)”。将关键词“北京市”的UTF-8编码转换成二进制byte表示,组成的byte数组为:“11100101-10001100-10010111-11100100-10111010-10101100-11100101-10111000-10000010”。
表1.关键词“北京市”
表2.关键词“北平市”
在S201中,从存储单元读取预定关键词的byte。在该示例中,首先读取到“北京市”的byte数组中的第一个byte“11100101”,然后过程进行至S202。
在S202中,从根节点开始构建Trie树。接下来的S203-S207是单个byte的构建过程。
在S203中,将所读取到的该byte求取索引值。在一种实施方式中,由于在某些数据格式中,byte表示的有符号整数数值范围是-128~+127,而无符号整数数值范围是0~255。因此优选地将所读取到的该byte与255进行“与”运算,从而得到该byte所表示的数值对应的正整数值,将其作为在长度为255的数组中的索引值。并且基于该计算得到的索引值,得到子节点中对应的索引值位置。在上述示例中,读取到第一个byte“11100101”,与255的byte表示“11111111”进行“与”运算,求得索引值229。此处所述与“255”进行“与”运算来求取索引值是优选的实施方式,并且后面的步骤基于与“255”进行“与”运算来求取索引值而将Trie树的每个层级节点构建为长度为255的数组。但本领域技术人员应该理解的是,任何其他能够实现生成Trie树的求取索引值的实施方式也是可行的。过程进行至S204。
在S204中,判断当前节点是否存在子节点。如果存在子节点,则表示在先前的关键词序列化过程中已有该路径的byte被序列化到Trie树中,过程进行至S205;如果不存在子节点,则表示在先前的关键词序列化过程中尚未有相同路径的byte被序列化到Trie树中,需要为当前节点创建子节点,过程进行至S213。在以数组表示子节点的实施方式中,每次为当前节点创建255个子节点,即长度为255的数组。继续上述示例,经过S204判断,在根节点下尚没有子节点,过程进行至S213,为根节点创建255个子节点。
在S213中,为当前节点创建255个子节点。继续上述示例,当前节点为根节点,为根节点创建255个子节点。在以数组表示子节点的实施方式中,生成长度为255的数组。其中,每个节点占用长度为255的数组中的一个索引位置,该数组位置中可以存储用于描述该节点的任何内容。例如,可以用“层级,索引,状态”三元组来表示节点,当子节点存在时,子节点数组的该索引位置中将存储该节点对应的“层级,索引,状态”。当该子节点尚未被创建时,子节点数组的该索引位置为空。
在S205中,判断当前节点的子节点中,与该索引值对应的子节点是否已经存在。如果存在与该索引值对应的子节点,则表示在先前的关键词序列化过程中已有相同路径的相同byte被序列化到Trie树中,过程进行至S207;如果不存在与该索引值对应的子节点,则表示在先前的关键词序列化过程中尚未有相同路径的相同byte被序列化到Trie树中,过程进行至S206。继续上述示例,在根节点的子节点中,确定索引值为229的子节点不存在,也就是该子节点是空节点,过程进行到S206。
在S206中,创建与该索引值相对应的子节点。创建节点,表示已将该路径的该byte序列化进入Trie树中。在“层级,索引,状态”三元组的实施方式中,可以为每个节点存储其所在层级、其对应的索引、并且将“状态”标识符设置为存在。在另一种实施方式中,可以为其设置默认值为0的状态标识符,生成该节点时,将状态标识符标识为1,表示该节点“存在”。继续上述示例,将与根节点下一层、索引值229相对应的子节点三元组存储为“第1层,299,存在”,然后过程进行至S207。
在S207中,判断所读取的byte是否是该关键词的byte数组中的最后一个byte。如果是,则表示该关键词的byte数组中的所有byte已经序列化进入到Trie树中,需要将当前节点的状态标识为“结束”状态,过程进行至S208;如果否,则表示仍有该关键词的byte需要序列化进入到Trie树中,需要将当前节点状态标识为“跳转”状态,过程进行至S211。继续上述示例,判断byte“11100101”并不是关键词“北京市”的最后一个byte,过程进行至S211。
在S211中,将当前节点的状态标识为“跳转”状态。在一种实施方式中,为当前节点设置有默认值为0的状态标识符,在将当前节点标识为“跳转”时,将此状态标识符设置为2。例如,默认—0,存在—1,跳转—2,结束—3。当前节点被设置为“跳转”之后,过程进行至S212,读取下一个byte。继续上述示例,将根节点的子节点中与索引值229相对应的子节点标识为“第1层,299,存在”,过程进行至S212,读取下一个byte。在某些情况下,如果当前节点在先前过程中已经被标识为“结束”,但是所读取的byte并不是该关键词的最后一个byte,则保留该当前节点的“结束”标识,但是继续对其构建子节点。例如,在上面的示例中,如果先前已经序列化关键词“北京市”,则“北京市”的最后一个byte被标识为“结束”。但是随后又有关键词“北京市区”要被序列化进入Trie树,则当过程进行至“北京市”的最后一个byte之后,还有“区”的byte数据需要继续被序列化,此时不改变“北京市”的最后一个byte的“结束”状态。
在S212中,读取该关键词集合的byte数组中的下一个byte,然后进行至S203,重复步骤S203-S206,为下一个byte构建节点。继续上述示例,读取预定关键词“北京市”的byte数组中的下一个byte,即第二个byte“10001100”,然后过程进行至S203,重复步骤S203-S207,为第二个byte“10001100”构建节点。
在S208中,将当前节点的状态标识为“结束”状态。在一种实施方式中,当前节点设置有默认值为0的状态标识符,在将当前节点标识为“结束”时,将此状态标识符设置为3。当前节点被设置为“结束”之后,过程进行至S209,记录该路由的完整字符串。在上述示例中,当“北京市”的byte数组中的最后一个byte“10000010”被序列化进入Trie树之后,表示关键词“北京市”已经全部序列化进入Trie树,过程进行至S209,记录该路由的完整字符串。
在S209,记录该路由的完整字符串。当前节点被标识为结束节点,表示从根节点到当前节点的路由路径就是一条完整的关键词,当前节点记录该关键词的值。在上述示例中,从根节点开始,每个层级的子节点所记录的索引值依次拼成路由路径229-140-151-228-186-172-229-184-130。在一种实施方式中,可以通过与255进行“与”运算的逆运算,求得每个层级的byte。将路径上对应的byte逆运算求得UTF-8代码,按顺序拼成字符串“北京市”。
在S210,判断该关键词是否是预定关键词集合中的最后一个关键词。如果是,表示所有预定关键词已经序列化进入Trie树,过程进行到S210生成Trie树完成;如果否,表示需要将下一个关键词序列化进入Trie树,过程跳转至S201从读取下一个关键词的第一个byte开始,重新执行过程的步骤S202-S209,包括S211和S212。在上述示例中,经判断,“北京市”不是预定关键词集合中的最后一个关键词,过程进行至S201,读取下一个关键词“北平市”的第一个byte,重复Trie树生成过程。当“北平市”的最后一个byte被序列化进入Trie树之后,经判断,“北平市”是整个预定关键词集合中的最后一个关键词,因此过程进入S210,生成Trie树完成。
图3是根据本发明实施方式的构建完成的Trie树的示意图。如图所示,根据本发明的实施方式的Trie树是具有层级结构的255叉树。根节点是一个头结点,根节点具有255个子节点。在生成子节点时,第1层子节点中的每一个子节点的下一级子节点又是255个下一级子节点,也就是说255个第2层子节点。以此类推,每个节点都具有255个子节点。图3中节点的索引值即为所读取的关键词byte数组中的每个byte与255进行“与”运算求得的索引值,以灰度被标识为“存在”。图中标识为“结束”的节点即为结束节点,表示从根节点到该节点的整个路由代表一个关键词,其他被标识为“跳转”的非空子节点即为跳转节点。当下文的匹配过程失败后直接跳转回到根节点。
图4是根据本发明实施方式的构建完成的Trie树的数组表示。如前所述,在优选的实施方式中,可以用数组来存储Trie树。在这种实施方式中,Trie树从根节点开始,根节点是一个头结点。第1层子节点被存储为长度为255的数组。第1层子节点中每一个子节点的下一级子节点又是255个第2层子节点,该255个第2层子节点也被表示为长度为255的数组。图4中以灰度标识的数组元素中的索引值即为相应的byte与255进行“与”运算求得的索引值,以灰度被标识为“存在”。
表3关键词“北海市”
图5是根据本发明实施方式的Trie树关键词匹配流程的流程图。继续上面的示例,例如传入的文本为“北海市”。
在S501中,读入传入的文本“北海市”。在各种实施方式中,传入的文本可以来自用户输入,例如搜索框中的用户输入;或者来自文章中的关键字;或者是从其他存储单元或者其他应用导入的文本。过程进行至步骤S502。
在S502中,将传入的文本词转换成byte数组。如表3,在以byte数组存储的实施方式中,关键词“北海市”的UTF-8编码表示为“e5-8c-97(北)”“e6-b5-b7(海)”“e5-b8-82(市)”。将关键词“北海市”的UTF-8编码转换成二进制byte表示,获得传入的文本“北海市”的byte数组。过程进行至步骤S503。
在S503中,读取传入的文本词的byte数组中的第一个byte。继续上面的示例,读取“北海市”的byte数组中的第一个byte“11100101”。过程进行至步骤S504。
在S504中,将匹配层设置为已生成Trie树的根节点下面的第一层。可以将“匹配层”看作一个变量,用于定位正在计算匹配的节点层。在一种实施方式中,可以将“匹配层”实现为指针,指向正在计算匹配的节点层。在另一种实施方式中,可以将“匹配层”实现为计数器,每次用于匹配的节点下移一层,将该计数器加1,或用于跳转至所匹配的节点层。也可以使用其它实施方式。继续上述示例,将“匹配层”设置为1,表示Trie树的第1层。然后过程进行至步骤S505。
在S505中,获取所读取到的传入的文本的索引值。继续上述示例,获取到byte“11100101”的索引值为229。过程进行至步骤S506,判断与该索引值相对应的子节点是否存在。
在S506中,判断在匹配层节点中,与所获取到的索引值相对应的子节点是否存在。如果存在,表示存在相同路径、相同序列的相同byte,也就是说该节点所代表的关键词byte与所读取的传入的文本的当前byte具有相同前缀,过程进行至步骤S507,在下一个动作之前判断节点是否为“结束”节点;如果不存在,表示不存在相同路径、相同序列的相同byte,到所读取的传入的文本的当前byte为止,传入的文本与关键词集合中的关键词都不同,未找到匹配字符串,过程进行至S513。继续上述示例,在“匹配层”为1,也就是Trie树的第一层的子节点中,与索引值“229”相对应的子节点存在,过程进行至S507。
在S507中,判断该节点状态是否为“结束”状态。如果该节点为“结束”状态,则表示传入的文本与该条路径的关键词相匹配,过程进行至S508;如果该节点不是“结束状态”,则表示还需要进一步匹配,过程进行至S509。继续上述示例,Trie树的第一层子节点中,与索引值“229”相对应的子节点不是“结束”状态,过程进行至S509。
在S508中,记录该路由的匹配字符串。
在S509中,判断传入的文本的byte数组是否已经取完。如果是,表示传入的文本中没有需要进一步匹配的byte,可以输出匹配结果,过程进行至S514;如果否,表示传入的文本中还有需要进一步匹配的byte,过程进行至S510。继续上述示例,经判断,传入的文本“北海市”的byte数组尚未取完,过程进行至S510。
在S510中,判断命中节点是否还有下一层子节点。如果是,表示可以继续匹配;如果否,表示这个关键字已经匹配完成,然而传入的文本如果还有后续的其它传入的文本词,就跳转回根节点重新开始下一个传入的文本词的匹配流程。
在S511中,经过S510判断命中节点还有下一层子节点,则需要继续匹配下一层子节点,在此将“匹配层”设置为命中节点的下一层。如前文所述,可以将“匹配层”指针下移,或者将“匹配层”计数器加1。继续上述示例,经判断命中节点“第1层,229,跳转”还有下一层子节点,则将“匹配层”设置为2,即根节点之下第二层。过程进行至S512,读取传入的文本的下一个byte。
在S512中,读取传入的文本的下一个byte。继续上述示例,读取传入的文本“北海市”的下一个byte“10001100”,过程进行至S505重新开始循环,对byte“10001100”进行匹配。
在S513中,记录“未找到匹配字符串”。继续上面的示例,从表1、表2和表3可以看出,“北海市”与预定关键词“北京市”、“北平市”具有相同的byte前缀,也就是说,匹配过程进行至“北海市”的第4个byte开始出现分歧。如表3,如果在Trie树中存在“北海市”的第4个byte,则其应该对应“第4层,230,存在”子节点。匹配过程针对“北海市”的第4个byte进行匹配,在“第3层,151,跳转”节点的子节点中,判断不存在“第4层,230,存在”的子节点。至此,可以判断关键词集合中不存在“北海市”的字符串,整个匹配过程进行至S513,记录“未找到匹配字符串”。
在以长度为255的数组存储节点的实施方式中,该发明每个节点的子节点都是一个255个节点的数组,因此空间复杂度为O(255*N),数组通过索引获取数据的时间复杂度为O(1),因此整个文本的匹配时间复杂度为O(N),提升空间复杂度,换来的是优秀的时间复杂度,以空间换取时间。
根据本发明的实施例,本发明还提供了一种电子设备和一种可读存储介质。
本发明的电子设备包括:至少一个处理器;以及,与所述至少一个处理器通信连接的存储器;其中,所述存储器存储有可被所述一个处理器执行的指令,所述指令被所述至少一个处理器执行,以使所述至少一个处理器执行本发明所提供的的方法。
本发明的非暂态计算机可读存储介质,所述非暂态计算机可读存储介质存储计算机指令,所述计算机指令用于使所述计算机执行本发明所提供的用于基于Aho-Corasick的Trie树多关键词匹配的方法。
如图6所示,是用来实现本发明实施例的用于基于Aho-Corasick的Trie树多关键词匹配的方法的电子设备的硬件结构示意图。如图6,该电子设备包括:一个或多个处理器61以及存储器62,图6中以一个处理器61为例。其中,存储器62即为本发明所提供的非暂态计算机可读存储介质。
用于基于Aho-Corasick的Trie树多关键词匹配的方法的电子设备还可以包括:输入装置63和输出装置64。
处理器61、存储器62、输入装置63和输出装置64可以通过总线或者其他方式连接,图6中以通过总线连接为例。
存储器62作为一种非暂态计算机可读存储介质,可用于存储非暂态软件程序、非暂态计算机可执行程序以及模块,如本发明实施例中的用于基于Aho-Corasick的Trie树多关键词匹配的方法对应的程序指令/模块(例如,附图1所示的关键词加载器11、Trie树生成器12和关键词匹配器13)。处理器61通过运行存储在存储器62中的非暂态软件程序、指令以及模块,从而执行服务器的各种功能应用以及数据处理,即实现上述方法实施例中的用于基于Aho-Corasick的Trie树多关键词匹配的方法。
存储器62可以包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需要的应用程序;存储数据区可存储根据用于基于Aho-Corasick的Trie树多关键词匹配的装置的使用所创建的数据等。此外,存储器62可以包括高速随机存取存储器,还可以包括非暂态存储器,例如至少一个磁盘存储器件、闪存器件、或其他非暂态固态存储器件。在一些实施例中,存储器62可选包括相对于处理器61远程设置的存储器,这些远程存储器可以通过网络连接至用于基于Aho-Corasick的Trie树多关键词匹配的装置。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。
输入装置63可接收输入的数字或字符信息,以及产生与用于基于Aho-Corasick的Trie树多关键词匹配的装置的用户设置以及功能控制有关的键信号输入。输出装置64可包括显示屏等显示设备。
所述一个或者多个模块存储在所述存储器62中,当被所述一个或者多个处理器61执行时,执行上述任意方法实施例中的用于基于Aho-Corasick的Trie树多关键词匹配的方法。
上述产品可执行本发明实施例所提供的方法,具备执行方法相应的功能模块和有益效果。未在本实施例中详尽描述的技术细节,可参见本发明实施例所提供的方法。
上述具体实施方式,并不构成对本发明保护范围的限制。本领域技术人员应该明白的是,取决于设计要求和其他因素,可以发生各种各样的修改、组合、子组合和替代。任何在本发明的精神和原则之内所作的修改、等同替换和改进等,均应包含在本发明保护范围之内。
Claims (12)
1.一种用于基于Aho-Corasick的Trie树多关键词匹配的方法,其特征在于,所述方法包括:
获取预定关键词中每个字的编码,将所述预定关键词中每个字的所述编码转化为相对应的以二进制表示的byte;
将与所述预定关键词中每个字的编码相对应的byte序列化以生成Trie树;以及
利用所生成的Trie树,将与待匹配的所传入的文本中每个字的编码相对应的byte序列化,以对待匹配的所传入的文本进行匹配;
其中,序列化包括:
对每个byte进行处理,求取与所述byte对应的索引值;
基于所求取的所述索引值确定与所述byte相对应的节点在所述Trie树中的位置。
2.根据权利要求1所述的方法,其特征在于,其中,对所述byte求取索引值包括:
将所述byte与和整数255相对应的二进制的byte进行“与”运算,得到的正整数值作为索引值。
3.根据权利要求1所述的方法,其特征在于,其中,所生成的Trie树的每个层级有255个节点。
4.根据权利要求3所述的方法,其特征在于,其中,所生成的Trie树的每个层级的255个节点用长度为255的数组来表示。
5.根据权利要求3所述的方法,其特征在于,其中,每个节点被表示为“层级、索引、状态”三元组。
6.一种用于基于Aho-Corasick的Trie树多关键词匹配的系统,其特征在于,包括:
关键词加载器,所述关键词加载器被配置成获取预定关键词,其中,所获取的预定关键词中每个字的编码被转化为相对应的以二进制表示的byte;
Trie树生成器,所述Trie树生成器被配置成将与所述预定关键词中每个字的编码相对应的byte序列化以生成Trie树;以及
关键词匹配器,所述关键词匹配器被配置获取待匹配的所传入的文本,利用所生成的Trie树,将与所述待匹配的所传入的文本中每个字的编码相对应的byte序列化,以对待匹配的所传入的文本进行匹配;
其中,序列化包括:
对每个byte进行处理,求取所述byte对应的索引值;
基于所求取的所述索引值确定与所述byte相对应的节点在所述Trie树中的位置。
7.根据权利要求6所述的系统,其特征在于,其中,对所述byte求取索引值包括:
将所述byte与和整数255相对应的二进制的byte进行“与”运算,得到的正整数值作为索引值。
8.根据权利要求6所述的系统,其特征在于,其中,所生成的Trie树的每个层级有255个节点。
9.根据权利要求8所述的系统,其特征在于,其中,所生成的Trie树的每个层级的255个节点用长度为255的数组来表示。
10.根据权利要求8所述的系统,其特征在于,其中,每个节点被表示为“层级、索引、状态”三元组。
11.一种电子设备,其特征在于,包括:
一个或多个处理器;
存储装置,用于存储一个或多个程序,
当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现如权利要求1-5中任一所述的方法。
12.一种计算机可读介质,其上存储有计算机程序,其特征在于,所述程序被处理器执行时实现如权利要求1-5中任一所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710181879.8A CN108628907B (zh) | 2017-03-24 | 2017-03-24 | 一种用于基于Aho-Corasick的Trie树多关键词匹配的方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710181879.8A CN108628907B (zh) | 2017-03-24 | 2017-03-24 | 一种用于基于Aho-Corasick的Trie树多关键词匹配的方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN108628907A CN108628907A (zh) | 2018-10-09 |
CN108628907B true CN108628907B (zh) | 2021-09-17 |
Family
ID=63707571
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201710181879.8A Active CN108628907B (zh) | 2017-03-24 | 2017-03-24 | 一种用于基于Aho-Corasick的Trie树多关键词匹配的方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN108628907B (zh) |
Families Citing this family (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109524068A (zh) * | 2018-10-16 | 2019-03-26 | 东华大学 | 一种基于ac自动机的疾病症状提取方法 |
CN109558521A (zh) * | 2018-11-28 | 2019-04-02 | 南京中孚信息技术有限公司 | 大规模关键词多模匹配方法、装置以及设备 |
CN111309970A (zh) * | 2020-03-27 | 2020-06-19 | 北京奇艺世纪科技有限公司 | 一种数据检索方法、装置、电子设备及存储介质 |
CN115438145B (zh) * | 2022-04-13 | 2024-05-14 | 盐城天眼察微科技有限公司 | 企业详情内链的添加方法及装置 |
CN117112684A (zh) * | 2023-07-18 | 2023-11-24 | 河北信服科技有限公司 | 基于物联网的数字化可视化分析系统及方法 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101499094A (zh) * | 2009-03-10 | 2009-08-05 | 焦点科技股份有限公司 | 一种数据压缩存储并检索的方法及系统 |
CN105183788A (zh) * | 2015-08-20 | 2015-12-23 | 及时标讯网络信息技术(北京)有限公司 | 一种基于关键词字典树检索的中文ac自动机工作方法 |
CN105260354A (zh) * | 2015-08-20 | 2016-01-20 | 及时标讯网络信息技术(北京)有限公司 | 一种基于关键词字典树构造的中文ac自动机工作方法 |
CN106446232A (zh) * | 2016-10-08 | 2017-02-22 | 深圳市彬讯科技有限公司 | 一种基于规则的敏感文本过滤方法 |
Family Cites Families (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN100444167C (zh) * | 2005-12-21 | 2008-12-17 | 中国科学院计算技术研究所 | 完美双数组trie树词典管理与检索方法 |
CN101788990A (zh) * | 2009-01-23 | 2010-07-28 | 北京金远见电脑技术有限公司 | Trie树双数组的全局优化构造方法及系统 |
CN102651026B (zh) * | 2012-04-01 | 2015-02-18 | 百度在线网络技术(北京)有限公司 | 通过预计算优化搜索引擎分词的方法及搜索引擎分词装置 |
US9798721B2 (en) * | 2015-05-15 | 2017-10-24 | King Abdulaziz City For Science And Technology | Innovative method for text encodation in quick response code |
-
2017
- 2017-03-24 CN CN201710181879.8A patent/CN108628907B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101499094A (zh) * | 2009-03-10 | 2009-08-05 | 焦点科技股份有限公司 | 一种数据压缩存储并检索的方法及系统 |
CN105183788A (zh) * | 2015-08-20 | 2015-12-23 | 及时标讯网络信息技术(北京)有限公司 | 一种基于关键词字典树检索的中文ac自动机工作方法 |
CN105260354A (zh) * | 2015-08-20 | 2016-01-20 | 及时标讯网络信息技术(北京)有限公司 | 一种基于关键词字典树构造的中文ac自动机工作方法 |
CN106446232A (zh) * | 2016-10-08 | 2017-02-22 | 深圳市彬讯科技有限公司 | 一种基于规则的敏感文本过滤方法 |
Also Published As
Publication number | Publication date |
---|---|
CN108628907A (zh) | 2018-10-09 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN108628907B (zh) | 一种用于基于Aho-Corasick的Trie树多关键词匹配的方法 | |
CN111460311A (zh) | 基于字典树的搜索处理方法、装置、设备和存储介质 | |
CN111868710B (zh) | 搜索大规模非结构化数据的随机提取森林索引结构 | |
CN107153647B (zh) | 进行数据压缩的方法、装置、系统和计算机程序产品 | |
KR20130062889A (ko) | 데이터 압축 방법 및 시스템 | |
Fu et al. | Privacy-preserving smart similarity search based on simhash over encrypted data in cloud computing | |
US9754050B2 (en) | Path-decomposed trie data structures | |
Awad et al. | Chaotic searchable encryption for mobile cloud storage | |
CN104283567A (zh) | 一种名称数据的压缩、解压缩方法及设备 | |
US10275486B2 (en) | Multi-system segmented search processing | |
US20160103858A1 (en) | Data management system comprising a trie data structure, integrated circuits and methods therefor | |
CN111339382A (zh) | 字符串数据检索方法、装置、计算机设备及存储介质 | |
CN108197313B (zh) | 通过16位Trie树实现空间优化的词典索引方法 | |
US11468096B2 (en) | Database access using a z-curve | |
CN108027816B (zh) | 数据管理系统、数据管理方法及记录介质 | |
US8438166B1 (en) | Pre-computed search results | |
Zhu et al. | SciCSM: novel contrast set mining over scientific datasets using bitmap indices | |
RU2637472C2 (ru) | Способ, устройство и терминал для поиска данных | |
JP2017045291A (ja) | 類似画像検索システム | |
KR101582050B1 (ko) | 블룸 필터 선―검색을 이용한 이름 검색 장치 및 방법 | |
CN112511629A (zh) | 一种mpt结构的账户树的数据压缩方法及系统 | |
CN115292737B (zh) | 一种多关键词模糊搜索加密方法、系统及电子设备 | |
KR101587756B1 (ko) | 블룸 필터 선-검색을 이용한 스트링 정보 검색 장치 및 방법 | |
CN112579839B (zh) | 大规模特征的多模匹配方法、装置及存储介质 | |
Liu et al. | GB-Tree: An efficient LBS location data indexing method |
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 |