整词二分、逐字二分的分词词典机制:
这是一种广为使用的分词词典机制.其结构通常分为三级,前两级为索引
1.首字散列表
词首字散列函数根据汉字的国标区位码给出。通过一次Hash运算即可直接定位汉字在首字散列表中的序号。也就是将词首字的国标码与其在首字散列表中的序号相对应。
我国的GB2312-80标注规定汉语字符的交换码由两个ASCII码构成:第一个是区码,取值从OxA1到OxF7,共87个区,第二个是位码,从OxA1到0xFE,共94位。区码为OxA1到0xAE的存储全角符号,如标点、字母等。GB2312-80汉字的编码空间是BOA1-FIFE,共有72 * 94 = 6768个码位,实有6763个汉字,其中一级汉字3755个,接着是5个空位,后面是3008个二级汉字。设id是词首字在首字散列表中的序号,c1和c2是词首字的区码和位码,利用Hash方法求Id则有:
Id = (c1–176) * 94 + (c2 - 161)
这种Hash方法实质上是一种一一映射。
首字散列表的一个单元包括两项内容:
1) 入口项数(4字节):以该字为首字的词的个数。
2) 第一入口项指针(4字节):指向第一入口项在词索引表中的位置。
2.词索引表
因为词的长度可变(实际系统中还包括附属于该词的各类信息),故以选择不定长存储为宜,此外必须实现对词的随机访问,这两条决定了必须建立词索引表。
词索引表的一个单元仅含一项内容:
1) 词典正文指针(4字节):指向词在词典正文中的位置。
3.词典正文
以词为单位的有序表,词典中的同一首字的词条按升序排列,通过词索引表和词典正文的配合,很容易实现指定词在词典正文中的整词二分快速查找。