一种用于中文字符串匹配的位向量方法技术

技术编号:2868325 阅读:242 留言:0更新日期:2012-04-11 18:40
一种用于中文字符串匹配的位向量方法,对在计算机中用两个字节表示的汉字:将两个字节分别对应一个高字节整数和一个低字节整数进行处理,所有汉字对应的高字节整数和低字节整数分别构成一个高字节数组和低字节数组;将两个字节数组中的所有整数全部清为0;扫描整个中文模式串,对其中的每个汉字做如下操作,设某汉字在中文模式串中所处位置为p,则将该汉字的低字节对应的低字节数组中的整数的第p比特置1并将该汉字的高字节对应的高字节数组中的整数的第p比特置1;用正在处理字符串中的字符在两个整数数组中对应的整数进行匹配。由于采取了将汉字的两个字节分别处理的技术措施,大大减少了所需的空间。(*该技术在2023年保护过期,可自由使用*)

【技术实现步骤摘要】

本专利技术涉及一种用于字符串匹配的位向量方法。
技术介绍
模糊字符串匹配在入侵检测、移动短消息过滤、文本编辑、信息查询、自动索引、计算生物学、信息提取等领域均有重要应用,已经成为计算机算法设计的一个重要课题。它解决的问题是给定一个字符串,一个模式串,要找出字符串中所有与模式串相似的部分。解决模糊字符串匹配的经典方法是一种基于生成动态矩阵的方法,自从1980年P.Sellers发表该方法以来,许多人对之进行了改进。这些改进当中,有一种非常有效的方法就是位向量方法。当今计算机中,整数字长一般为32或64,因此,可将32或64次的比特运算用一次整数运算来完成,从而将运算速度提高32或64倍。位向量方法正是利用了这一点,在模式串长度小于整数字长的情况下,提高了字符串匹配的性能。现有位向量方法位向量方法适用于,它用到一个与字符集等长的整数数组,这样每个字符都有一个整数与之相对应。位向量方法的描述如下1)将汉字用两个字节来表示;2)把这两个字节合起来作为一个16比特的大整数来处理,所以,每个汉字都对应一个大整数,对应所有汉字的整数构成一个数组;3)将该数组所有整数清为0;4)从头到尾扫描整个模式串,对其中的每个字符,做如下操作设该字符在模式串中所处位置为p,将该字符对应的整数的第p个比特置1;5)用正在处理字符串中的字符在整数数组中对应的整数进行匹配。汉字都是用两个字节表示的。在GB2312中,对每个汉字对应的两个字节做了明确规定。比如,“陈晨的爸爸”所包含的4个汉字对应的两个字节分别是(以下是16进制)陈B3 C2晨B3 BF的B5 C4爸B0 D6所以,“陈晨的爸爸”在计算机中就是B3 C2 B3 BF B5 C4 B0 D6 B0 D6 现有位向量方法把这两个字节合起来作为一个16比特的大整数(0~65535)来处理,所以,每个汉字都对应一个大整数,比如“陈”=B3C2=46018“晨”=B3BF=46015“的”=B5C4=46532“爸”=B0D6=45270这样,要把中文字符串转化成位向量,就需要长达65536的一个数组M。因为需要一个和字符集等长的整数数组,而汉字有10000多个,因此,当应用于中文字符匹配时,需要10000整数的空间。如果整数由4个字节组成,则需要40K字节的空间。在国外,由于拉丁文属于小字符集,这个问题不明显。但若考虑的是中文字符串的匹配,因汉字多于1万个,所需空间也在40K字节以上,这个问题显得比较突出。
技术实现思路
本专利技术要解决的技术问题是为了克服了现有位向量方法在应用于中文时需要大量空间的缺点,提出了一种新的位向量方法。在计算机中,一个汉字用两个字节来表示,在本文中称为低字节和高字节。本方法用到两个长为256的整数数组,称为低字节数组和高字节数组。这样,每个汉字的低字节都和低字节数组中的一个整数对应,高字节也和高字节数组中的一个整数对应。本专利技术的新位向量方法为,对在计算机中用两个字节表示的汉字(1)将两个字节分别对应一个高字节整数和一个低字节整数进行处理,所有汉字对应的高字节整数和低字节整数分别构成一个高字节数组和低字节数组;(2)将低字节数组和高字节数组中的所有整数全部清为0;(3)从头到尾扫描整个中文模式串,对其中的每个汉字做如下操作,设某汉字在中文模式串中所处位置为p,则首先,将该汉字的低字节对应的低字节数组中的整数的第p比特置1;其次,将该汉字的高字节对应的高字节数组中的整数的第p比特置1;(4)用正在处理字符串中的字符在两个整数数组中对应的整数进行匹配。本位向量方法只需要两个长为256的整数数组,如果整数是4个字节,共需2K字节空间,是原有位向量方法的5%。与原有位向量方法相比,由于采取了将汉字的两个字节分别处理的技术措施,大大减少了所需的空间。附图说明图1为本专利技术中的对字符串处理的流程图; 图2是字符串“陈晨的爸爸”经原有位向量方法处理后对应的整数数组。图3是字符串“陈晨的爸爸”经本专利技术的位向量方法处理后对应的两个整数数组。具体实施例方式在本专利技术中,把汉字作为两个小整数(0~255)来处理。一个汉字对应一个高字节整数、一个低字节整数。以“陈晨的爸爸”为例“陈”高字节整数=B3=179,低字节整数C2=194“晨”高字节整数=B3=179,低字节整数BF=191“的”高字节整数=B5=181,低字节整数C4=196“爸”高字节整数=B0=176,低字节整数D6=214这样,要把中文字符串转化成位向量,只需要两个长为256的数组HM、LM(见图3)。设有中文字符串p,和两个长为256的整数数组LM,HM。本位向量方法可以这样实现<pre listing-type="program-listing">  NewPreprocess(p,LM,HM)  Begin   For i=1 to 256 Do   Begin  LM=0;  HM=0;   End   For i=1 to m Do   Begin  LM(i)=1;  HM(i)=1;   End  End</pre>其中,low(pi)表示p中第i个字符的低位字节。图2给出了字符串“陈晨的爸爸”经原有位向量方法处理的结果。图3中给出了字符串“陈晨的爸爸”经本位向量方法处理的结果。可以看到,“陈”对应的两个整数的与为“00011”&amp;“00001”=”00001”。即“陈”在计算机中为“B3C2”,用本专利技术的位向量方法处理后,高字节B3对应“00011”,低字节C2对应“00001”,这两个数进行逐位与(&amp;)操作,得到“00001”。而“00001”就是“陈”用现有技术中的位向量方法处理后得到的结果。二者结果一致。同样地, “晨”对应的是“00011”&amp;“00010”=“00010”。“的”对应的是“00100”&amp;“00100”=“00100”。“爸”对应的是“11000”&amp;“11000”=“11000”。对比附图2,说明两种方法的效果是完全一样的。下面对图2和图3中的部分对应关系进行说明。在图2中,“陈”=B3C2(16进制)=46018(10进制)。“陈”在字符串“陈晨的爸爸”里是第一个字符,所以第一个比特为1,其他为0。“晨”=B3BF(16进制)=46015(10进制),对应“00010”,是因为“陈”在字符串“陈晨的爸爸”里是第二个字符,所以第二个比特为1,其他为0。又如,“爸”=B0D6(16进制)=45270(10进制),对应“11000”,是因为“爸”在字符串“陈晨的爸爸”里是第四、五个字符,所以第四、五个比特为1,其他为0。在图3中,C2在LM中对应“00001”,等价于说字符串“陈晨的爸爸”的第一个字符的低字节为C2;B0在HM中对应“11000”,等价于说字符串“陈晨的爸爸”的第四、五个字符的高字节为B0;B3在HM中对应“00011”,等价于说字符串“陈晨的爸爸”的第一、二个字符的高字节为B3;权利要求1.,对在计算机中用两个字节表示的汉字(1)将两个字节分别对应一个高字节整数和一个低字节整数进行处理,所有汉字对应的高字节整数和低字节整数分别构成一个高字本文档来自技高网
...

【技术保护点】
一种用于中文字符串匹配的位向量方法,对在计算机中用两个字节表示的汉字:(1)将两个字节分别对应一个高字节整数和一个低字节整数进行处理,所有汉字对应的高字节整数和低字节整数分别构成一个高字节数组和低字节数组;(2)将低字节数组 和高字节数组中的所有整数全部清为0;(3)从头到尾扫描整个中文模式串,对其中的每个汉字做如下操作,设某汉字在中文模式串中所处位置为p,则首先,将该汉字的低字节对应的低字节数组中的整数的第p比特置1;其次,将该汉字的高 字节对应的高字节数组中的整数的第p比特置1; (4)用正在处理字符串中的字符在两个整数数组中对应的整数进行匹配。

【技术特征摘要】

【专利技术属性】
技术研发人员:陈开渠赵洁彭志威
申请(专利权)人:中兴通讯股份有限公司
类型:发明
国别省市:94[中国|深圳]

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

1