1.一种汉字串匹配预判方法,其特征在于,具体按以下步骤实施:步骤1,将所有汉字依照频度进行重新编码;
步骤2,将经步骤1编码后的汉字进行变换,得到归并和首尾两种模式;
步骤3,存储汉字串及其归并模式,然后按照首尾模式建立索引;
步骤4,以输入的汉字串为子串,预先存储的所有汉字串为母串,对每个母串进行预判,判断匹配是否成功。
2.根据权利要求1所述的一种汉字串匹配预判方法,其特征在于,所述步骤1具体按以下步骤实施:步骤1.1,将所有汉字按照频度从大到小的顺序排列;
步骤1.2,创建一个表,包含G*2组,每组C/2个代码,共G*C个元素;每个元素包含组号、代码号、一个暂时为空的汉字集合、一个暂时为0的频度值;
步骤1.3,将汉字逐个填入经步骤1.2建立的表;
步骤1.4,将经步骤1.3填好的表的元素转入一个二维表,该二维表有C/2行,每行G*2列,按组号对应列号,代码号对应行号的规则填入;
步骤1.5,根据元素的编码频度将步骤1.4得到的二维表按列重新排序;奇数列按元素编码频度从小到大的顺序排列;偶数列按元素编码频度从大到小的顺序排列;
步骤1.6,偶数列合并到前1列,即原第2列合并到原第1列,原第4列合并到原第3列,……,原第G*2列合并到原G*2-1列;合并方法是,奇数列的各行保持不变,增加新行,将偶数列的各元素按原第1行到第N/2行的顺序逐个增加为新行,每个元素1行,最终得到一个N行G列的新二维表;
步骤1.7,以步骤1.6得到的新二维表的列号为组号,行号为代码号,重新分配每个元素的组号、代码号,这样,每个汉字都有了一个编码。
3.根据权利要求2所述的一种汉字串匹配预判方法,其特征在于,所述步骤1.3中,将汉字逐个填入经步骤1.2建立的表,填入时,将汉字填入表的第一个元素,即将汉字添加到元素的汉字集合,将汉字的频度值累加到该元素的编码频度,填入后,将该元素移动到从前往后第一个编码频度大于该元素编码频度的元素的前一个位置,原位置的元素及此前的所有元素均顺次往前推。
4.根据权利要求1所述的一种汉字串匹配预判方法,其特征在于,所述步骤2具体按以下步骤实施:步骤2.1,剔除掉汉字串中重复的汉字;
步骤2.2,每个汉字用临时编码按步骤1的编码方法进行重新编码;
步骤2.3,按新编码的组号将汉字分组;
步骤2.4,每组代码剔除掉重复的代码,按代码从小到大的顺序排列,所得代码序列为归并模式;如该组代码为空,则归并模式也为空;
步骤2.5,将归并模式中的代码只保留最小的(C1)和最大的(C2),其他去掉,所得整数对连同归并模式的代码个数称为首尾模式,表示为[C1,C2,n];归并模式为空,首尾模式也为空;归并模式只有一个代码Ct,首尾模式为[Ct,Ct,1];其中n如果大于nMax,则令n=nMax;
如果nMax=1,此时上述的首尾模式可表示为[C1,C2]。
5.根据权利要求1或4所述的一种汉字串匹配预判方法,其特征在于,所述步骤3具体按以下步骤实施:步骤3.1,建立汉字串表,为空表,当前行号设置为0;
步骤3.2,建立首尾模式索引表,一次性添加所有行(C*(C+1)*nMax/2行),每行的每个开始行号、结束行号的值设为0;
步骤3.3,在表中存储一个汉字串;
步骤3.4在表中删除一个汉字串。
6.根据权利要求5所述的一种汉字串匹配预判方法,其特征在于,所述步骤3.3中,在表中存储一个汉字串具体按以下步骤实施:步骤3.3.1,在汉字串表中按汉字串相等的条件查找,如果已有相同汉字串则不予添加;
步骤3.3.2,根据汉字串求出归并模式,共有G个,在汉字串表中添加一个新行,行号列为当前行号加1,设编号为Sn,汉字串列为输入的汉字串,各个归并模式列为刚刚求出的各个归并模式;
步骤3.3.3,检查每组,如果存在归并模式,执行步骤3.3.4;如果不存在,无操作;
步骤3.3.4,根据归并模式求出首尾模式,根据首尾模式找出其在索引表中的行号i,从此行找出该组的起始行号x和结束行号y;
如果无起始行号,即x=0,设起始行号列的值为Sn;
如果有起始行号,但无结束行号,即x≠0,y=0,将汉字串表x行该组的下个编号设为Sn,设结束行号列为Sn;
如果起始行号、结束行号均有,即x≠0,y≠0,将汉字串表y行该组的下个行号设为Sn,结束行号列也设为Sn。
7.根据权利要求5所述的一种汉字串匹配预判方法,其特征在于,所述步骤3.4在表中删除一个汉字串,具体按以下步骤实施:步骤3.4.1,在汉字串表中按汉字串相等的条件查找,如果未查到汉字串,没有操作,如果查到,设查到的汉字串的行号为Sn;
步骤3.4.2,根据Sn行的归并模式求出各组的首尾模式,相应组的归并模式为空无操作,不为空对每组执行步骤3.4.3;
步骤3.4.3,根据首尾模式求出其在索引表中的行位置i,从此位置找出该组的起始行号x和结束行号y;
步骤3.4.4,如果x=Sn,找出汉字串表x行本组的下个行号x1,如果x1=0即x行本组没有下一行,索引表i行本组的起始行号和结束行号都设为0,即索引表i行本组的数据为空;
如果x1≠0,索引表i行本组的起始行号设为x1,步骤结束,如果x≠Sn,继续步骤3.4.5;
步骤3.4.5,从x1行开始找其下个行号x2,再找x2的下个行号x3……再找i-1行的下个行号xi……,对每行执行如下操作:如果xi的下个行号等于Sn,将xi的下个行号设为Sn的下个行号,Sn没有下个行号时将xi的下个行号设为空,并将结束行号设为xi,步骤结束,如果xi的下个行号不等于Sn,继续找下个行号并执行同样的操作;
步骤3.4.6,在汉字串表中标记n行为已废除,其行号不回收。
8.根据权利要求1所述的一种汉字串匹配预判方法,其特征在于,所述步骤4具体为:输入为子串、汉字串表、首尾模式索引表;输出为匹配成功的汉字串;针对输入子串,把汉字串表中的所有汉字串都作为母串,在汉字串表中搜索,找出预判成功的母串并逐一匹配,最终得到匹配成功的母串;具体按照如下步骤实施:步骤4.1,求出子串各组的归并模式、首尾模式:
各组的归并模式表示为g{C1,C2,……,Cn},其中1≤g≤G,为组号;1≤Ci≤C(1≤i≤n);C1
各组的首尾模式表示为:g[C1,C2,n],其中1≤g≤G为组号;1≤C1≤C为首尾模式首代码;C1≤C2≤C为首尾模式尾代码;各组的首尾模式分别处理如下:首尾模式为空无操作;不为空执行步骤4.2,产生本组的编号链_表,针对所有各组的编号链_表执行步骤4.4;
步骤4.2,此步骤的输入为g[C1,C2,n],遍历1到C1,设每个值为x;针对每个x,遍历C2到C,设每个值为y;
对每一对x、y,求出其对应的代码个数值的下限m1和上限m2,求下限m1的方法如下:x=C1,y=C2:m1=n;
x=C1,y≠C2:m1=n+1;
x≠C1,y=C2:m1=n+1;
x≠C1,y≠C2:m1=n+2;
上限m2=y-x+1,如果m2>nMax,则取m2=nMax;
如果上下限倒挂,即m1>m2,那么针对这一对x、y的操作结束;如果m1≤m2,则遍历m1到m2,设每个值为m;
上述的每一组x、y、m组成一个首尾模式g[x,y,m],找出该首尾模式在索引表中的行位置,从此行按组号g找出一个行号链,表示为Lg[x,y,m],意为g[x,y,m]的行号链,行号链的具体值用起始行号h1,结束行号h2表示为Lg(h1,h2),也可以只用起始行号表示为Lg(h1),其中h1
上述每一个首尾模式g[x,y,m]都对应一个行号链,剔除其中的空链,其余行号链组成一个行号链_表;一个行号链_表包含多个行号链,用包括在{}对中,以逗号隔开的行号链表示;
步骤4.3,针对步骤4.1产生的所有各组的行号链_表的操作,具体内容如下:步骤4.3.1,获取各行号链_表的当前行号,如有行号链_表的当前行号为空,操作在此结束,如无,继续下述操作;
步骤4.3.2,如果各行号链_表的当前行号不全相等,找出其中的最大值m,对其中所有当前行号不为m的行号链_表执行Get(m),即提取行号操作,再执行本步骤,如果有行号链_表的提取结果为空,则操作结束;
步骤4.3.3,如果当前行号全相等,将此全相等的行号设为n执行步骤4.4,执行完后继续本步骤;
步骤4.4,找到汉字串表的n行数据,将该行数据的归并模式作为母模式,子串的归并模式作为子模式,按步骤4.5进行模式匹配,匹配不成功,本操作结束;
如匹配成功,说明子串包含于母串的预判成功,接下来应使用标准模式对母串和子串进行匹配操作;
无论预判和匹配是否成功,都对每个行号链_表执行Get(n+1)操作,如果有结果为空则操作结束;否则执行步骤4.4;
步骤4.5,母模式和子模式都包括G个归并模式,母模式和子模式匹配成功的条件是:子模式中不为空的归并模式,在母模式中也不为空。
9.根据权利要求8所述的一种汉字串匹配预判方法,其特征在于,所述步骤4.2中涉及行号链、行号链_表的操作具体如下:步骤4.2.1,行号链操作,行号链由互相链接的若干个行号节点组成,每个节点有两个字段:行号、下个行号,其中下个行号是本行号链中其他一个节点的编号,全部节点中,有且只有一个是首节点,首节点不是其他任何节点的下节点,此处的行号链按从小到大的顺序排列,即任何节点的下节点的行号一定大于其自身的行号;
步骤4.2.1.1,当前行号,设行号链为L,当前行号表示为L.Get,当前行号的初始值设置为首节点的行号,操作过程中可改变当前行号,如果没有首节点,当前行号为空,当前行号为空也称为本行号链为空;
步骤4.2.1.2,提取行号,设行号链为L,提取行号操作表示为L.Get(x),从当前行号开始找,以遇到的第一个不小于x的行号为结果,并将当前行号也设置为此行号,如果一直到最后一个行号,也没有符合条件的行号,则结果为空;
步骤4.3.2,行号链_表操作,行号链_表是一个集合,其元素为行号链,各行号链中的所有行号互不重合,即没有任何两个是相等的;
步骤4.3.2.1,当前行号,设行号链_表为B,当前行号表示为B.Get,为各元素的当前行号中最小的。其中为空的行号链不参与比较。如果各元素的当前行号都为空,则本行号链_表的当前行号也为空,也称为本行号链_表为空;
步骤4.3.2.2,提取行号,设行号链_表为B,提取行号操作表示为B.Get(x)。对行号链表中的各元素执行Get(x),返回其中的最小值,其中为空的行号链不参与运算。
10.根据权利要求8所述的一种汉字串匹配预判方法,其特征在于,所述步骤4.5的具体匹配过程为:以下步骤针对某一组的一个母模式Ai和同一组的一个子模式Bi,其中Ai的编码为a1、a2......an,a1
步骤4.5.1,令i=1,j=1;
步骤4.5.2,如果bj不存在,归并模式匹配成功;
如果ai不存在,归并模式匹配失败;
如果ai=bj,i加1,j加1,执行步骤4.5.2;
如果ai
如果ai>bj,i不变,j加1,执行步骤4.5.2。