一种基于关键词字典树构造的中文ac自动机工作方法_3

文档序号:9506163阅读:来源:国知局
*26),26是子节点hash表的大小。汉字转化成字符在linux下为3个字符,字符的取值范围为0?255,则时间复杂度为(N*3L+3K),空间复杂度为(M*3K*255)。
[0082]而在本发明的技术方案中,对于任一节点I,必然存在一个区间[P,Q],使得除了这个区间外没有它的子节点,并且区间内全是它的子节点,即区间[p,Q]与节点I的子节点集合完全相等。因此,我们可以在判断上舍弃了哈希表,把空间复杂度降到0(2*M*3K),每次判断子节点是需要判断256次,此时时间复杂度为0(256*3* (N*L+K))。本发明相对于现有技术的空间复杂度降低了 0(M*K*759),即压缩了 99.22%的工作占用空间。
[0083]在另一个实施例中,可以将中文的汉字转化为拼音,汉字转化成拼音一般为2?6个字母,这里取4。此时,时间复杂度为0 (N*4L+4K),空间复杂度为0 (M*4K*26),同样起到了降低空间复杂度的效果。但是一样的字母组成的话多种多样,此算法需要匹配后再实际比对文字是否相同,所以时间复杂度为0 (K* (N*4L+4K))。
[0084]综上所述,借助于本发明的上述技术方案,通过将关键词按顺序排列加入字典树中的技术方案,有效地将具有相同前缀的关键词排布在字典树中相邻的位置,使用连续的区间代替离散的节点,原本需要记录所有的节点,现在改为只需记录连续区间的头尾节点,使得节点对查询其子节点所在位置的信息量被大幅度压缩,避免使用占用大量空间复杂度的哈希表,因此降低了中文AC自动机工作时需要的空间复杂度,压缩了中文AC自动机的工作占用空间。
[0085]所属领域的普通技术人员应当理解:以上所述仅为本发明的具体实施例而已,并不用于限制本发明,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
【主权项】
1.一种基于关键词字典树构造的中文AC自动机工作方法,其特征在于,包括: 获取所有关键词,将所有所述关键词编码,并将所有所述关键词按其关键词编码的字符顺序排列; 建立字典树,并将所有所述关键词按字符排列顺序加入所述字典树中; 为所述字典树中的每个非虚根节点加入前缀指针; 为所述字典树中的每个非虚根节点加入失败指针; 获取待检测文章,根据包括前缀指针与错误指针的字典树在所述待检测文章中查询并记录下所有的关键词。2.根据权利要求1所述的一种基于关键词字典树构造的中文AC自动机工作方法,其特征在于,将所有所述关键词编码,为将所有所述关键词按照指定的汉字编码方式以数字组合的形式表示;将所有所述关键词按其关键词编码的字符顺序排列,为将所有所述关键词按其编码后每个字符所对应数字的大小顺序对所有关键词进行排列。3.根据权利要求2所述的一种基于关键词字典树构造的中文AC自动机工作方法,其特征在于,所述数字组合为十六进制数字的数字组合;所述指定的汉字编码方式为以下之一:GB2312、GBK、BIG5、UTF-8。4.根据权利要求2所述的一种基于关键词字典树构造的中文AC自动机工作方法,其特征在于,所述建立字典树为指定一虚根,并根据所述虚根建立字典树。5.根据权利要求4所述的一种基于关键词字典树构造的中文AC自动机工作方法,其特征在于,将所有所述关键词按字符排列顺序加入所述字典树中包括: 根据字符排列顺序依次指定每个关键词; 为被指定的关键词建立一个树枝,并为被指定的关键词编码的每一位在树枝上建立一个节点,每一位都是其前一位的子节点,每一位都是其后一位的父节点,父子节点在树枝上相邻; 从虚根开始,将所述指定的关键词的树枝与现有所述字典树上字符相同的节点合并,直到出现不同的节点为止; 依次指定每个关键词直到所有所述关键词均加入所述字典树中。6.根据权利要求5所述的一种基于关键词字典树构造的中文AC自动机工作方法,其特征在于,包括: 为被指定的关键词编码的每一位在树枝上建立一个节点,为最后一位建立一个终止节点,为最后一位之外的每一个其他位建立一个内部节点; 将所述指定的关键词的树枝与现有所述字典树上字符相同的节点合并,为将内部节点与内部节点合并为内部节点,将终止节点与内部节点合并为终止节点,将终止节点与终止节点合并为终止节点。7.根据权利要求5所述的一种基于关键词字典树构造的中文AC自动机工作方法,其特征在于,为被指定的关键词编码的每一位在树枝上建立一个节点时,按照编码从首位到末位的顺序建立节点,先建立父节点后建立子节点,且为每个节点赋予编号,其中,所述每个非虚根节点的编号为关键词加入字典树的过程中该节点被创建的顺序数字,所述虚根编号为零。8.根据权利要求7所述的一种基于关键词字典树构造的中文AC自动机工作方法,其特征在于,为所述字典树中的每个非虚根节点加入前缀指针包括: 根据节点编号顺序依次指定所述每个非虚根节点; 若被指定的所述非虚根节点为虚根的子节点,则为被指定的所述非虚根节点加入一根指向虚根的前缀指针; 若被指定的所述非虚根节点不是虚根的子节点,则记录下被指定的所述非虚根节点的父节点连接到所述非虚根节点的树枝方向,并为被指定的所述非虚根节点加入一根指向所述非虚根节点的父节点的父节点的与所述树枝方向相同的子节点的前缀指针; 依次指定所述每个非虚根节点直到所有所述非虚根节点均具有前缀指针。9.根据权利要求7所述的一种基于关键词字典树构造的中文AC自动机工作方法,其特征在于,为所述字典树中的每个非虚根节点加入失败指针包括: 根据节点编号顺序依次指定所述每个非虚根节点; 分别对于每一个被指定的节点,根据节点编号的数字进位制依次指定可能出现的每个数字; 检查被指定的所述非虚根节点是否为一个具有指定子节点的父节点,其中,该非虚根父节点到该子节点的树枝方向数字与被指定的数字相同,若否,则给被指定的所述非虚根节点建立一个收到被指定的数字后的错误指针; 分别对于每一个被指定的节点,依次指定每个数字直到进位制中的所有数字均被指定过; 依次指定所述每个非虚根节点直到所有所述非虚根节点均具有失败指针。10.根据权利要求9所述的一种基于关键词字典树构造的中文AC自动机工作方法,其特征在于,给被指定的所述非虚根节点建立一个收到被指定的数字后的错误指针,所述非虚根节点在收到所述被指定的数字后会按照所述错误指针的指向方向确定后续状态。
【专利摘要】本发明公开了一种基于关键词字典树构造的中文AC自动机工作方法,包括:获取所有关键词,将所有关键词编码,并将所有关键词按其关键词编码的字符顺序排列;建立字典树,并将所有关键词按字符排列顺序加入字典树中;为字典树中的每个非虚根节点加入前缀指针;为字典树中的每个非虚根节点加入失败指针;获取待检测文章,根据包括前缀指针与错误指针的字典树在待检测文章中查询并记录下所有的关键词。本发明通过将关键词按顺序排列加入字典树中的技术方案,有效地将具有相同前缀的关键词排布在字典树中相邻的位置,使得节点对查询其子节点所在位置的信息量被大幅度压缩,降低了中文AC自动机的工作占用空间。
【IPC分类】G06F17/27
【公开号】CN105260354
【申请号】CN201510515497
【发明人】司冰
【申请人】及时标讯网络信息技术(北京)有限公司
【公开日】2016年1月20日
【申请日】2015年8月20日
当前第3页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1