快速内容分析的多关键词匹配方法组成比例

技术编号:2871083 阅读:161 留言:0更新日期:2012-04-11 18:40
一种快速内容分析的多关键词匹配方法,是一种基于哈夫曼编码的多关键词匹配算法;其特征在于,包括如下步骤:    1)对关键词进行预处理;    2)根据字符在关键词中出现的概率,建立每个字符的哈夫曼编码,然后把每个关键词编码为一个整数;    3)使用全部关键词建立一张检测表;    4)对文本进行扫描;    5)使用该检测表,快速的进行文本内容分析。(*该技术在2022年保护过期,可自由使用*)

【技术实现步骤摘要】

本专利技术属于内容分析领域,特别涉及一种。
技术介绍
多关键词匹配(Keywords Matching)有时也称为多模式匹配(MultiplePattern Matching)或者字典匹配(Directory Matching、Set Matching),是一个经典的算法问题,它研究从大量数据中快速匹配多个关键词(多个模式)的技术。关键词匹配算法根据对文本还是模式进行预先处理分为索引方案和非索引方案。索引方案可以对文本先进行预先处理,再进行关键词匹配。我们主要考虑是非索引方案。这种方案由于不需要对搜索文本进行预处理,所以是网络信息监控系统的核心算法。到2002年,研究报告表明算法只能处理1Gbps带宽的数据。但是网络带宽发展速度远远快于计算机硬件发展速度,实时信息检测必须同时依靠算法改进和硬件发展。当前G带宽网络下信息监控、入侵检测系统还没有很好的方案。在保证较低误报率和漏报率下有效处理网络数据流的问题还需要进一步研究。
技术实现思路
本专利技术的目的在于,提供一种,该方法能够快速处理大量关键词。本专利技术一种,是一种基于哈夫曼编码的多关键词匹配算法;其特征在于,包括如下步骤1)对关键词进行预处理;2)根据字符在关键词中出现的概率,建立每个字符的哈夫曼编码,然后把每个关键词编码为一个整数;3)使用全部关键词建立一张检测表;4)对文本进行扫描;5)使用该检测表,快速的进行文本内容分析。其中步骤4)所述的对文本进行扫描哈夫曼从左往右一边扫描文本一边把这部分文本编码为一个整数,再使用一个检测表来判断是否匹配了任何一个关键词。具体实施例方式我们设计的一种基于哈夫曼编码的多关键词匹配(Huff-Match)算法是基于曼编码编码方式(Huffman code)的多关键词匹配算法。在预处理阶段,Huff-Match先根据字符在关键词中出现的概率,建立每个字符的Huffman编码,然后把每个关键词编码为一个整数。在扫描阶段,Huff-Match从左往右一边扫描文本一边把这部分文本编码为一个整数。再使用一个检测表来判断是否匹配了任何一个关键词。由于文本任何一个位置的编码整数很容易从前面位置的编码计算出来,所以Huff-Match能够快速处理大量关键词。在实际实现算法时,有一检测表不能太大,所以我们只取编码的一部分来运算,但是最后使用严格匹配来确认关键词的出现。Huff-Match算法最接近的前人工作是SumKim算法。这个算法使用简单的编码同时对关键词和文本进行压缩。Huff-Match则使用Huffman code来压缩关键词,但是不需要对全部文本进行编码。同时Huff-Match工作原来类似于Commentz-Walter algorithm,是从右往左编码关键词的,而SumKim算法没有使用跳跃思想,它是从从左往右编码关键词和文本的。由于Huff-Match同时使用压缩技术和跳跃思想,所以它具有更好的性能。我们使用∑表示字符集合,使用∑*表示字符串(模式),P∈(∑*)*表示多关键词集合,t表示文本,我们使用ti..i+j表示从i到i+j的文本;pi表示模式串。n=|t|,m=|pi|表示的t,pi的长度。r=|P|表示集合P的大小,即关键词个数。pi表示一个关键词,w表示机器字的字节数(对于32位机器,则是4)。为了描述算法方便,假设所有关键词长度相同即|pi|=n;多模式匹配问题就是在文本x中,查询{p1,p2…pr}的全部出现位置。当前多模式匹配问题可以认为属于串处理(String Processing)和组合模式匹配(Combinatorial Pattern Matching)。Huff-Match算法描述Huff-Match分为预处理关键词阶段和执行扫描匹配两个阶段。在现实网络信息监控中,由于关键词集合固定不变,所以预处理只进行一次,但是可以在多次文本匹配中重复使用。所以考虑算法性能时,一般不计算预处理的时间。为了描述算法简单,我们假定所有关键词的长度是相等。预处理关键词阶段我们建立了Huffman树,从而得到了CodeTable数组后,我们也就知道了任何一个字符的编码和编码长度。从而我们可以把任何一个关键词编码成一个整数。在table3中描述的算法就是把任何字符串编码为一个整数的算法。注意的是这个算法是从右往左对字符串进行编码,同时我们没有考虑溢出处理。使用编码算法我们把全部关键词集合P变换为一个整数集合I。实施例设P={“chin”,”tech”,”echo”},则整数集合I={4073,625,78}.table2中描述了每个关键词和它的编码整数。 将来在扫描匹配阶段,当我们从左往右扫描文本时候,我们希望能够快速的判断当前文本的编码整数是不是出现在关键词的编码整数集合I中,所以我们在预处理阶段定义一个检测表CheckTable。由于Huffman编码是唯一可译码的编码,所以任何不同的字符串编码成的整数一定是不同的。因此在理想情况下,CheckTable表中是不会有任何冲突情况的。我们定义如果关键词i的整数编码是k,则CheckTable等于i+1;如果CheckTable的下标不在编码整数集合I,则相应的项为0。 扫描匹配阶段前面定义了关键词长度为相等的m,每个关键词可以由一个整数编码表示,同时这个整数编码集合可以使用CheckTable快速判定。下面我们将描述从左往右扫描匹配文本的过程。首先我们判断当前字符的编码长度是否小于0,如果小于0,则可以跳跃下面一段文本。如果需要编码,我们则总右往左把当前文本编码为一个整数。如果k表示对ti..i+m的编码整数,则如果CheckTable大于0,我们知道PcheckTable-1就是当前位置出现的关键词。如果CheckTable等于0,我们就可以继续扫描文本。为了快速计算后一个位置的文本编码整数,我们可以使用下面这个递推公式。定义F(i)文本ti.i+m-1的编码整数; H(i) 文本ti的Huffman编码;“+” 按位联接两个整数,形成新整数;“-“ 按位清除一个整数的多少位由于 F(i)=H(i+m-1)+H(i+m-2)+...+H(i+1)+H(i)又因为F(i+1)=H(i+m)+H(i+m-1)+...+H(i+2)++H(i+1);所以 F(i+1)=F(i)-H(i)+H(i+m);因此ti+1..i+1+m-1的编码整数可以快速地从ti.i+m-1计算出来。这样可以加快对必须编码文本的编码速度。我们知道,Boyer-Moore算法使用窗口来扫描文本。对窗口中的每一个位置,我们可以计算可以直接跳跃的距离。Huff-Match算法也采用了类似的做法。主要思想是当扫描到文本某个位置的时候,判断当前的字符是否是关键词中的字符,如果这个字符根本不在关键词集合中,也就是说这个字符的Huffman编码长度等于-1,我们则可以在文本中安全移动整个关键词的长度。下面Table4是扫描阶段的例子代码。 在具体实现Huff-Match算法的时候,还需要注意这两个问题。首先,如果关键词或者文本中任何一个部分的编码整数大于一个机器字长,则table4中的变量now_code将会溢出。我们采用的解决方法是限制Huff本文档来自技高网...

【技术保护点】

【技术特征摘要】

【专利技术属性】
技术研发人员:谭建龙卜东波张鑫余智华郭莉
申请(专利权)人:中国科学院计算技术研究所
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1
相关领域技术
  • 暂无相关专利