中科院ICTCLAS词典介绍
中科院ICTCLAS词典解析程序 C# 代码
作者: 宁夏大学 张冬 2006.12.29
中科院ICTCLAS词典 采取了2进制的存储方式
对其它开发者使用造成了一些困扰 我写了一个解析程序 希望对大家有所帮助 可以在
http://gforge.osdn.net.cn/projects/xunlong/ 下载
1 解析ICTCLAS的词典 首先要建立一个 字符对照表
因为词典中是按照每个字的顺序来存放词条 但词典中没有提供字的直接信息 但是经过研
究我们可以发现 6768 正好是 gb2312 中 汉字的个数
经过验证 发现词典的字 出现的位置 对应于 从 1 ---6768 汉字出现的位置
2 数据存储的结构
使用UltraEdit 打开 词典 我们可以看到
1F 00 00 00 04 00 00 00 03 00 00 00 03 00 00 00 40 A1 A2
它的标志的数据 每4个字节存放
其中iF 00 00 00 代表此字后面 所拥有的词条的数量
其后是词条信息
04 00 00 00 代表 出现频率
03 00 00 00 词长 按找所拥有的字节数计算
03 00 00 00 代表词性
40 A1 A2 这个是中文的 GB2312 编码 容易解析
没有出现词条的字 使用 00 00 00 00 来占位 (和汉字对照表相关)
3 对字符标志的解析
直接的像 iF 00 00 00 这样的 是不能使用的 它的存储过程是采取了反向排序
存放
iF 00 00 00
[1] [2] [3] [4]
重新合成16进制的时候 是
[4][3][2][1]
然后把得到的16进制表达串 转换成为 int 就 可以得到具体数值了
4 操作的时候 顺次读取
a 记录 一个标志 每处理完一个字 +1 然后这个标志 直接在汉字对照表中得出对
应的中文
b 先读取4位 得到 此字所含有的词条个数
c 如果是 00 00 00 00 则返回 步骤a
d 按照 b 得到的词条个数 建立一个循环 来处理每个词条
e 读取4位 得到 频率
f 读取4位 得到词长
g 读取4位 得到词性
h 根据 f 得到的词长 读取 词长的长度 得到 词条
g 把得到词条的字符 还原为 中文字符串
I 返回 a
5 要对修改过的数据进行保存 反向执行 步骤4就可以了
本文地址:http://www.45fan.com/dnjc/69391.html