从汉字内码到数组下标的转换:
二维数组向一维数组的转化
n =a * k + b
b< k
a =n / k 的整数部分
b =n % k (n 模 k 的值在 0 - k-1之间)
10 = a * 3 + b
a=3,b=1 a=0,b=10 a=1,b=7 a=2,b=4
Tokenization算法的一般过程
(1)对一个待分析的字符串(S),从左到右进行扫描,读入当前字符(char)到候选词数组(W[ i ]),并将指针(pointer)前移,i=i+1;
(2)看char是否为词分隔符(事先可以预定义空格以及一般标点均为词分隔符);
(3)如果char是词分隔符,并且W不是空格,将W中从起始位置到i-1位置的字符作为一个词汇单位输出,同时将S中的W部分删去,然后清空W,转入(1),如果char是词分隔符,且W是空格,将S中的W部分删去,清空W,转入(1);
(4)如果不是词分隔符,看指针是否已经指到字符流尾部;
(5)如果指针已经指到字符流尾部,将当前W从起始位置到i-1位置的字符作为一个词汇单位输出,结束。
(6)如果不是字符流尾部,转入(1);
Lemmatization算法的一般过程
(1)初始化:待分析的词形=W,d=W的字符数,i=1,设输出串R="";
(2)到Dict中查找W,如果找到,R=W,转入(8);
(3)如果i (d/2),执行(4)到(7)步,否则转入(8);
(4)从W中取出i个尾字字符,W成为两部分W1+ W2(W2为取出的尾字符串);
(5)到SuffixList中查找W2,如果查到,调用规则,对W1进行处理,得到W1';
(6)到Dict中查找W1',如果找到,R=W1'+ " " + W2,转入(8);
(7)如果没有找到,i=i+1,转入(3);
(8)输出R,结束;
如果AB和BC都是词典中的词,那么如果待切分字串中包含“ABC”这个子串,就必然会造成两种可能的切分:“AB/ C/ ”和 “A/ BC/ ”。这种类型的歧义就是交集型歧义。比如“网球场”就可能造成交集型歧义(网球/ 场/ : 网/ 球场/)。
如果AB和A、B都是词典中的词,那么如果待切分字串中包含"AB"这个子串,就必然会造成两种可能的切分:"AB/" 和"A/ B/ "。这种类型的歧义就是组合型歧义。比如"个人"就可能造成组合型歧义( (我) 个人/ : (三) 个/ 人/ )。
对于某些交集型歧义,可以通过增加回溯机制来改进最大匹配法的分词结果。
例如:“学历史知识”
顺向扫描的结果是:“学历/ 史/知识/”,
通过查词典知道“史”不在词典中,于是进行回溯,将“学历”的尾字“历”取出与后面的“史”组成“历史”,再查词典,看“学”,“历史”是否在词典中,如果在,就将分词结果调整为:“学/ 历史/ 知识/”
最大概率法分词
提高计算效率
最佳左邻词
最大概率法分词的问题
“这事的确定不下来”
W1= 这/ 事/ 的确/ 定/ 不/ 下来/
W2= 这/ 事/ 的/ 确定/ 不/ 下来/
P(W1)<P(W2)
P(W1)>P(W2)