中文搜索引擎的制作方法

文档序号:6473878阅读:181来源:国知局
专利名称:中文搜索引擎的制作方法
技术领域
本实用新型涉及一种中文搜索引擎。
背景技术
对文字的搜索技术,常见有遍历和折半查找等技术。在中文字词的搜索技术中,一般用遍历等方法,即一条一条词目进行对比查找。
这种搜索方法随机性强,采用简单的算法则需要相当的时间方可获得结果,而采用复杂的方法又对处理的效率和内存空间需求也相当大。因此,对于中等规模的中文字词数据量的搜索应用,如中文字典,这种方法便不适用了。总之,采用现的搜索方法在中文字典中定位文字时,速度均比较慢,从而导致效率低下。
实用新型内容本实用新型提供一种中文搜索引擎,以解决现有技术在中文字典中定位字时存在效率低的问题。
为解决上述问题,本实用新型提供以下技术方案一种中文字典搜索引擎,用于从所述中文字典中快速定位输入的中文字,所述中文字典内的中文字采用GB2312/GBK编码;其特征在于包括第一模块,其中存储有用于建立和保存中文字典内中文字的GB2312/GBK编码与该中文字在所述中文字典中相对于中文字典起始位置的字典内偏移量之间的对应关系的索引表;第二模块,其接收输入的中文字,并利用该中文字的GB2312/GBK编码从所述第一模块的索引表中查找得到对应的字典内偏移量,并输出所述字典内的偏移量至第三模块;
第三模块,用于根据中文字典的起始存储位置和所述字典内偏移量,直接在该中文字典中定位所述输入的中文字并输出。
所述第二模块包括第一单元,接收输入的中文字的第一字节,并根据输入的中文字的第一字节所表示的GB2312/GBK表编号和所述索引表的起始位置,计算出该中文字所在的GB2312/GBK表中第一个中文字的编码在所述索引表中的起始位置;第二单元,接收输入的中文字的第二字节,并根据所述输入的中文字的第二字节所表示的该中文字在GB2312/GBK表中的行号和列号,计算出该中文字相对于GB2312/GBK表中第一个字的表内偏移量;第三单元,接收来自所述第一单元的起始位置,和来自所述第二单元的表内偏移量,并根据所述起始位置和表内偏移量确定出该中文字的编码在索引表的位置,并读取字典内偏移量。
本实用新型将中文字典内中文字相对于该中文字典的起始位置的字典内偏移量,按GB2312/GBK编码表和对应中文字的GB2312/GBK编码顺序保存以形成索引表,根据输入中文字的GB2312/GBK编码来查询到对应的字典内偏移量,最后根据字典内偏移量和中文字典的起始位置来定位中文字,因而,使每个字词的搜索时间基本固定可控,不仅定位中文字的时间短和效率高,而且在定位过程中占用的资源少,可节省内存及存储器空间。


图1、图2为本实用新型中两种索引表的示意图;图3、图4分别为采用图1、图2所示索引表实现字定位的流程图。
图5为本实用新型的中文搜索引擎的结构框图。
具体实施方式
本实用新型通过采用以中文字的GB2312或GBK编码排序方式从中文字典中定位输入的中文字。其核心思想是将中文字典内中文字相对于该中文字典的起始位置的字典内偏移量形成索引表,根据输入中文字的GB2312/GBK编码来从索引表中获取该中文字对应的字典内偏移量,最后根据字典内偏移量和中文字典的起始位置来直接定位中文字。
根据上述的描述,本实用新型可以得到从中文字典中快速定位输入的中文字的中文字典搜索引擎,该搜索引擎与计算机装置中处理器、存储器和输入设备部件实现中文字定位。如图5所示,中文引擎包括第一模块,其中存储有用于建立和保存中文字典内中文字的GB2312/GBK编码与该中文字在所述中文字典中相对于中文字典起始位置的字典内偏移量之间的对应关系;第二模块,其接收输入的中文字,并利用该中文字的GB2312/GBK编码从所述第一模块的索引表中查找得到对应的字典内偏移量,并输出所述字典内的偏移量至第三模块;第三模块,用于根据中文字典的起始存储位置和所述字典内偏移量,直接在该中文字典中定位所述输入的中文字并输出。
上述第二模块包括第一单元,接收输入的中文字的第一字节,并根据输入的中文字的第一字节所表示的GB2312/GBK表编号和所述索引表的起始位置,计算出该中文字所在的GB2312/GBK表中第一个中文字的编码在所述索引表中的起始位置;第二单元,接收输入的中文字的第二字节,并根据所述输入的中文字的第二字节所表示的该中文字在GB2312/GBK表中的行号和列号,计算出该中文字相对于GB2312/GBK表中第一个字的表内偏移量;第三单元,接收来自所述第一单元的起始位置,和来自所述第二单元的表内偏移量,并根据所述起始位置和表内偏移量确定出该中文字的编码在索引表的位置,并读取字典内偏移量。
同样,另外一种搜索引擎(其结构参考图5)包括第一模块,其中存储有用于按GB2312/GBK编码表和对应中文字的GB2312/GBK编码顺序,保存中文字典内中文字相对于该中文字典的起始位置的字典内偏移量的索引表;第二模块,其接收输入的中文字,并根据输入中文字的编码中第一字节所表示的GB2312/GBK表编号和第二字节所表示的该中文字在GB2312/GBK表中的行号和列号,计算出该中文字所对应的字典内偏移量在所述第一模块中的位置,并从第一模块读取字典内偏移量;第三模块,用于根据中文字典的起始存储位置和所述第二模块输出的字典内偏移量,直接在该中文字典中定位所述输入的中文字并输出。
所述第二模块包括第一单元,接收输入的中文字的第一字节,并根据输入的中文字的第一字节所表示的GB2312/GBK表编号和所述索引表的起始位置,计算出该中文字所在的GB2312/GBK表中第一个中文字的编码在所述索引表中的起始位置;第二单元,接收输入的中文字的第二字节,并根据所述输入的中文字的第二字节所表示的该中文字在GB2312/GBK表中的行号和列号,计算出该中文字相对于GB2312/GBK表中第一个字的表内偏移量;第三单元,接收所述第一单元输出的起始位置和所述第二单元输出的表内偏移量,并根据所述起始位置和表内偏移量确定出该中文字的编码在索引表的位置,并读取字典内偏移量。
对采用GB2312编码的中文字的定位处理与上述方法同理,不再赘述。
下面将结合附图1、2,详细描述本实用新型的工作原理。
汉字的GBK编码和GB2312编码都是一种国家制定的中文编码表,由两个字节描述一个汉字。GBK是GB2312的扩展编码。本实施例主要以GBK编码为例进行说明。
基本GBK表格式如下CC 0 1 2 3 4 5 6 7 8 9 A B C D E F4 藹 藺 藼 藽 藾 蘀 蘁 蘂 蘃 蘄 蘆 蘇 蘈 蘉 蘊 蘋5 蘌 蘍 蘎 蘏 蘐 蘒 蘓 蘔 蘕 蘗 蘘 蘙 蘚 蘛 蘜 蘝6 蘝 蘟 蘠 蘡 蘢 蘣 蘤 蘥 蘦 蘨 蘪 蘫 蘬 蘭 蘮 蘯7 蘰 蘱 蘲 蘳 蘴 蘵 蘶 虁 蘹 蘺 蘻 蘽 蘾 蘿 虀8 虁 虂 虃 虄 虅 虆 虇 虈 虉 虊 虋 虌 虒 虓 處 虖9 虗 虘 虙 虛 虜 虝 號 虠 虡 虣 虤 虥 虦 虧 虨 虩
A 虪 獭 挞 蹋 踏 胎 苔 抬 台 泰 酞 太 态 汰 坍 摊B 贪 瘫 滩 坛 檀 痰 潭 谈 坦 毯 袒 碳 探 叹 炭C 汤 塘 搪 堂 棠 膛 唐 糖 倘 躺 淌 趟 烫 掏 涛 滔D 绦 萄 桃 逃 淘 陶 讨 套 特 藤 腾 疼 誊 梯 剔 踢E 锑 提 题 蹄 啼 体 替 嚏 惕 涕 剃 屉 天 添 填 田F 甜 恬 舔 腆 挑 条 迢 眺 跳 贴 铁 帖 厅 听 烃中文字GBK编码为两个字节,其中第一字节为该表(Table)的编号,其范围为81~FE;第二字节的高四位为行(Row)标号,其范围为4~F,第二字节的低四位为列(Column)标号,其范围为0~F。例如表中“谭”字的编码为CCB7。
对于GBK一共有FE-81+1=254-129+1=126个表,每个表有F-4+1=15-4+1=12行,每个表有F-0+1=15-0+1=16列。因此,每个表包含16(列)×12(行)=192个汉字,总共有126(表)×192(字)=24192字。
字典中的文字顺序可以随意排列。只是这个字后的词,必须仅跟其后,以便在定位到第一个字时,能够快速的查询到以该字开头的词。如人人民人员阿阿姨阿妹在本实施例中,索引表的建立可以采用两种方式(但不限于两种)一种方式是采用中文字典内中文字的GBK编码与该中文字在所述中文字典中相对于中文字典起始位置的字典内偏移量之间的对应关系,将中文字的GBK编码作为索引。
如图1所示,在索引表中,中文字的GBK编码按升序排列,中文字典中排列的中文字相对于该字典的起始位置的偏移量占用4个字节。如图中所示,GBK表的第一个表即编号为“81”的GBK表在索引表的最前面,该GBK中的字按行的先后顺序排列。如表开始位置的索引编码为“8140”,即代表81号GBK表中的第一个字,该编码对应的是该字在中文字典中相对于字典起始位置的偏移量;开始位置之后的编码为“8411”,即代表81号GBK表中的第二个字,以此类推。
在获取该中文字对应的字典内偏移量时根据输入的中文字的GBK编码来从索引表中查询到对应的偏移量。
第二种方式是将中文字典内中文字相对于该中文字典的起始位置的字典内偏移量,按GBK编码表和对应中文字的GBK编码顺序保存来建立索引表。
如图2所示,在索引表中,字典内偏移量的排列顺序与中文字的GBK编码升序排列相对应。如图中所示,索引表从开始位置起的连续4个字节保存的是GBK表的第一个表即编号为“81”的GBK表中的第一个字(即GBK编码为“8410”)对应的字典内偏移量,在之后的连续4个字节为第二个字对应的偏移量。以此类推。
在建立索引表过程中,如果某一个GBK编码之后的编码所代表的字不在中文字典中,则在图1的索引表中将相应位置的编码置空,在图2所示的索引表中将相应位置的字典内偏移量置空。置空是指设置特定的与其他编码或字典内偏移量不同的标记。
因此,根据索引表的不同,字定位的实现有所有不同。采用图1所示索引表实现字定位的过程如图3所示步骤1、建立中文字典内中文字的GBK编码与该中文字在所述中文字典中相对于中文字典起始位置的字典内偏移量之间的对应关系,如图1所示。
步骤2、根据输入的中文字的第一字节所表示的GBK表编号和所述索引表的起始位置,确定该中文字所在的GBK表中第一个中文字的编码在所述索引表中的起始位置。
步骤3、根据所述输入的中文字的第二字节所表示的该中文字在GBK表中的行号和列号,计算出该中文字相对于GBK表中第一个字的表内偏移量。
步骤4、根据所述起始位置和所述表内偏移量确定出该中文字的编码在索引表的位置,并读取字典内偏移量。
步骤5、根据中文字典的起始存储位置和所述字典内偏移量直接在该中文字典中定位所述输入的中文字。
为了能对空字符及时给予提示,在步骤4中,读取字典内偏移量之前判断对应的GBK编码是否为空,如果是则结束定位并提示该输入的中文字不在中文字典中,否则继续步骤5。
采用图2所示索引表实现字定位的过程如图4所示步骤11、将中文字典内中文字相对于该中文字典的起始位置的字典内偏移量,按GBK编码表和对应中文字的GBK编码顺序保存以形成索引表;步骤12、根据输入的中文字的第一字节所表示的GBK表编号和所述索引表的起始位置,确定该中文字所在的GBK表中的第一个中文字对应的字典内偏移量在所述索引表的起始位置;步骤13、根据所述输入的中文字的第二字节所表示的该中文字在GBK表中的行号和列号,计算出该中文字在GBK表中相对于第一个中文字的表内偏移量;步骤14、根据所述第一个中文字对应的偏移量和所述表内偏移量确定出该中文字对应的字典内偏移量在所述索引表中的位置,并读取字典内偏移量。
步骤15、根据中文字典的起始存储位置和所述字典内偏移量直接在该中文字典中定位所述输入的中文字。
为了能对空字符及时给予提示,在步骤14读取偏移量之前还判断偏移量是否为空,如果是则结束定位并提示该输入的中文字不在中文字典中,否则继续步骤15。
从以下可看出,两者的区别在于索引表和在索引表中获取偏移量有所区别。对表的对于图1所示的索引表,主要根据是根据输入的中文字的GBK编码来定位该编码在索引表的位置,对于图2所示的索引表,主要根据输入的中文字的GBK编码来定位对应的偏移量在索引表中的位置。下面通过字典内偏移量占用4字节(byte)空间来说明。
(1)根据输入的中文字的GBK编码中第一字节编码计算出该字所在GBK表的定位号7E(总表数)-(FE-第一字节编码)-1,其中以81为起始,FE为终结,起始号81为0。
(2)输入的中文字所在的GBK表在索引表中的起始位置定位号×192(每个表的字数)×N;对于图1的索引,N为2,即每个字的GBK编码的字节数(如果编码与对应的字典内偏移量连续存放,即前两个字节为编码,紧接着的为4个字节的字典内偏移量,在这种情况下N就为2+4,即6个字节);对于图2,N为4,即每个字典内偏移量占用的字节数。
(3)根据输入的中文字的GBK编码的第二字节计算出字的表内偏移量[192(总字数)-(256-第二字节编码(Hex))]×N,其中,256为最后字编码(FF)+1;对于图1的索引,N为2+4,即每个字的GBK编码的字节数;对于图2,N为4,即每个字典内偏移量占用的字节数。
(4)将GBK表在索引表中的起始位置加上表内偏移量即可获得输入的中文字对应的字典内偏移量。
显然,本实用新型的索引表还可以是其他形式,因此,本领域的技术人员可以对本实用新型进行各种改动和变型而不脱离本实用新型的精神和范围。这样,倘若对本实用新型的这些修改和变型属于本实用新型权利要求及其等同技术的范围之内,则本实用新型也意图包含这些改动和变型在内。
权利要求1.一种中文字典搜索引擎,用于从所述中文字典中快速定位输入的中文字,所述中文字典内的中文字采用GB2312/GBK编码;其特征在于包括第一模块,其中存储有用于建立和保存中文字典内中文字的GB2312/GBK编码与该中文字在所述中文字典中相对于中文字典起始位置的字典内偏移量之间的对应关系的索引表;第二模块,其接收输入的中文字,并利用该中文字的GB2312/GBK编码从所述第一模块的索引表中查找得到对应的字典内偏移量,并输出所述字典内的偏移量至第三模块;第三模块,用于根据中文字典的起始存储位置和所述字典内偏移量,直接在该中文字典中定位所述输入的中文字并输出。
2.如权利要求1所述的中文字典搜索引擎,其特征在于,所述第二模块包括第一单元,接收输入的中文字的第一字节,并根据所述第一字节所表示的GB2312/GBK表编号和所述索引表的起始位置,计算出该中文字所在的GB2312/GBK表中第一个中文字的编码在所述索引表中的起始位置;第二单元,接收输入的中文字的第二字节,并根据所述第二字节所表示的该中文字在GB2312/GBK表中的行号和列号,计算出该中文字相对于GB2312/GBK表中第一个字的表内偏移量;第三单元,接收来自所述第一单元的起始位置,和来自所述第二单元的表内偏移量,并根据所述起始位置和表内偏移量确定出该中文字的编码在索引表的位置,并读取字典内偏移量。
3.一种中文字典搜索引擎,用于从所述中文字典中快速定位输入的中文字,所述中文字典内的中文字采用GB2312/GBK编码;其特征在于包括第一模块,其中存储有用于按GB2312/GBK编码表和对应中文字的GB2312/GBK编码顺序,保存中文字典内中文字相对于该中文字典的起始位置的字典内偏移量的索引表;第二模块,其接收输入的中文字,并根据输入中文字的编码中第一字节所表示的GB2312/GBK表编号和第二字节所表示的该中文字在GB2312/GBK表中的行号和列号,计算出该中文字所对应的字典内偏移量在所述第一模块中的位置,并从第一模块读取字典内偏移量;第三模块,用于根据中文字典的起始存储位置和所述第二模块输出的字典内偏移量,直接在该中文字典中定位所述输入的中文字并输出。
4.如权利要求3所述的中文字典搜索引擎,其特征在于,所述第二模块包括第一单元,接收输入的中文字的第一字节,并根据输入的中文字的第一字节所表示的GB2312/GBK表编号和所述索引表的起始位置,计算出该中文字所在的GB2312/GBK表中第一个中文字的编码在所述索引表中的起始位置;第二单元,接收输入的中文字的第二字节,并根据所述输入的中文字的第二字节所表示的该中文字在GB2312/GBK表中的行号和列号,计算出该中文字相对于GB2312/GBK表中第一个字的表内偏移量;第三单元,接收所述第一单元输出的起始位置和所述第二单元输出的表内偏移量,并根据所述起始位置和表内偏移量确定出该中文字的编码在索引表的位置,并读取字典内偏移量。
专利摘要本实用新型公开了一种中文字典搜索引擎,用于从中文字典中快速定位输入的中文字,所述中文字典内的中文字采用GB2312/GBK编码;包括第一模块,用于建立和保存中文字典内中文字的GB2312/GBK编码与该中文字在中文字典中相对于中文字典起始位置的字典内偏移量之间的对应关系;第二模块,用于接收输入的中文字,并利用该中文字的GB2312/GBK编码从第一模块得到对应的字典内偏移量;第三模块,用于根据中文字典的起始存储位置和字典内偏移量,直接在该中文字典中定位所述输入的中文字并输出。本实用新型采用以中文字的GB2312/GBK编码排序方式从中文字典中定位输入的中文字,速度快,在定位过程中占用资源少。
文档编号G06F17/20GK2869995SQ20042012225
公开日2007年2月14日 申请日期2004年12月31日 优先权日2004年12月31日
发明者谭帅 申请人:北京中星微电子有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1