mmthunk.h文件里class ChunkQueue的getToken方法在应用分词规则3的时候有一个 bug,问题代码如下:
//apply rule 3
u4 remains_r3[256];
u4* k_ptr_r3 = remains_r3;
avg_length = 1024*64; //an unreachable avg
for(size_t i = 0; i<k_ptr-remains; i++){
float avg = m_chunks[remains[i]].get_avg();
if(avg < avg_length) {
avg_length = avg;
k_ptr_r3 = remains_r3;
*k_ptr_r3 = (u4)i;
k_ptr_r3++;
}else
if(avg == avg_length){
*k_ptr_r3 = (u4)i;
k_ptr_r3++;
}
}
其中的红色代码部分是有问题的,引用的下标不正确,会导致分词结果错误,改成如下即可:
//apply rule 3
u4 remains_r3[256];
u4* k_ptr_r3 = remains_r3;
avg_length = 1024*64; //an unreachable avg
for(size_t i = 0; i<k_ptr-remains; i++){
float avg = m_chunks[remains[i]].get_avg();
if(avg < avg_length) {
avg_length = avg;
k_ptr_r3 = remains_r3;
*k_ptr_r3 = (u4)remains[i];
k_ptr_r3++;
}else
if(avg == avg_length){
*k_ptr_r3 = (u4)remains[i];
k_ptr_r3++;
}
}
假设有一个中文词典里有以下5个词语,可以测试出上面的bug:
酒店
管理
软件
酒店管理
管理软件
bug代码分出的词语为:
酒/x
店/x
管理软件/x
修改后的代码分出的词语为:
酒店/x
管理软件/x