CN110362669A - 一种适用于关键字快速检索的算法 - Google Patents
一种适用于关键字快速检索的算法 Download PDFInfo
- Publication number
- CN110362669A CN110362669A CN201910648907.1A CN201910648907A CN110362669A CN 110362669 A CN110362669 A CN 110362669A CN 201910648907 A CN201910648907 A CN 201910648907A CN 110362669 A CN110362669 A CN 110362669A
- Authority
- CN
- China
- Prior art keywords
- state
- function
- output
- failure
- layer
- 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.)
- Granted
Links
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/30—Information retrieval; Database structures therefor; File system structures therefor of unstructured textual data
- G06F16/33—Querying
- G06F16/332—Query formulation
- G06F16/3329—Natural language query formulation or dialogue systems
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/30—Information retrieval; Database structures therefor; File system structures therefor of unstructured textual data
- G06F16/36—Creation of semantic tools, e.g. ontology or thesauri
- G06F16/374—Thesaurus
Landscapes
- Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- Theoretical Computer Science (AREA)
- Computational Linguistics (AREA)
- Data Mining & Analysis (AREA)
- Databases & Information Systems (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Mathematical Physics (AREA)
- Artificial Intelligence (AREA)
- Human Computer Interaction (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开了信息检索技术领域的一种适用于关键字快速检索的算法,包括如下步骤:建立转向函数;建立失效函数;建立输出函数,通过使用哈希方法对压缩节点组织查找表,可以在恒定时间内确定下一个状态,若在压缩节点处失配,不再直接进行状态转移,而是将模式串回退两个字符,从root节点处重新开始匹配,仅比AC拓展算法多了一次状态转移,消除了80%以上的过渡边缘,减少了大量的空间开销,处理速度存在一定程度的提高。
Description
技术领域
本发明涉及信息检索技术领域,具体为一种适用于关键字快速检索的算法。
背景技术
模式匹配一般是指在文本数据中搜索预定义的关键字。模式匹配问题是计算机科学中的一个基本问题,其研究内容在信息检索、模式识别等众多领域均有重要价值,在拼写检查、语言翻译、数据压缩、搜索引擎、入侵检测、内容过滤、计算机病毒特征码匹配以及基因序列比较等应用中起着重要的作用。比如,在一些信息获取、文本编辑应用中,用户会指定些关键字,需要在文本中快速定位关键字的位置。
Aho-Corasick算法(阿霍一克若思克算法,简称AC算法)描述了一种简单有效的算法,能够在任意的文本中定位有限数目的关键字的所有位置。其原理是:首先根据这一系列关键字定义一个有限状态模式匹配机,然后把文本作为模式匹配机的输入。只要匹配到关键字,就会通报本关键字匹配成功。
AC算法在本文中有2个版本称为AC-basic和AC-expanded。 AC-basic由3个函数实现相关功能组成,具体包括 GOTO函数,和输出功能。 GOTO函数用于根据给定模式集的基础字符Trie跟踪正向转换。如果没有为输入字符找到GOTO函数中的有效转换,则自动机转换到由失败函数指定的状态而不消耗输入字符。故障功能和输出功能使用线性阵列实现,而GOTO功能使用链接列表实现。通过将GOTO和失败函数扩展为由当前状态ID和输入字符索引的全尺寸2D转换规则表,可以提高匹配算法的处理速度。 AC-basic和AC-expanded算法代表了时空频谱中的两个极端。 AC扩展具有最快的处理速度,但需要大量的存储空间。 AC-basic的数据结构允许使用最小内存量来表示底层DFA,但其处理速度要慢得多。
基于现有AC-basic和AC-expanded存在的技术缺陷,本发明提出了一种新的AC压缩算法。
发明内容
本发明的目的在于提供一种适用于关键字快速检索的算法,以解决上述背景技术中提出的亟需设计一种关键字快速检索的算法的问题。
为实现上述目的,本发明提供如下技术方案:一种适用于关键字快速检索的算法,包括如下步骤:
步骤一:构建有限状态自动机M,所述有限状态自动机M包含转向函数g,失败函数f和输出函数output,以及compress_states数组;
步骤二:建立转向函数;
步骤三:建立失效函数;
步骤四:建立输出函数。
进一步的,所述转向函数的建立包括以下步骤:
A)定义有关键字集P={p1,p2,p3,···,pn}和函数enter(y),创建第一状态0、状态s和字符a,根据i个模式串,建立字典树,对在字典树第一层不存在的字符,状态0在这些字符上的跳转依然指向状态0,进行状态s与字符a的匹配,并输出函数enter(a1,a2,a3,···,am);
B)设定初始状态为0,模式串的索引为1,判断循环在字典树中是否找到已存在的模式串的相同前缀,是,得到这个前缀的最后一个状态state,否,state=0,前缀后面的第一个字符索引j;
C)将前缀后面的字符加入到字典树中,并进行匹配;
D)若匹配过程跳转到模式串的最后一个状态,说明该模式串匹配成功,输出转向函数g和部分输出函数output。
进一步的,所述失效函数建立包括以下步骤:
S1:输入来自步骤二的转向函数g和输出函数output,初始化队列为空,使字典树的第一层跳转的字符入队,第一层状态的失败函数跳转到状态0;
S2:从第一层开始,广度优先搜索树;
S3:设置状态r的失败跳转和初始化状态s的失败跳转,使状态s的输出一定包含s的失败跳转状态的输出;
S4:得到层L1和L2所有状态L12_ states和压缩状态compress_states,删除压缩状态的失效函数f(compress_states);
S5:遍历第一层状态,入队并加入到L12_ states,遍历第二层状态,加入到L12_states;
S6:如果某个状态的失败跳转指向层L1或L2状态,将它加入到compress_states,并删除它的失败跳转存储。
与现有技术相比,本发明的有益效果是:本发明通过使用哈希方法对压缩节点组织查找表,可以在恒定时间内确定下一个状态,若在压缩节点处失配,不再直接进行状态转移,而是将模式串回退两个字符,从root节点处重新开始匹配,仅比AC拓展算法多了一次状态转移,消除了80%以上的过渡边缘,减少了大量的空间开销,处理速度存在一定程度的提高。
附图说明
为了更清楚地说明本发明实施例的技术方案,下面将对实施例描述所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为同一实施例下现有算法流程图;
图2为同一实施例下本发明流程图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其它实施例,都属于本发明保护的范围。
本发明所述关键字快速检索的总体思路为:在有限状态自动机M中令字符串a1,a2,···ai ···an,ai表示字符串中的第i个字符,有限状态自动机M还包括转向函数g、失败函数f和输出函数output,以及compress_states数组。设置初始状态为0,输入i为遍历字符串的索引;若当前状态的跳转函数中没有值为ai的跳转;进行下一步,若当前状态为0,依然从状态0开始匹配下个字符,若为压缩状态节点,回退2个字符,从0状态匹配,否则由失败函数跳转,当前状态的跳转函数中有值为ai的跳转,由跳转函数跳转;如果当前状态是已经是某模式串的最后一个状态,匹配成功,输出这个模式串即关键词在x中出现的位置。
如下具体进行相关描述。
一种适用于关键字快速检索的算法,包括如下步骤:
步骤一:构建有限状态自动机M,所述有限状态自动机M包含转向函数g,失败函数f和输出函数output,以及compress_states数组;
步骤二:建立转向函数;
步骤三:建立失效函数;
步骤四:建立输出函数。
其中, 转向函数的建立包括以下步骤:
A)定义有关键字集P={p1,p2,p3,···,pn}和函数enter(y),创建第一状态0、状态s和字符a,根据i个模式串,建立字典树,对在字典树第一层不存在的字符,状态0在这些字符上的跳转依然指向状态0,进行状态s与字符a的匹配,并输出函数enter(a1,a2,a3,···,am);
B)设定初始状态为0,模式串的索引为1,判断循环在字典树中是否找到已存在的模式串的相同前缀,是,得到这个前缀的最后一个状态state,否,state=0,前缀后面的第一个字符索引j;
C)将前缀后面的字符加入到字典树中,并进行匹配;
D)若匹配过程跳转到模式串的最后一个状态,说明该模式串匹配成功,输出转向函数g和部分输出函数output。
上述步骤中,约定当状态s首次创建时,output(s)=null,此时若a或g(s,a)未定义,那么g(s,a)=fail,函数enter(y)目的是插入在树上插入一条路径,该路径上的字符拼出单词y。
进一步的,失效函数建立包括以下步骤:
S1:输入来自步骤1)的转向函数g和输出函数output,初始化队列为空,使字典树的第一层跳转的字符入队,第一层状态的失败函数跳转到状态0;
S2:从第一层开始,广度优先搜索树;
S3:设置状态r的失败跳转和初始化状态s的失败跳转,使状态s的输出一定包含s的失败跳转状态的输出;
S4:得到层L1和L2所有状态L12_ states和压缩状态compress_states,删除压缩状态的失效函数f(compress_states);
S5:遍历第一层状态,入队并加入到L12_ states,遍历第二层状态,加入到L12_states;
S6:如果某个状态的失败跳转指向层L1或L2状态,将它加入到compress_states,并删除它的失败跳转存储,输出失效函数f、输出函数output、compress_states。
针对样本模式集{“able”,“apps”,“are”,“dial”,“diary”,“iambic”},图1为的AC全拓展的转换图,图2是对应的AC压缩算法的转换图。
从图2可见,通过压缩节点与根的距离来定义转换图中节点的级别,根在L0上,从根开始1跳的节点在L1上,依此类推,从L2或以上节点(节点4到21)指向L0-L2节点的过渡边缘被消除,可以看出,该算法减少了大量的空间开销,在该方法中,除了字符的前沿之外,对于L2及以上的节点,仅需要从节点12到节点13和从节点17到节点11的2个过渡边缘。
另外,Root和L1节点未压缩,若节点过渡边缘指向L0—L2节点则被压缩,并且通过选择合适的m(哈希表大小)和f(哈希函数),将其组织在近乎最小的完美哈希表中,哈希函数基于简单的乘法方法,如果节点未压缩,如图1所示,则其所有256个转换边都存储在直接索引表中。
本方案以最小的处理速度牺牲来压缩AC扩展的全过渡图,故需要减少在数据结构中存储量大但对性能提升效果不明显的过渡边,实验统计大部分AC拓展树中有80%以上的过渡边缘转向前两层节点,其中大部分转向root节点,这些过渡边缘对匹配效率的提升效果也不明显,于是需要消除这部分边缘,边缘被消除的节点称为压缩节点
需要特别说明的是,本发明提供的附图仅显示了21个节点的图示,这并不代表本发明仅能用于21个节点的关键词检索,本发明给出的图示仅用于理解本发明所述的技术方案,本发明说技术方案可应用于任意多节点的关键词检索。
在本说明书的描述中,参考术语“一个实施例”、“示例”、“具体示例”等的描述意指结合该实施例或示例描述的具体特征、结构、材料或者特点包含于本发明的至少一个实施例或示例中。在本说明书中,对上述术语的示意性表述不一定指的是相同的实施例或示例。而且,描述的具体特征、结构、材料或者特点可以在任何的一个或多个实施例或示例中以合适的方式结合。
以上公开的本发明优选实施例只是用于帮助阐述本发明。优选实施例并没有详尽叙述所有的细节,也不限制该发明仅为所述的具体实施方式。显然,根据本说明书的内容,可作很多的修改和变化。本说明书选取并具体描述这些实施例,是为了更好地解释本发明的原理和实际应用,从而使所属技术领域技术人员能很好地理解和利用本发明。本发明仅受权利要求书及其全部范围和等效物的限制。
Claims (1)
1.一种适用于关键字快速检索的算法,其特征在于,包括如下步骤:
步骤一:构建有限状态自动机M,所述有限状态自动机M包含转向函数g,失败函数f和输出函数output,以及compress_states数组;
步骤二:建立转向函数;
(1)定义有关键字集P={p1,p2,p3,···pi···,pn}和函数enter(y),创建第一状态0、状态s和字符a,根据i个模式串,建立字典树,对在字典树第一层不存在的字符,状态0在这些字符上的跳转依然指向状态0,进行状态s与字符a的匹配,并输出函数enter(a1,a2,a3,···ai···,am);
(2)设定初始状态为0,模式串的索引为1,判断循环在字典树中是否找到已存在的模式串的相同前缀,如果为是,得到这个前缀的最后一个状态state,如果为否,state=0,前缀后面的第一个字符索引j;
(3)将前缀后面的字符加入到字典树中,并进行匹配;
(4)若匹配过程跳转到模式串的最后一个状态,说明该模式串匹配成功,输出转向函数g和输出函数output;
步骤三:建立失效函数;
(1)输入来自步骤二的转向函数g和输出函数output,初始化队列为空,使字典树的第一层跳转的字符入队,第一层状态的失败函数跳转到状态0;
(2)从第一层开始,广度优先搜索树;
(3)设置状态r的失败跳转和初始化状态s的失败跳转,使状态s的输出一定包含s的失败跳转状态的输出;
(4)得到层L1和L2所有状态L12_ states和压缩状态compress_states,删除压缩状态的失效函数f(compress_states);
(5)遍历第一层状态,入队并加入到L12_ states,遍历第二层状态,加入到L12_states;
(6)如果某个状态的失败跳转指向层L1或L2状态,将它加入到compress_states,并删除它的失败跳转存储;
步骤四:建立输出函数并输出。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910648907.1A CN110362669B (zh) | 2019-07-18 | 2019-07-18 | 一种适用于关键字快速检索的方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910648907.1A CN110362669B (zh) | 2019-07-18 | 2019-07-18 | 一种适用于关键字快速检索的方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110362669A true CN110362669A (zh) | 2019-10-22 |
CN110362669B CN110362669B (zh) | 2022-07-01 |
Family
ID=68220575
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910648907.1A Active CN110362669B (zh) | 2019-07-18 | 2019-07-18 | 一种适用于关键字快速检索的方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110362669B (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113010882A (zh) * | 2021-03-18 | 2021-06-22 | 哈尔滨工业大学 | 一种适用于缓存丢失攻击的自定义位置顺序模式匹配算法 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20030074184A1 (en) * | 2001-10-15 | 2003-04-17 | Hayosh Thomas E. | Chart parsing using compacted grammar representations |
CN105426412A (zh) * | 2015-11-03 | 2016-03-23 | 北京锐安科技有限公司 | 多模式的串匹配方法和装置 |
CN109933656A (zh) * | 2019-03-15 | 2019-06-25 | 深圳市赛为智能股份有限公司 | 舆情极性预测方法、装置、计算机设备及存储介质 |
-
2019
- 2019-07-18 CN CN201910648907.1A patent/CN110362669B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20030074184A1 (en) * | 2001-10-15 | 2003-04-17 | Hayosh Thomas E. | Chart parsing using compacted grammar representations |
CN105426412A (zh) * | 2015-11-03 | 2016-03-23 | 北京锐安科技有限公司 | 多模式的串匹配方法和装置 |
CN109933656A (zh) * | 2019-03-15 | 2019-06-25 | 深圳市赛为智能股份有限公司 | 舆情极性预测方法、装置、计算机设备及存储介质 |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113010882A (zh) * | 2021-03-18 | 2021-06-22 | 哈尔滨工业大学 | 一种适用于缓存丢失攻击的自定义位置顺序模式匹配算法 |
Also Published As
Publication number | Publication date |
---|---|
CN110362669B (zh) | 2022-07-01 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Gueniche et al. | Compact prediction tree: A lossless model for accurate sequence prediction | |
US7756859B2 (en) | Multi-segment string search | |
Lovins | Development of a stemming algorithm | |
Wang et al. | Language-independent set expansion of named entities using the web | |
US20120323877A1 (en) | Enriched Search Features Based In Part On Discovering People-Centric Search Intent | |
US20090089047A1 (en) | Natural Language Hypernym Weighting For Word Sense Disambiguation | |
Giancarlo | A generalization of the suffix tree to square matrices, with applications | |
Aoe et al. | A trie compaction algorithm for a large set of keys | |
JP2008299867A (ja) | データ構造によるコンピュータ表現及びそれに関連する符号化/復号化方法 | |
JP2007080259A (ja) | 2工程n−gram索引構造及びその構築方法とクエリ処理方法及びその索引導出方法 | |
US11423093B2 (en) | Inter-document attention mechanism | |
Bille et al. | Dynamic relative compression, dynamic partial sums, and substring concatenation | |
KR102188431B1 (ko) | 몬테카를로 트리 검색 기반의 속성 선택 방법 및 장치 | |
CN105243083B (zh) | 文档主题挖掘方法及装置 | |
KR20160016795A (ko) | 이중 언어 코퍼스의 데이터를 확충하는 방법, 장치 및 장치 및 저장 매체 | |
CN107679035A (zh) | 一种信息意图检测方法、装置、设备和存储介质 | |
Spector et al. | Bounding the last mile: Efficient learned string indexing | |
CN105404677A (zh) | 一种基于树形结构的检索方法 | |
CN110362669A (zh) | 一种适用于关键字快速检索的算法 | |
CN111177578A (zh) | 一种用户周边最具影响力社区的搜索方法 | |
CN106021371A (zh) | 一种事件识别方法及系统 | |
Valtchev et al. | A framework for incremental generation of frequent closed itemsets | |
CN103544167A (zh) | 一种基于中文检索的逆向分词方法及装置 | |
CN105426490A (zh) | 一种基于树形结构的索引方法 | |
KR102146625B1 (ko) | 오토마타 기반 증분적 중위 확률 계산 장치 및 방법 |
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 |