CN101488127A - 位标记字符串检索技术 - Google Patents
位标记字符串检索技术 Download PDFInfo
- Publication number
- CN101488127A CN101488127A CNA2005100574914A CN200510057491A CN101488127A CN 101488127 A CN101488127 A CN 101488127A CN A2005100574914 A CNA2005100574914 A CN A2005100574914A CN 200510057491 A CN200510057491 A CN 200510057491A CN 101488127 A CN101488127 A CN 101488127A
- Authority
- CN
- China
- Prior art keywords
- character
- mark
- bit
- character string
- place value
- 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/31—Indexing; Data structures therefor; Storage structures
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Data Mining & Analysis (AREA)
- Databases & Information Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明是一种字符串检索技术,以一个位(bit)对应若干个字符元,以n个位对应全部字符元,也就是分全部字符元为n组,并用一个数据的n个均为0的位,记为W,来标记组字符串的字符元信息。如果字符串S的一个字符元P1属于第n组,则将W相应的第n个位标记为1,类似地,根据S其它字符元P2、P3、P4…所属的组对W进行标记,完成全部字符元标记后的W,记录有S的信息,称为S的“位值”,这种方式称为1标记。根据逻辑代数的原理,也可用一个数据的n个均为1的位,记为,来标记组成字符串的字符元信息。如果S的一个字符元P属于第n组,则将数据相应的第n个位标记为0,这种方式称为0标记。通过对Sa的“位值”Wa、 a与Sb的“位值”Wb、 b进行比较,可以判断Sb不包含、包含或可能包含检索关键词Sb的所有字符元。例如,对Wa与Wb进行位蕴含运算,如果所有的位都有蕴含关系,则Sb包含或可能包含“Sa的所有字符元”。如果需要,再用字符逐位比较方法判断Sb是否包含“Sa”。位标记既可用于通常意义的检索,即判断数据库字符串是否包含关键词,也可以作“逆检索”,就是判断关键词是否包含数据库字符串,可用于语音输入、拼音输入及汉语分词中,匹配基本句型或词语。如果可用于标记的位数n,是字符串的平均长度m的2倍以上,可以用数个位(bit)的组合对应一组字符元进行标记,可以提高筛选效率,称为多位标记。多位标记,同样可用字符逐位比较方法最终判断字符串Sb是否包含“Sa”。位标记字符串检索技术作为一种字符串算法,不仅可用于数据库的字符串查找,也可用于各种数据结构的字符串查找。
Description
技术领域
本发明是一种字符串检索技术,目的是提高字符串模糊检索的速度。以一个位(bit)对应若干个字符元,以n个位对应全部字符元,也就是分全部字符元为n组,并用一个数据的n个均为0的位,记为WF,来标记组成字符串的字符元信息。如果若干个字符串S的一个字符元P1属于第n组,则相应地将W的第n个位标记为1,类似地,根据S其它字符元P2、P3、P4…所属的组对W进行标记,完成全部字符元标记后的W,记录有S的信息,称为S的“位值”,这种方式称为1标记。根据逻辑代数的原理,也可用一个数据的n个均为1的位,记为WT,来标记组成字符串的字符元信息。如果S的一个字符元P属于第n组,则相应地将数据W的第n个位标记为0,这种方式称为0标记。通过对Sa的“位值”Wa、Wa与Sb的“位值”Wb、Wb进行比较,可以判断Sb“不包含”、“包含”或“可能包含”Sb的所有字符元。例如,对Wa与Wb进行位蕴含运算,如果所有的位都有蕴含关系,则Sb包含或可能包含Sa的“所有字符元”。如果需要,再用通常的字符逐位比较方法判断Sb是否包含“Sa”。测试表明,位标记检索可以显著提高字符串的模糊检索速度。速度优势之外,位标记检索的另一特点是多个关键词查询同单个关键词查询一样方便。位标记既可用于通常意义的检索,即判断数据库字符串是否包含关键词,也可以作“逆检索”,判断关键词是否包含数据库字符串,可用于语音输入、拼音输入及汉语分词中,匹配基本句型或词语。
如果可用于标记的位数n,是字符串的平均长度m的2倍以上,可以用数个位(bit)的组合对应一组字符元进行标记,以提高筛选效率。
位标记字符串检索技术作为一种字符串算法,可用于各种数据结构的字符串查找。
背景技术
通常的字符串模糊检索采用逐位比较方式进行,如判断字符串S=“bdopfqew”中是否包含字符f,计算机以主串S的第一个字符b与f进行比较,再以S的第二个字符d与f进行比较,以此类推,直到S的第5个字符与f相同,匹配成功,这是最简单的情形。如果子串T长度为2个字符以上,简单的模式匹配算法,即BF算法,是以S1与T1比较,若不同则以S2与T1比较,依次类推,直到S的某一个字符Si与T1相同,再将它们之后的Si+1与T1+1进行比较,若也相同,则继续往下比较,当S的某一个字符Si+n与T1+n不同时,则返回,再以Si+1与T1作新一轮比较,重复以上过程,直到T中的字符全部比完,则匹配成功,否则匹配失败。随着检索关键词T的长度增加,字符匹配的复杂程度相应增加。改进后的模式匹配算法,即KMP算法,对小字符集的拼音文字来说,避免了回溯,但对字符集大、单字符频度低的汉字字符串而言,实质意义不大。简而言之,BF算法与KMP算法均是对主串和子串的字符进行逐位比较。
2004年10月19日,本人申请了“质数代换字符串检索技术”专利,申请号200410067258.X,该方法有效地提高了字符串模糊检索的速度,但对于长字符串实施“质数代换字符串检索技术”,要达到较好的效果,需要较多的空间存贮质数乘积值。为了提高字符串模糊检索的速度,并减少对存贮空间的需求,本发明提出用数据的n个位(bit)来标记字符串的组成信息,标记后之后的数据称该字符串的“位值”,对两个字符串的位值进行比较,并结合通常的字符逐位比较法,实现字符串的模糊检索。测试表明,速度是一般的字符逐位比较模糊检索的数倍乃至十几倍以上。
发明内容
1.基本方法
位标记字符串检索实施中,可以用“位”或“位的组合”对应通常意义的字符,如:a、b、A、B、∑#、∞、ま、、:、中、国;根据需要也可以用位对应汉字偏旁,如:扌、罒,以至笔画,如丿、丶等;对于拼音文字,如英语字符串“day and night”,可以用位对应单词,如day、and、night,或者用位对应字母组合,如ay、ai,在汉语拼音输入或语音输入中可以代表汉语拼音的声母、韵母或音节,对于其它语言可以代表音标,如、siη。为了便于说明,称位或位的组合所对应的字符单位为“字符元”,记为P。
位标记字符串检索的方法,容易在拼音文字字符串检索中实现。设以一个32位,各个位均为0的数据0000,0000,0000,0000,0000,0000,0000,0000,记为WF,以WF自左至右(也可以是自右至左)的第1至第26个位对应26个英文字母,其它6位可能不考虑,也可以对应标点符号。单词big包含b、g、i,所以将相应的2、7、9等3个位标记为“1”,则数据成为0100,0010,1000,0000,0000,0000,0000,0000,称为big的位值,记为Wa,这种标记方式为“1”标记。
同样,bigger包含b、e、g、i、r,故将WF的2、5、7、9、18等5个位标记为“1”,则数据成为0100,1010,1000,0000,0100,0000,0000,0000,称为bigger的位值,记为Wb。
a | b | c | d | e | f | g | h | i | j | k | 1 | m | n | o | p | q | r | s | t | u | v | w | x | y | z | , | . | ? | : | “ | ‘ | |
位 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 |
big | 0 | 1 | 0 | 0 | 0 | 0 | 1 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
bigger | 0 | 1 | 0 | 0 | 1 | 0 | 1 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
biggest | 0 | 1 | 0 | 0 | 1 | 0 | 1 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
digger | 0 | 0 | 0 | 1 | 1 | 0 | 1 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
gibber | 0 | 1 | 0 | 0 | 1 | 0 | 1 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
BIG | 0 | 1 | 0 | 0 | 0 | 0 | 1 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
可以看出,所有big为1的位,bigger也必为1;但bigger为1的位,big可能是1,也可能是0,如第5、18个位;bigger为0的位,big必为0,如第1、3、4、6、8、10等21个位。将Wa与Wb进行“位蕴含”运算,结果是所有的位均为“1”:1111,1111,1111,1111,1111,1111,1111,1111,记为WT,如果是无符号长整数,就是4294967295。可以用公式表示为:Wa→Wb=WT,字符串bigger包含big。
如果biggest的位值记为Wc,同样有:Wa→Wc=WT,字符串biggest包含big。
如果将BIG的位值记为WA,将big的位值Wa与之进行“位蕴含”运算,同样的有:Wa→WA=WT,字符串BIG等于big。这里未考虑字母大小写,仅说明两个相同的字符串的位值进行“位蕴含”运算,所有的位均为1。
如果digger的位值记为Wd,如果将big的位值Wa与之进行“位蕴含”运算,结果为1011,1111,1111,1111,1111,1111,1111,1111,不等于WT,即:Wa→Wd≠WT,字符串digger不包含big。
也就是说,通过对两个字符串的位值W进行“位蕴含”运算,如果结果不等于WT,则后项所对应的字符串“不包含”(“不多于”及“不等于”,下同)前项所对应的字符串。
上面的方案未考虑字母的大小写,如果要区分大小写,则需要52个位,这也可以实现。但是每个字符元对应一个位,并不总是可行的。如,GBK范围有21000个汉字,用一个位对应一个汉字,存贮位值的数据会占用很多空间,其中有相当多的是无意义的空白,而读取数据及位比较运算用时会无意义地增加,实施中,根据需要可用一个“位”对应多个汉字。一个易行的方案是将GBK范围的21000个汉字及其它符号,根据编码分为32组,以一个长整型数据来存贮字符串的位值,设有字符串“大漠孤烟直长河落日圆”,则:
汉字 | 大 | 漠 | 孤 | 烟 | 直 | 长 | 河 | 落 | 日 | 圆 |
编码 | 46323 | 50350 | 47554 | 53708 | 54961 | 45988 | 47827 | 49892 | 51413 | 54450 |
组 | 20 | 15 | 3 | 13 | 18 | 5 | 20 | 5 | 22 | 19 |
汉字 | 霜 | 冷 | 长 | 河 | 落 | 日 | 天 | 涯 | ||
编码 | 52138 | 49380 | 45988 | 47827 | 49892 | 51413 | 52460 | 53700 | ||
组 | 11 | 5 | 5 | 20 | 5 | 22 | 13 | 5 |
表中的编码是用excel中函数code获取,其中“大”“河”同在20组,“长”“落”同在5组,所以只将8个相应的位置为1,则“大漠孤烟直长河落日圆”的位值Wh为:
0010,1000,0000,1010,0111,0100,0000,0000
同样可以得到“长河落日”的Wi“位值”为:0000,1000,0000,0000,0001,0100,0000,0000,以Wi与Wh作位“位蕴含”运算:Wi→Wh=WT,两个字符串存在包含关系。
“霜冷长河”中“霜”为第11组,而“冷”与“长”均为第5组,则“位值”Wj为:0000,1000,0010,0000,0001,0000,0000,0000,以Wj与Wh作位“位蕴含”运算:Wj→Wh≠WT,而两个字符串也不存在包含关系。也就是说,用一个“位”对应多个汉字,得到位值,对两个字符串的位值进行“位蕴含”运算,如果结果不等于WT,则后项所对应的字符串“不包含”前项所对应的字符串的“全部字符元”,也就必然不包含该“字符串”。对于拼音文字,同理可用一个位对应多个单词,判断一个字符串“不包含”、“可能包含”另一个字符串的字符元。
但是,对两个字符串的位值进行“位蕴含”运算,如果结果等于WT,后项所对应的字符串也只是“可能包含”前项所对应的字符串。
如果gibber的位值记为We,将big的位值Wa与之进行“位蕴含”运算,同样有:
Wa→We=WT
但字符串gibber不包含big。
“落日天涯”的“位值”Wk为:0000,1000,0000,1000,0000,0100,0000,0000,以之与Wh作位“位蕴含”运算:
Wk→Wh=WT
但“大漠孤烟直长河落日圆”不包含“落日天涯”。
也就是说,位标记字符串检索与一般字符串逐位比较法是有区别的。即使两个字符串的位值存在位蕴含关系,两个字符串也不一定存在包含关系。如果以一个“位”对应“一个字符元”,两个字符串的位值存在位蕴含关系,则后项对应的字符串“包含”前项对应的字符串的全部字符元。但由于未考虑字符元的排列,不能肯定两个字符串是否存在包含关系。如果标记是以一个“位”对应“一组字符元”,一组字符元之中有多个字符元,则后项对应的字符串“有可能”包含前项对应的字符串的全部字符元,也“有可能”不包含前项对应的字符串的全部字符元,更不能肯定两个字符串是否存在包含关系。但根据需要,可再用字符逐位比较方法判断两个字符串是否存在包含关系。
位标记字符串检索,进行位运算的前项及后项的位值,均可以是一个字符串的字符元的标记信息,也可以是多个字符串所有字符元的标记信息,统称为“若干个字符串”S的位值。“若干个字符串”是S的同位概念,就是说,S指一个或多个字符串。
设对数据库进行位标记字符串检索,字符串记录S1、S2、S3、…的位值分别为W1、W2、W3、…。检索关键词St的位值记为Wt,以Wt与Wn进行位蕴含运算,结果为WT,则字符串Sn包含或可能包含St的所有字符元。由符合条件的Sn构成的记录集,记为Ri。检索所用时间称之为Ti。通常需要在Ri中用字符串逐位比较法得到最终结果集Rz,检索所用时间称之为Tz。
因此位标记字符串检索方法总的用时是Ti+Tz,如果希望使Ti低,对32位的处理器来说,最好存贮位值的数据就是32位。对于某次字符串模糊检索来说,Rz是一定的,降低Tz的方法是尽可能使初步结果集Ri最小。存贮位值的位数n越少,一个位对应的字符元越多,筛选效果越差,Ri也会越大;字符串平均长度越长,Ri也会越大。影响Ri大小还有另一因素:检索关键词越长,Ri也越小。
设标记所用位数为n,字符串位值的“1”为m个,检索关键词位值的“1”为k个,则位比较的筛选概率可以用下式计算,其值越小越好:
n为32,m和k部分取值的筛选概率计算如下:
m | k=1 | k=2 | k=3 | k=4 |
24 | 0.75 | 0.556451613 | 0.408065 | 0.295495 |
22 | 0.6875 | 0.465725806 | 0.310484 | 0.20342 |
20 | 0.625 | 0.383064516 | 0.229839 | 0.134733 |
18 | 0.5625 | 0.308467742 | 0.164516 | 0.085095 |
16 | 0.5 | 0.241935484 | 0.112903 | 0.050612 |
14 | 0.4375 | 0.183467742 | 0.073387 | 0.027836 |
12 | 0.375 | 0.133064516 | 0.044355 | 0.013765 |
10 | 0.3125 | 0.090725806 | 0.024194 | 0.00584 |
8 | 0.25 | 0.056451613 | 0.01129 | 0.001947 |
影响筛选概率的三个因素中,用户检索时所用关键词长度决定k的大小,记录字符串长度决定m的大小,但记录字符串长度、检索时所用关键词长度是不可控制的,可控制的因素是标记所用的位数n,而且长度一定的字符串标记之后“1”的个数m、k的大小,也受n影响,所以n与m保持足够的比例很重要。
几点建议:
1.32位的cpu,用长整数进行标记,最利于位值比较,如果是无符号整数,则W为32个位,如果是有符号位整数,则只有31个位便于标记。如果字符串平均长度大于16个字符元,记录条数多的数据库,在SQL SEVER 2000中,可用数据类型bigint的63个位进行标记,相应地,将字符元分为63组。当然,对于32位处理器,用bigint存贮位值,读取及进行位比较必然用更多时间。实际上,任何数据库中便于进行位运算的任何数据类型均可以用来标记字符串,如果用无符号位的数据类型自然更佳。对于64位cpu,当然应采用64个位来标记字符串,以充分利用cpu的性能,提高“位值”的离散度。
2.如果cpu是32位,字符串之间长度相差大的数据库,可将记录分为两个表,短字符串表用32个位标记,长字符串表用64位标记,查询中用union命令将两表查询结果联合起来。
3.字符元的分组,以频率均衡为最佳,还要兼顾标记位值的速度。按汉字内码进行模运算,取余数分组,容易实现,但不是最优分组,而且模运算除法运算速度慢。可以考虑取汉字内码的某5个位将汉字分为32组,速度会更快,效果可能更好。
通常意义的检索之外,用位标记方法可以对数据库字符串进行“逆检索”,即以数据库字符串Sn的Wn值为前项,以检索关键词St的Wt值为后项进行位蕴含运算,根据结果是否所有的位为“1”,即Wn→Wt=WT,可筛选出数据库中那些组成字符元可能为检索关键词St所包含的Sn。
自然,逆检索的筛选概率的计算要反过来。设数据库及关键词均用“1”标记,标记所用位数为n,位标记后Sn的位值Wn的“1”为m个,检索关键词标记后的“1”为k个,则检索关键词St包含或可能包含其所有字符元的概率可以用下式计算:
2.测试分析
用上述方法对一个以汉字为主,有部分英文及数字的数据库进行测试:记录数267,000余条,字符量3,473,000余,字符串平均长度12.989,以长整数标记位值,编程语言为VB,操作***为Window xp,CPU赛扬800Hz,内存256M,技嘉810主板,硬盘40G。检索整体用时,记为T。显然,任何一次位标记检索,都必须读取全部记录的位值,以关键词的位值与之进行比较,所用的时间可以认为是一个常量,称为T0,但不易直接测得。位值比较后符合条件的记录集,记为R1,对R1进行逐位比较检索用时T1也不易直接测得,但与R1大小有关,R1可以得到。影响检索用时的另一个因素是最终结果集R2的大小。根据120次测试所得的T、R1、R2,回归分析得到如下方程:
调整后的判定系数R2=0.989
回归模型的显著性检验F=5265.814
大于F0.01(2,117)=4.791
常量的显著性检验t0=86.610
R1的显著性检验t1=74.263
R2的显著性检验t2=25.489
均大于t0.01(117)=2.6185
可见,回归方程可信度很高。其中的常量,也就是读取全部记录的位值,以关键词的位值与之进行比较所用的时间,即T0,为0.268秒。同时进行的120次字符串逐位比较方法平均用时2.1739秒。可见位值比较所用的时间T0仅为通常逐位比较方法用时的八分之一。但是,位标记字符串检索的整体用时还与R1、R2相关,该测试中n=31,字符串平均长度12.989,标记后有重叠现象,“1”的平均个数m约在11至12,这里按12计算,假如上面数据库字符串的字符元分布正常,标记后的“1”分布均衡,按概率可以计算得到R1,最终结果集R2与筛选效果无关,这里指定为240,则理想状态下关键词标记后k为1至12的检索用时,可按回归方程计算如下:
k | R1 | R2 | T |
1 | 103354.8 | 240 | 1.16592 |
2 | 37896.77 | 240 | 0.601344 |
3 | 13067.85 | 240 | 0.387195 |
4 | 4200.381 | 240 | 0.310713 |
5 | 1244.557 | 240 | 0.285219 |
6 | 335.0732 | 240 | 0.277375 |
7 | 80.41756 | 240 | 0.275178 |
8 | 16.75366 | 240 | 0.274629 |
9 | 2.91368 | 240 | 0.27451 |
10 | 0.39732 | 240 | 0.274488 |
11 | 0.03784 | 240 | 0.274485 |
12 | 0.001892 | 240 | 0.274485 |
可见,与通常字符串检索方法平均用时2.1739秒相比,位标记字符串检索有很大的性能优势。但不同的硬件、以及标记时所用的数据类型尤其是n的大小、数据库字符元的分布状况、标记时字符元的分组状况,均影响位标记字符串检索的用时,所以此回归方程只有参考意义。
英语中仅有26个字母,如果字符串很长,每条记录含每一个字母,则位标记检索会失去筛选作用。但对一个记录数242,000,字符量7,493,000的英文数据库数据进行测试,表明位标记字符串检索对拼音文字通常也是可行的。该数据库字符串数据类型为varchar,字段长56,字符串平均长30.846,用1个长整数的26个bit标记26个字母,不分大小写,忽略空格及其它字符。由于字母英文字母的使用频率不均衡,标记后统计仅有3213052个“1”,每个记录“1”的平均数为13.2266,一方面说明标记有大量的重叠发生,另一方面说明并非每条记录包含每个字母。
对该数据库进行120次字符逐位比较检索,平均用时为4.573秒,同时进行位标记检索,根据120次的T、R1、R2,回归分析得到如下方程:
调整后的判定系数R2=0.999
回归模型的显著性检验F=55405.88
大于F0.01(2,117)=4.791
常量的显著性检验t0=36.400
R1的显著性检验t1=121.733
R2的显著性检验t2=77.409
均大于t0.01(117)=2.6185
下面为该数据库的字母分布统计表:
字母 | 含该字母的记录数 | 百分比 | 字母 | 含该字母的记录数 | 百分比 |
t | 227167 | 0.935136 | h | 114263 | 0.470365 |
r | 222338 | 0.915257 | u | 109376 | 0.450248 |
e | 221713 | 0.912685 | g | 97339 | 0.400697 |
a | 213249 | 0.877842 | f | 83452 | 0.343531 |
c | 210116 | 0.864945 | w | 71228 | 0.293211 |
n | 204225 | 0.840695 | b | 67065 | 0.276074 |
o | 201082 | 0.827757 | y | 60698 | 0.249864 |
i | 195734 | 0.805742 | v | 59351 | 0.244319 |
s | 195639 | 0.805351 | k | 47379 | 0.195036 |
1 | 169753 | 0.698791 | x | 15150 | 0.062365 |
d | 159202 | 0.655357 | q | 7258 | 0.029878 |
m | 125449 | 0.516413 | j | 6351 | 0.026144 |
p | 122168 | 0.502906 | z | 6307 | 0.025963 |
从上表可见,该数据库中t、r、e三个字母频率最高,以tree为检索关键词,实际检索得到含tree的记录7条,而R1为188491,用时3.655秒,同时进行的逐位比较检索用时4.465秒。如按上表t、r、e三个字母的频率,计算可得:
R1=242,924*0.935136*0.915257*0.912685=242,924*0.781158=189762
再按回归方程计算检索用时为:
可见,即使是tree这样完全由高频字母构成的单词,位标记检索仍有性能优势。实际上,英文中大多数单词超过4个字母,如果其中有一个低频字母,位标记的筛选作用就很好,相当于“短板效应”。列举三十次测试数据以供参考:
3.位标记的重叠概率
拼音文字中字母数量小,所以字母重复出现的频率高,如bigger,biggest等单词有两个g,但仅将第7个“位”标记为1。对于汉字字符串来说,一个字符串中同一个汉字重复出现的机率低,但对汉字分组,一个字符串中的数个汉字可能会属于同一组,如上面的分组中,“大”“河”同在20组,“长”“落”同在5组,标记后重叠于一个“位”。即使分组实现字符元频率均衡,也有字符串标记重叠的问题。设用来标记的位数为n,字符元的个数为m。其中完全不发生重叠的概率是:
显然,n一定的时候,m每增加1,分子新增项就递减1,而分母新增项不变,完全不发生重叠的概率越来越低。设以32个位进行标记,字符串长m为7,完全不发生重叠的概率:
下表是以32个位进行标记,字符串长m为1至24时,完全不发生重叠的概率:
重叠就意味着信息的损失,一定程度的重叠是不可避免的,也是可以接受的,但重叠的比例太高,会影响位标记检索的性能,所以发生重叠的概率也值得关注。以n个位标记,字符串长为m个字符元,重叠为k个“1”的概率计算公式是:
其中
设以32个位标记,字符串长为7个字符元,重叠为3个位,即m1+m2+m3=7,有15组,概率计算如下:
7 | m1 | m2 | m3 | m1 | m2 | m3 | 7!/(m1!*m2!*m3!) |
5040 | 1 | 1 | 5 | 1 | 1 | 120 | 42 |
5040 | 1 | 2 | 4 | 1 | 2 | 24 | 105 |
5040 | 1 | 3 | 3 | 1 | 6 | 6 | 140 |
5040 | 1 | 4 | 2 | 1 | 24 | 2 | 105 |
5040 | 1 | 5 | 1 | 1 | 120 | 1 | 42 |
5040 | 2 | 1 | 4 | 2 | 1 | 24 | 105 |
5040 | 2 | 2 | 3 | 2 | 2 | 6 | 210 |
5040 | 2 | 3 | 2 | 2 | 6 | 2 | 210 |
5040 | 2 | 4 | 1 | 2 | 24 | 1 | 105 |
5040 | 3 | 1 | 3 | 6 | 1 | 6 | 140 |
5040 | 3 | 2 | 2 | 6 | 2 | 2 | 210 |
5040 | 3 | 3 | 1 | 6 | 6 | 1 | 140 |
5040 | 4 | 1 | 2 | 24 | 1 | 2 | 105 |
5040 | 4 | 2 | 1 | 24 | 2 | 1 | 105 |
5040 | 5 | 1 | 1 | 120 | 1 | 1 | 42 |
1806 |
以32个位标记,字符串长为7个字符元,标记后k为1-7的概率如下表:
k | 排列数 | 排列百分比 | 百分比累计 | k*排列数 |
7 | 16963914240 | 0.493714884 | 0.493714884 | 1.18747E+11 |
6 | 1370162304 | 0.398769714 | 0.892484598 | 82209738240 |
5 | 33831168 | 0.098461658 | 0.990946256 | 16915584000 |
4 | 3020640 | 0.008791219 | 0.999737475 | 1208256000 |
3 | 895776 | 0.000260705 | 0.99999818 | 26873280 |
2 | 62496 | 1.81887E-06 | 0.999999999 | 124992 |
1 | 32 | 9.31323E-10 | 1 | 32 |
2.19108E+11 |
标记后“1”的加权平均个数为6.376881392。
4.位标记相关的逻辑代数原理及0标记
字符串S的位值W的某一个位为“1”,就是意味着命题“字符串S有某个字符元或某组字符元中的一个”为真。对于两个字符串Sa和Sb,Wa的某k个位为1,就是意味着命题“字符串Sa有某k个字符元或某k组字符元中的一个”为真;如果Wb所有相应的某k个位为1,就是意味着命题“字符串Sb有某k个字符元或某k组字符元中的一个”也为真。自然,Wb可能有其它某m-k个位为1,而Wa这些某m-k个位为0。这种关系用逻辑代数公式就表示为:Wa→Wb=WT,直观易解。但是并非所有的编程语言和数据库***都有“位蕴含”运算符,所以应用中需要按逻辑代数原理进行变换。
从逻辑代数运算定理 可知,若a→b=1,则a|b=1。同样的,对于n个位的位值也有:若Wa→Wb=WT,则
Wa|Wb=WT。
也可以得到:
Wa|Wb=Wb
Wa & Wb=Wa
从逻辑运算定理 可知,
Wa→Wb=WT,则Wb→Wa=WT。
所以可用一个各“位”均为1的数据WT来标记位值,如果字符串包含某一字符元,则将相应的位标记为0,这种方式称为0标记。如:
big的位值Wa为10111101011111111111111111111111
bigger的位值Wb为10110101011111111011111111111111
显然Wb→Wa=WT。
也可以得到:
Wb|Wa=Wa
Wa & Wb=Wb
Wa & Wb=WF
用真值表比较直观:
Wa | Wb | Wa→Wb=WT | Wa & Wb=Wa | Wa|Wb=Wb | ||
0 | 0 | 1 | 0 | 0 | ||
0 | 1 | 1 | 0 | 1 | ||
1 | 0 | 0 | 0 | 1 | ||
1 | 1 | 1 | 1 | 1 |
Wa | Wb | Wb→Wa=WT | Wa & Wb=Wb | Wb|Wa=Wa | ||
1 | 1 | 1 | 1 | 1 | ||
1 | 0 | 1 | 0 | 1 | ||
0 | 1 | 0 | 0 | 1 | ||
0 | 0 | 1 | 0 | 0 |
Wa | Wb | Wa & Wb=WF | Wa | Wb | Wa|Wb=WT | |
0 | 1 | 0 | 1 | 0 | 1 | |
0 | 0 | 0 | 1 | 1 | 1 | |
1 | 1 | 1 | 0 | 0 | 0 | |
1 | 0 | 0 | 0 | 1 | 1 |
以上说明的是,如何运用最常见的位运算符进行位值比较,筛选概率的原理是相通的。当然,0标记时,m、k均指0的个数。但各编程语言和数据库提供的位运算符数量不一,其它的位运算符的具体操作,可按逻辑代数原理推出。运用逻辑代数原理,进行等价变换,得出公式当然应以简约适用为目的,而不是越变越复杂。
另外一点是,如果编程语言或数据库***提供了“位”的置1或置0的功能,则位“标记”可直接运用。如果数据库***编程语言未提供位置1,则可用位的“或”(or)运算,进行1标记。
首先对字符元进行分组,如果用32个位标记,则对第n组赋值232-n。从二进制来看,则该值自左至右第n个位为1,而其余位为0,称之为“基本位值”。将一个字符串所有字符元的“基本位值”进行“或”(or)运算,即可得到该字符串的位值。当然,也可以对第n组“基本位值”赋值2n-1,从二进制来看,则自右至左的第n个位为1,而其余位为0。实际上,在特定数据库中,对记录字符串及检索关键词进行标记,字符元与位有固定的对应即可,而不论是自右至左,还是自左至右,或者其它秩序。
如果是进行0标记,则先给第n组字符元,赋以第n个位为0而其余位为1的“基本位值”,再将特定字符串所有字符元的“基本位值”进行“和”(and)运算,即可得到该字符串的位值W。
至于标记重叠概率计算方法,0标记与1标记是相通的。
5.多位标记与分组标记
1.多位标记
在单“位”(bit)标记的基础上,下面说明多“位”(bit)标记。如果存贮位值的位数n较多,而字符串的长度少,可用j个位的组合对应一组字符元进行标记,则共有个位的组合,相应地分字符元为组,如果S的一个字符元P属于第r组,则将W中构成第r个位的组合的j个位标记为1。j为1时即上述的单“位”(bit)标记。
设n为32,j为2,则将字符元分为组,即为496组,用“1”标记,若字符元属于第1组,则将W的1、2两个“位”标记为“1”;若字符元属于第2组,则将W的1、3两个“位”标记为1,若字符元属于第3组,则将W的1、4两个“位”标记为1,…。
假设汉字“前”字的位值第2、5两个位为1,而“景”字的位值第23、29两个位为1,则词语“前景”有2、5、23、29四个位为1,又设“远”的位值第2、23两个位为1,“大”的位值第5、29两个位为1,则词语“远大”也是2、5、23、29四个位为1,用“前景”的位值检索,结果中会出现“远大”,反之亦然,即检索结果中会出现含“不相关组字符元”的字符串,但由于每一组所含的汉字较单“位”标记为少,所以可以提高筛选效果的。采用多位标记的目的是提高筛选效果,其筛选概率计算与单位标记原理是相同的。下面计算字符串长为4个字符元,检索关键词长为2个字符元,j为1、2、3、4时的筛选概率,其值越低越好:
j为2,不考虑重叠,则字符串标记后m为4*2=8个1,检索关键词标记后k为2*2=4个1。
j为3,即字符元分为组,即4960组,不考虑重叠,则字符串标记后m为4*3=12个1,检索关键词标记后k为2*3=6个1。
如果检索关键词长度为1、2个字符元时,多位标记尤其有意义。但在存贮位值n为一定时,j值不是越大越好,如上面计算显示,在n为32,m为4时,j为3效果最佳,继续增加,不能提高筛选效果,而且标记时重叠的比例会增加,标记操作也更复杂。如果对长字符串进行多位标记,n必须足够大。
2.分组标记:
如将一个无符号长整数的32位分17和15两组,分别进行标记,字符串长m为4,不考虑标记重叠的问题,标记后为4个1,设关键词长为2,标记后为2个1,则筛选概率为:
显然,也可提高筛选效果。当然,实行这种优化,同样是标记的位n要数倍于m。这种优化方式,用于长字符串时可作变通,即用两种不同的字符元分组方式,用两个数据分别标记得到两组W、W’。检索时,先以其中一组的标记方法得到关键词的Wt,与数据库的Wn值进行比较,筛选出R1后。在R1中,以第二组的标记方法得到关键词的W’t,与数据库的W’n值进行比较得到R2,再在R2中用通常的逐位比较法得到最终结果集Rz。与上一种优化方法相比,同样是增加位值的存贮空间,这种优化方式不必读取全部的W’n,与W’t进行比较。
0标记、1标记都可以进行多位标记、分组标记,分组标记也可以同多位标记结合,不同的组也可以分别是0标记、1标记。当然,适用为佳。0标记、多位标记与分组标记均可用于逆检索。
位标记字符串检索的速度快于质数代换字符检索的速度,但字符元种类多时,用一个位对应一个字符元,不易实施;如用多位标记,检索结果中,不包含“目的组字符元”而仅包含“不相关组字符元”的字符串又会混杂进来。用一个质数代换一个字符元,可避免检索结果中出现这种混杂现象,应用中,可先用位标记字符串检索作初步筛选,再用质数代换字符检索作二次检索,如需要,再用通常的字符串逐位比较方法得到最终结果。
6.位标记字符串检索技术在语音输入及汉语拼音输入中的应用:
汉语的同音字、同音词多,故汉语语音输入及拼音输入中需要按拼音筛选适当的字词,位标记方法“逆检索”可用于这个方面。
不考虑声调,汉语有400多个音节,不便于用一个位对应一个音节,可用8个字节的64个位对应汉语拼音的声母及韵母。设有汉语字词搭配及基本句型数据库,其中有基本句型“他毕业了”,拼音为“tabiyele”,标记后位值W1是:
1000,0101,0000,0000,0000,0001,1011,0000,0000,0000,0000,0000,0000,0000,0000,0000
如果语音转换或者拼音输入“tazaojiubiyele”,标记后位值Wt是:
1000,0101,0001,0010,0000,0001,1011,0000,1000,0000,1000,0000,0000,0000,0000,0000
W1→Wt=WT
则“他毕业了”是“tazaojiubiyele”可参考的基本句型,处理后可以得到“他zaojiu毕业了”,其中“毕业”为谓语,是动词,而词库中拼音为“zaojiu”的词有“早就”“造就”“枣酒”,如果语法、语义、词频等其它方面能起到辅助作用,则可进一步转换成“他早就毕业了”。由于声韵配合的多样性,以位值比较得到的初步结果中,拼音如“tebayile”之类的句型也会出现。可在位标记字符串的基础上,用一个质数对应一个音节的质数代换方法作二次筛选,得到更接近的结果。
如果字词搭配及基本句型中有“楼”与量词“栋”的搭配“栋楼”,又有“楼”与经常修饰它的形容词“高”的搭配“高楼”,可按它们的声母韵母进行标记。设语音转换或者拼音输入“zhedongxiezilouhengao”,同样按声母韵母进行标记,以数据库全部字词搭配及基本句型的位值Wn与之进行比较,可筛选出“栋楼”“高楼”等搭配作参考,处理后可以得到“zhe栋xiezi楼hen高”,其中的xiezi或xiezilou可从词库中得到“写字”或“写字楼”,如果语法、语义、词频等其它方面能起到辅助作用,可将“zhedongxiezilouhengao”转换成“这栋写字楼很高”。类似地可以得到汉语的其它搭配及相应的位值。行政区划如,“省市”“省县”;数字如,“七八”“万千”;量词“斤两”“元角”;乃至姓氏的组合“张李”“张刘”。如果输入“hubeishengxianningshi”,按照上述方法,可以得到“hubei省xianning市”。如果输入“zhanglonglihu”,可以得到“张long李hu”。如果输入“qiwansanqian”,可以得到“七万san千”。同样,可在位标记字符串的基础上,用一个质数对应一个音节的质数代换方法作二次筛选,得到更接近的结果。
另外,由于汉语声母、韵母的使用频率是不均衡的,单位标记时,以8个字节的数据的64个“位”对应汉语拼音的声母、韵母,以某些音节如li检索时,由于1与i均是高频声母、韵母,筛选效果可能不好,可以考虑用双位标记,即以n为32,j为2,即496组位,对应汉语的400个音节,并对数据库作测算,使之尽可能均衡。当然,按400个音节用双位标记,初步结果中肯定会出现“非目的”句型和搭配,可在位标记检索筛选的基础上,用一个质数对应一个音节的质数代换方法作二次筛选,得到更接近的结果。
汉语分词中也可运用此项技术,将词库中的词语、参考搭配及句型,按拼音标记位值,关键词(实际是句子)也按拼音标记位值,进行位蕴含运算,得到Ri,可以有效地缩小查找范围;当然也可以将词库中的词语、参考搭配及句型,按内码的分组标记位值,关键词也按同样的分组标记位值,进行位蕴含运算,同样可以有效地缩小查找范围,再辅以其它方法完成对关键词(也就是句子)的分解。
英语中由于连读、语音流变现象多,不似汉语音节分明清晰,也可用位标记字符串检索技术筛选参考词汇、短语。设数据库有短语in the morning,按其中的元音、辅音i、n、、、m、:、n、i、进行标记得到位值。设语音输入转换后,其中的the所对应的比较模糊,可以剔除,以其它比较响亮的i、n、m、:、n、i、进行标记得到位值,以之与数据库参考词汇、短语的位值进行比较,可以得短语in the morning,及其它读音含i、n、m、:、n、i、的短语或单词。在此基础上,用质数代换音节的方法进一步缩小范围,然后再根据上下文,以语法、语义、词频作辅助,选择in the morning。
以上叙述了位标记字符串检索的方法及相关的概率计算公式、逻辑代数原理,并侧重于数据库中的字符串记录的筛选。从编程角度看,数据库的数据结构是多种多样的,各种数据结构也不只用于数据库。但位标记字符串检索技术作为一种字符串算法,可用于各种数据结构的字符串查找,如大数组中的字符串模糊查找。至于小数组之字符串模糊查找,则未必有需要,因为字符串的标记也需时间及空间。
具体实施方式
本发明在汉字字符串数据库及英文字符串数据库模糊检索中已得到良好的实现,下面是对SQL SERVER2000中的汉字字符串数据库,以“1”进行标记的vb6.0代码,其它编程语言、数据库的位标记字符串模糊检索可参照实施。
1.建立数据库
设数据库shuku有表biao,其中有字段shuming,数据类型为nvarchar,长度为40。另建立字段wei,数据类型为“长整型”,也就是4个字节,有32个位,其中一“位”为符号位,其余31个位可以用于标记。
2vb6.0中没有直接将“位”置为“1”或“0”的命令,故利用位的“或”运算对数据库字符串作“标记”
dim shuzu(30)As Long
‘定义一个31个元素的长整型数组。
shuzu(0)=1
For x=1 To 30
shuzu(x)=2*shuzu(x-1)
Next
‘对长整型数组的31个元素赋值,从1、2、4、8、16至1073741824,从二进制来看,有一位为1,而其余位为0,也就是“基本位值”。
Dim biaostr As String
‘存贮当前处理的字符串
Dim weizhi As Long
‘存贮字符串的位值
Dim weizhilin As Long
‘存贮一个字符的基本位值
Dim x As Integer
biaors.MoveFirst
‘移至数据库记录集biaors的第一个记录
Do
weizhilin=0
weizhi=0
With biaors
biaostr=.Fields("shuming")
End With
‘读入一个记录之字符串,赋与字符串变量biaostr
For x=1 To Len(biaostr)
index=Abs(AscW(Mid(biaostr,x,1))Mod 31)
‘从字符串变量biaostr中取一个字符,并将该字符内码,以31为模作运算,再取绝对值,并赋与index,也就是对字符元进行分组。
weizhilin=shuzu(index)
‘将数组shuzu(index)值赋与weizhilin,是1、2、4、8、16至1073741824之一。
weizhi=weizhi Or weizhilin
‘将一个字符的“基本位值”weizhilin值与weizhi作位的“或”运算。
Next
‘循环结束,获得当前字符串的“位值”weizhi
With biaors
.Fields("wei")=weizhi
End With
biaors.Update
‘将“位值”weizhi存贮进当前记录的字段wei中
biaors.MoveNext
‘处理下一个记录
Loop While Not biaors.EOF
3.利用位的“和”运算进行数据库字符串模糊检索
Dim shuzu(30)As Long
shuzu(0)=1
For x=1 To 30
shuzu(x)=2*shuzu(x-1)
Next
‘定义一个31个元素的长整型数组,赋值从1、2、4、8、16至1073741824,与“标记”之数组完成一致。
Dim weizhi As Long
‘存贮一个字符串的位值
Dim weizhilin As Long
‘存贮一个字符的位值
Dim textstr As String
‘存贮检索字符串
Dim x As Integer
weizhilin=0
weizhi=0
textstr=Text1.Text
‘Text1.Text为文本框中的检索关键词
Forx=1To Len(biaostr)
index=Abs(AscW(Mid(textstr,x,1))Mod31)
weizhilin=shuzu(index)
weizhi=weizhi Or weizhilin
Next
‘对检索关键词进行标记得到“位值”weizhi,方法与数据库字符串“标记”方法一致。
strQuery="select*from(SELECT*FROM biao WHERE(wei&"& weizhi &")="&weizhi &")DERIVEDTBL WHERE(shuming like′%"& textstr &"%′)"
‘SQL SERVER 2000中没有位蕴含运算符,这里将检索关键词的“位值”weizhi与数据库各记录的“位值”wei作“和”(and)运算,筛选出“和”(and)运算结果等于关键词的“位值”weizhi的记录(也可以用(wei|"& weizhi &")=wei),得到初步结果集Ri,再以通常字符串模糊检索方式作二次检索,得到最终结果Rz。这是SQL SERVER 2000的查询语句,其它数据库可能略有不同。
Adodc1.RecordSource=strQuery
Adodc1.Refresh
‘执行检索
DataList1.ListField="shuming"
DataList1.ReFill
‘在列表框中显示当前检索结果。
Claims (5)
1.一种字符串糊检索技术,其特征在于:
W指一个数据的n个均为0的位(bit),用W来标记构成字符串的字符元信息,以其中j个位(j=1,2,3,…)为一个组合,则共有个位的组合,相应地分全部字符元为组,以一个位的组合对应一组字符元,进行标记。如果若干个字符串S的一个字符元P1属于第r组,则将W的构成第r个位的组合的j个位标记为1,类似地,根据S的其它字符元P2、P3、P4…所属的组对W进行标记,完成全部字符元标记后的W,记录有S的字符元信息,称为若干个字符串S的“位值”,此种方式称为1标记。
W指一个数据的n个均为1的位(bit),用W来标记构成字符串的字符元信息,以其中j个位(j=1,2,3,…)为一个组合,则共有个位的组合,相应地分全部字符元为组,以一个位的组合对应一组字符元,进行标记。如果若干个字符串S的一个字符元P1属于第r组,则将W的构成第r个位的组合的j个位标记为0,类似地,根据S的其它字符元P2、P3、P4…所属的组对W进行标记,完成全部字符元标记后的W,记录有S的字符元信息,称为若干个字符串S的“位值”,此种方式称为0标记。
记Sa的1标记“位值”为Wa,记Sa的0标记“位值”为Wa,记Sb的1标记“位值”为Wb,记Sb的0标记“位值”Wb,下面方法均可用于字符串比较:
或者,I.Sa和Sb均用1标记,以Wa与Wb进行比较,如果所有Wa为1的位,Wb相应的位也为1,则Sb包含(含等于,下同)或可能包含Sa的所有字符元。
或者,II.Sa和Sb均用0标记,以Wb与Wa进行比较,如果所有Wb为1的位,Wa相应的位也为1,则Sb包含或可能包含Sa的所有字符元。
或者,III.Sa用1标记而Sb用0标记,以Wa与Wb进行比较,如果Wb与Wa所有相应的位,不同时为1,则Sb包含或可能包含Sa的所有字符元。
或者,IV.Sa用0标记而Sb用1标记,以Wa与Wb进行比较,如果Wa与Wb所有相应的位,不同时为0,则Sb包含或可能包含Sa的所有字符元。
2.按照权利要求1所述的方法,其特征在于:用位运算符对Wa、Wa与Wb、Wb进行比较的具体操作方法有多种。例如,记所有位为1的W为WT,则方法I可用Wa→Wb=WT、Wa|Wb=Wb、Wa&Wb=Wa实现,至于方法I使用其它位运算符实现,以及方法II、III、IV实现的具体操作方法,均可按逻辑代数原理得出。
3.按照权利要求1所述的方法,其特征在于:通过对Wa、Wa与Wb、Wb进行比较,若不符合判断标准,则Sb不包含Sa的所有字符元,即不包含Sa。若符合判断标准,单位标记且每组中只有一个字符元,则Sb包含“Sa的所有字符元”,但由于未考虑字符元的排列,不能肯定Sb是否包含“Sa”。若符合判断标准,单位标记而每组中有多个字符元,或者多位标记,则Sb只是“可能”包含“Sa的所有字符元”,更不能肯定Sb是否包含Sa。但根据需要,可再用字符逐位比较方法判断Sb是否包含“Sa”。
4.按照权利要求1所述的方法,其特征在于:字符元可以是通常意义的字符,根据需要,可以是汉字偏旁、笔画;汉语拼音的字母、声母、韵母、音节;其它语言的字母、音节、单词;汉语拼音的字母、声母、韵母、音节;其它语言的音标;也可以是它们的结合。
5.按照权利要求1所述的方法,其特征在于:“若干个字符串”是S的同位概念,强调S指一个或多个字符串。就是说,位标记字符串检索,进行比较的W或W值,均可以是一个字符串的字符元的标记信息,也可以是多个字符串所有字符元的标记信息。
6 按照权利要求1所述的方法,其特征在于:检索关键词St有值Wt、Wt,而字符串S1、S2、S3、S4…有各自的位值W1、W2、W3、W4…或W1、W2、W3、W4、…。通过对Wt、Wt与Wn、Wn进行比较:既可以筛选出“包含或可能包含检索关键词St的所有字符元”的Sn,如果需要,再用字符逐位比较方法判断Sn是否包含“St”,即通常意义的检索;反之,也可以筛选出“检索关键词St包含或可能包含其所有字符元”的Sn,如果需要,可再用字符逐位比较方法判断St是否包含“Sn”,称为逆检索,
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN200510057491.4A CN101488127B (zh) | 2005-01-17 | 2005-09-13 | 对字符分组并以位标记的字符串模糊检索方法 |
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN200510023383.5 | 2005-01-17 | ||
CNA2005100233835A CN1645374A (zh) | 2005-01-17 | 2005-01-17 | 位标记字符串检索技术 |
CN200510057491.4A CN101488127B (zh) | 2005-01-17 | 2005-09-13 | 对字符分组并以位标记的字符串模糊检索方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN101488127A true CN101488127A (zh) | 2009-07-22 |
CN101488127B CN101488127B (zh) | 2015-01-07 |
Family
ID=34875846
Family Applications (2)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CNA2005100233835A Pending CN1645374A (zh) | 2005-01-17 | 2005-01-17 | 位标记字符串检索技术 |
CN200510057491.4A Active CN101488127B (zh) | 2005-01-17 | 2005-09-13 | 对字符分组并以位标记的字符串模糊检索方法 |
Family Applications Before (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CNA2005100233835A Pending CN1645374A (zh) | 2005-01-17 | 2005-01-17 | 位标记字符串检索技术 |
Country Status (2)
Country | Link |
---|---|
CN (2) | CN1645374A (zh) |
WO (1) | WO2006074586A1 (zh) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102682033A (zh) * | 2011-03-17 | 2012-09-19 | 环达电脑(上海)有限公司 | 通过二进制特征值匹配以查询文字的方法 |
CN103870537B (zh) * | 2013-12-03 | 2017-02-01 | 山东金质信息技术有限公司 | 一种标准检索智能分词方法 |
CN106933938A (zh) * | 2015-12-30 | 2017-07-07 | 唯溥思株式会社 | 利用多字节编码的文献检索方法及文献索引方法 |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP4271227B2 (ja) * | 2006-10-30 | 2009-06-03 | 株式会社エスグランツ | ビット列検索装置、検索方法及びプログラム |
CN101794283A (zh) * | 2009-02-03 | 2010-08-04 | 华为技术有限公司 | 字符串处理方法及***和匹配器 |
Family Cites Families (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2669601B2 (ja) * | 1994-11-22 | 1997-10-29 | インターナショナル・ビジネス・マシーンズ・コーポレイション | 情報検索方法及びシステム |
JP3636941B2 (ja) * | 1999-07-19 | 2005-04-06 | 松下電器産業株式会社 | 情報検索方法と情報検索装置 |
JP4298138B2 (ja) * | 2000-06-21 | 2009-07-15 | 株式会社日立製作所 | 情報検索方法及びその実施装置並びにその処理プログラムを記録した記録媒体 |
US6785677B1 (en) * | 2001-05-02 | 2004-08-31 | Unisys Corporation | Method for execution of query to search strings of characters that match pattern with a target string utilizing bit vector |
JP2003152548A (ja) * | 2001-11-14 | 2003-05-23 | Canon Inc | データ圧縮における文字列検索方法 |
-
2005
- 2005-01-17 CN CNA2005100233835A patent/CN1645374A/zh active Pending
- 2005-09-13 CN CN200510057491.4A patent/CN101488127B/zh active Active
- 2005-10-08 WO PCT/CN2005/001642 patent/WO2006074586A1/zh not_active Application Discontinuation
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102682033A (zh) * | 2011-03-17 | 2012-09-19 | 环达电脑(上海)有限公司 | 通过二进制特征值匹配以查询文字的方法 |
CN103870537B (zh) * | 2013-12-03 | 2017-02-01 | 山东金质信息技术有限公司 | 一种标准检索智能分词方法 |
CN106933938A (zh) * | 2015-12-30 | 2017-07-07 | 唯溥思株式会社 | 利用多字节编码的文献检索方法及文献索引方法 |
Also Published As
Publication number | Publication date |
---|---|
CN1645374A (zh) | 2005-07-27 |
CN101488127B (zh) | 2015-01-07 |
WO2006074586A1 (fr) | 2006-07-20 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Chang et al. | Automatic information extraction from semi-structured web pages by pattern discovery | |
Oakley | ǂa ǂcommentary on Livy, Books Vi-X.: Introduction and Book Vi | |
Hsu et al. | Space-efficient data structures for top-k completion | |
US5649023A (en) | Method and apparatus for indexing a plurality of handwritten objects | |
CN102419778B (zh) | 一种挖掘查询语句子话题并聚类的信息搜索方法 | |
CN100483417C (zh) | 获取限制词信息的方法、优化输出的方法和输入法*** | |
CN102063508B (zh) | 基于广义后缀树的中文搜索引擎模糊自动补全方法 | |
CN100501745C (zh) | 电子文本处理与检索的便捷方法和*** | |
JPH0675992A (ja) | テキストをインデックス及び検索するための関連ワード形態の限定状態トランスジューサ | |
CN102314647A (zh) | 一种利用xbrl进行的企业数据存储的方法 | |
WO2004109492A1 (fr) | Procede et appareil de traitement et de representation d'objets | |
US7676487B2 (en) | Method and system for formatting and indexing data | |
CN104778256A (zh) | 一种领域问答***咨询的快速可增量聚类方法 | |
CN101488127B (zh) | 对字符分组并以位标记的字符串模糊检索方法 | |
CN101136013A (zh) | 一种在全文检索***中快速更新数据域的方法 | |
CN103823814A (zh) | 一种信息处理方法及装置 | |
CN1851705A (zh) | 基于本体的主题式网络爬虫***构建方法 | |
CN106681981A (zh) | 中文词性的标注方法和装置 | |
CN111882462A (zh) | 一种面向多要素审查标准的中文商标近似检测方法 | |
CN101499056A (zh) | 倒排参考句型语言分析方法 | |
CN102033956A (zh) | 具有智能提示功能的图形化xml内容和结构查询*** | |
JP4219122B2 (ja) | 特徴語抽出システム | |
CN101436194B (zh) | 一种基于数据挖掘技术的文本多精度表示方法 | |
CN107145947A (zh) | 一种信息处理方法、装置及电子设备 | |
Deguchi et al. | Lightweight parameterized suffix array construction |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant |