专利名称:一种字符数据的检索方法
技术领域:
本发明涉及一种数据检索技术,尤其是字符类数据的检索方法。
背景技术:
用户在进行词典类数据的查询操作中,用户往往出现不能十分确定查询关键字的具体拼写的情况;或者,用户需要查询具有部分相同字符的数据。针对以上两种情况,可以依据用户输入的不确定的字符串,从源数据中查找出一系列与之相似的数据,供用户参考,同时也支持包括通配符的关键字的查找。在关键字中加入通配符“?”或“*”以查找所有与之预期相同或者相近的字符数据。其中通配符“?”匹配文件名中的单个字符,而通配符“*”匹配零个或多个字符。例如data?.dat的模式所能查找到的文件包括data1.dat或者dataN.dat;当使用′*′字符代替′?′字符时(即data*.dat的模式),则会扩大检索出的文件范围,则下列名称的文件将出现在查询结果中data12222.dat或者data12XF.dat等。
如本领域技术人员所知,关键字的查找方法是对源数据中所有数据逐一进行比对。所述源数据通常是保存在磁盘上的单词索引文件。由于对磁盘操作的速度较慢,并且逐一进行对比的算法较为繁琐,因而,现有技术不能提供更高的检索速度。现有技术的一种改进方法是先将磁盘文件中的数据读入内存,进而在内存中进行字符匹配的操作,但是由于不同检索应用中的索引文件大小不同,尤其在索引文件较大的情况下,将其全部读入内存会占用相当部分的内存空间,进一步由于该改进方法仅改变了匹配操作的环境,而依然沿用了现有技术中较为繁琐的字符匹配算法,因而所述对现有技术的改进并没有明显的提高字符查找的速度。
发明内容
本发明的目的是提供一种字符数据的查找方法,该方法能够快速的反馈与关键字相似的字符数据。
为解决上述技术问题,本发明的目的是通过以下技术方案实现的1)提取源数据库中字符数据的前两位字母组合作为索引项建立索引;2)记录每个索引项所对应的字符数据的存储地址;3)加载所述索引到内存;以及,4)根据输入关键字的前两位字母加载该字母组合索引项对应的字符数据到内存;5)遍历内存中的字符数据,输出与关键字匹配的数据。
在上述方法基础上,1)中进一步包括建立一位字母组合的索引项,该索引项对应于以该字母为首字母,且前两位为字母与非字母组合的字符数据;以及,4)之前还包括查找索引中是否有与输入关键字前两位字符相匹配的索引项,若有则进行4),否则加载与输入关键字首位字符相匹配的索引项到内存。
上述方法中,3)中进一步将索引保存到哈希表。所述源数据库中字符数据按字符顺序进行排列;则2)具体为记录确定的索引项所对应第一个字符数据的地址,以及进一步记录包括确定的索引项所对应字符数据的数量。本发明所述非字母字符包括空格符、数字、分隔符等。
以上技术方案可以看出,本发明是一种字符数据的检索方法,该方法中,在设计索引文件的时候建立了二级索引,及将所有字符数据最前面的两个字母作为二级索引项,并记录每二级索引项所对应单词的存储位置;并且,在每次查词操作的时候仅根据查找关键字的前两位字符加载相应的字符数据到内存,进而在该字符数据的集合范围内进一步遍历进行匹配操作等。因而,本发明具有查词速度快的优点。
进一步,本发明采用哈希表管理二级索引的信息,即在每次程序运行时,将所述二级索引与索引项下字符数据的存储位置读入哈希表,以便于之后的查找。每次对源模型的查找只需要对用户输入的关键字进行分析,剥离出二级索引,再对哈希表进行查找从而找到相对索引项的偏移并将从此偏移开始的单词集合块读入内存从而进行查找和匹配。这样不仅进一步降低了内存占有量,也提升了匹配速度。
图1为二级索引结构图;图2为本发明实施例流程图;图3为目标模型与源模型匹配流程图。
具体实施例方式
本发明涉及字符数据的检索方法。其中包括以下概念。
源数据指所有被搜索的数据。如在电子词典中,所述源数据即指所有单词或词组的集合,这些单词或词组通常以名称为单词索引的磁盘文件的形式存在。
源模型将用户输入的欲查找的字符串称为源模型(Source Pattern),亦为搜索关键字,源模型中可包括特殊的字符串。数据集中于之比对的字符串成为“目标模型(Target Pattern)”目标模型与用户所输入的字符串相似的单词集合称为目标模型,目标模型可以理解为依据用户的输入,从源数据划分出的小范围数据集合。
以下说明本发明的具体实施方式
。本发明优选实施例的核心在于在源数据中建立二级索引,建立二级索引文件,即提取源数据库中字符数据的前两位字母组合作为索引项建立索引和建立一位字母组合的索引项,该索引项对应于以该字母为首字母,且前两位为字母与非字母组合的字符数据;在内存中,采用哈希表保存所述二级索引文件,即所述索引项与其所对应的字符数据的对应关系;以及,查找索引中是否有与输入关键字前两位字符相匹配的索引项,若有则加载该字母组合索引项对应的字符数据到内存;否则加载与输入关键字首位字符相匹配的索引项到内存;最后,遍历内存中的字符数据,输出与关键字匹配的数据。
由上可知,本发明的核心之一在于建立二级索引。图1为本发明二级索引结构图,参照该图具体说明二级索引的建立。
本发明所建立的二级索引是将源数据中所有字符数据最前面的两个字母做成二级索引;以及,进一步建立一位字母的索引项,该一位字母的索引项对应于以该字母为首字母,且前两位为字母与非字母组合的字符数据。并记录以下信息二级索引项;该二级索引项所对应源数据中第一个字符数据在索引文件中的偏移(P);该二级索引项所对应源数据中第一个字符数据在索引文件中的偏移与以下一个二级索引项所对应源数据中的第一个字符数据在索引文件中的偏移之差(Pc)。
将二级索引项、所述字符数据的偏移(P)以及所述偏移之差(Pc)这三个数据组成一个元组(tuple),附加在索引文件前面,一个元组结构是(二级索引,P,Pc)。
如图,二级索引项ab的元组结构为ab:323:745,其中以ab开头的第一个单词是abacus,这个单词在索引文件中的偏移是323,其中以ac开头的第一个单词是academic,这个单词在索引文件中的偏移是1068,之差为745,说明以ab开头的单词共有745个。进一步如图1所示,其中二级索引项a的元组结构为a:0:323,该索引项所对应的源数据为以a为首字母的词组或字符组合,如图,第一个字符数据为a case in point,该词组在索引文件中的偏移为0,且索引项a下的最后一个字符数据为A.M.,其偏移为322,则索引项a对应源数据的字符数据数为323。
图2为本发明实施例流程图,参照该图说明本发明的实现方式。
步骤21在现有源数据的索引文件基础上,创建二级索引,将二级索引和偏移等记录在元组中,把所有二级索引的元组附加到索引文件前面;所述二级索引的建立方法参照上文说明;步骤22程序启动后,加载索引文件前面的所有元组数据到内存中,并保存到哈希表中;所述哈希表是一种数据结构,其基本思想是根据当前待查找数据的特征,以记录关键字为自变量,设计一个function,该函数对关键字进行转换后,其解释结果为待查的地址。具体的,哈希表根据关键值码直接进行访问,即通过把关键值码映射到表中一个位置来访问记录,以加快查找的速度;所述映射函数叫做哈希函数,例如F(a)=b,其中F()为哈希函数,a表示键值,b为返回值。相对于树型结构、列表结构等数据结构的查找,哈希表的检索效率较高;本实施例中采用哈希表保存建立的二级索引,每次程序启动的时候将这些数据读入哈希表中,每次对源模型的查找只需要对用户输入的单词进行分析,剥离出二级索引再对哈希表进行查找从而找到相对索引的偏移并将从此偏移开始的单词集合块读入内存从而进行查找和匹配,这样不仅降低的内存占有量,也提升了匹配速度;步骤23获取用户输入的关键字;步骤24取所述关键字字符串的前2位字符作为在哈希表中进行查找的关键值码(key),若字符串为一个字符,则将该字符作为关键值码;步骤25依据关键值码,利用哈希函数返回二级索引的偏移(P)和与上一个二级索引之间的偏移差(Pc);若步骤24中获取的两位字符为字母组合或一个字母,则根据查找哈希表中与之匹配的二级索引项;例如若所查关键字为abacus,则返回索引项ab所对应字符数据在索引文件中的偏移以及所述偏移差;若步骤24中获取的两位字符为字母和非字母的组合,则经查找发现哈希表中不存在与之匹配的二级索引项,则返回以该关键字首字母为二级索引项的偏移(P)以及所述的偏移差(Pc);例如若待查关键字为A.M.,则前两位字符组合为A.,经查找没有建立该字符组合的二级索引项,此时应返回索引项a所对应字符数据在索引文件中的偏移即偏移差;若关键字前两位字符组合中包含通配符“?”或“*”,所述通配符“?”和“*”通常被用来和普通字符(如a到z)组合,作为一个字符串进行查找,“?”代表一个字符,“*”代表一串字符;如果通配符在第一位,则通常不具备操作意义,因而忽略;若通配符在第二位,基于通配符的定义,应返回首字母为关键字第一位字母的所有二级索引项的所述偏移和偏移差;例如若输入关键字为a?acus,则基于通配符的定义,发现a?与a、ab至az的所有二级索引字符组合均匹配,因而,返回以a为开头的所有二级索引项的偏移和偏移差;对于通配符*,采用相同的算法操作;
步骤26从索引文件中找到该偏移值所对应的单词,并从这个单词开始偏移Pc个的单词,作为一个数据集合读到内存中,称为目标模型;步骤27遍历目标模型中的每个单词,分别与用户输入的源模型进行比对,返回所有匹配的数据,并进行显示。
步骤27中所述源模型与目标模型的对比操作分为以下三种情况1)用户输入源模型中没有通配符,顺序比较源模型中每个位置的字符是否与目标模型中相同位置的字符都相同,若都相同,则说明匹配成功;2)用户输入源模型中含有“?”,首先判断源模型与目标模型的长度是否相等.如果相等则继续数据流否则返回,其中若“?”出现在源模型头部,这种情况一般没有操作意义,可忽略;若“?”出现在源模型尾部(如abacu?),则将源模型中′?′之前各个位置的字符与目标模型相同位置的字符逐一顺序比较,如果各个位置的比较结果都相同则匹配成功;若“?”出现在源模型中部,则应顺序比较源模型中′?′之前的字符,且逆序比较′?′之后的字符,如果都相等则匹配成功;3)用户输入源模型中含有′*′,若′*′出现在源模型中部(如ab*s),则将源模型中′*′前的所有位置的字母与目标模型相应位置的字母顺序进行比较,如果相应位置都相同,则进一步将源模型中′*′后的所有字母按照逆序与目标模型进行比较,如果相应位置都相同则匹配成功;若“*”出现在源模型尾部(如ab*),只需将源模型中“*”之前各个位置的字母与目标模型相同位置的字母逐一顺序比较,如果各个位置的比较结果都想同,则匹配成功。
依据以上原则,参照图3,进一步说明当目标模型被加载到内存后,步骤27中遍历目标模型,分别与用户输入关键字(源模型)进行对比的操作。
步骤31分析源模型;步骤32判断源模型中是否包含通配符;若不包含通配符则进行步骤33;若通配符为“?”,则进行步骤35;若通配符为“*”,则进行步骤310;步骤33判断源模型的每个字符是否与目标模型中相同位置的字符相同,若相同则进行步骤34,否则结束该次匹配操作;步骤34返回目标模型;步骤35比较源模型核目标模型长度是否相同;若相同则进行步骤36,否则结束此次匹配操作;步骤36返回“?”所在位置;若“?”在源模型第一位,则结束此次匹配操作;若“?”在源模型最后一位,则进行步骤37;否则进行步骤38;步骤37顺序比较源模型?之前的每个字符是否与目标模型中相同位置的字符都相同,若相同则进行步骤34,否则结束此次匹配操作;步骤38顺序比较源模型?之前的每个字符是否与目标模型中相同位置的字符都相同,若相同,则进行步骤39,否则结束此次匹配操作;步骤39逆序比较源模型?之后的每个字符是否与目标模型中相同位置的字符都相同,若相同,则进行步骤34,否则结束此次匹配操作;步骤310返回“*”所在位置;若“*”在源模型第一位,则结束此次匹配操作;若“*”在源模型最后一位,则进行步骤33;否则进行步骤311;步骤311顺序比较源模型*之前的每个字符是否与目标模型中相同位置的字符都相同,若相同则进行步骤312,否则结束此次匹配操作;
步骤312逆序比较源模型*之后的每个字符是否与目标模型中相同位置的字符都相同,若相同则进行步骤34,否则结束此次匹配操作。
以上仅为依据步骤27中所述匹配原则进行的源模型与目标模型匹配的具体实施例。其中部分步骤间的执行顺序可进行调整,本文不再赘述。
以上对本发明所提供的一种字符数据的检索方法进行了详细介绍,本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的一般技术人员,依据本发明的思想,在具体实施方式
及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本发明的限制。
权利要求
1.一种字符数据检索方法,其特征在于1)提取源数据库中字符数据的前两位字母组合作为索引项建立索引;2)记录每个索引项所对应的字符数据的存储地址;3)加载所述索引到内存;以及,4)根据输入关键字的前两位字母加载该字母组合索引项对应的字符数据到内存;5)遍历内存中的字符数据,输出与关键字匹配的数据。
2.如权利要求1所述的字符数据检索方法,其特征在于1)中进一步包括建立一位字母组合的索引项,该索引项对应于以该字母为首字母,且前两位为字母与非字母组合的字符数据;以及,4)之前还包括查找索引中是否有与输入关键字前两位字符相匹配的索引项,若有则进行4),否则加载与输入关键字首位字符相匹配的索引项到内存。
3.如权利要求1所述的字符数据检索方法,其特征在于3)中进一步将索引保存到哈希表。
4.如权利要求1所述的字符数据检索方法,其特征在于源数据库中字符数据按字符顺序进行排列。
5.如权利要求4所述的字符数据检索方法,其特征在于2)具体为记录确定的索引项所对应第一个字符数据的地址。
6.如权利要求5所述的字符数据检索方法,其特征在于2)中进一步包括记录确定的索引项所对应字符数据的数量。
7.如权利要求2所述的字符数据检索方法,其特征在于所述非字母字符包括空格符、数字、分隔符。
全文摘要
本发明涉及一种字符数据的检索方法。包括1)提取源数据库中字符数据的前两位字母组合作为索引项建立索引;2)记录每个索引项所对应的字符数据的存储地址;3)加载所述索引到内存;以及,4)根据输入关键字的前两位字母加载该字母组合索引项对应的字符数据到内存;5)遍历内存中的字符数据,输出与关键字匹配的数据。本发明能够快速的反馈与关键字相似的字符数据,并且不仅降低了内存占有量,也具有较高的匹配速度。
文档编号G06F17/30GK1776688SQ20051013181
公开日2006年5月24日 申请日期2005年12月15日 优先权日2005年12月15日
发明者陈亮, 林剑峰 申请人:北京金山软件有限公司