中文分词“庖丁解牛”BUG修正:高亮显示错位的问题

[b]现象[/b]:检索后对关键字高亮显示时,高亮位置严重错误。使加粗在不相关的地方。

[b]严重性[/b]:严重。

[b]解析[/b]:
该现象的发生是由于建立索引的token位置构造错误引起的。经过诊断,错误的地方为XTokenizer.java的next方法。还好,代码只需要 做2、3行的增减。


[b]解决[/b]:

在原来的XTokenizer类next方法找到:

[code]

// 构造"牛",并使用knife"解"之
beef.set(0, charCount);
[/code]


然后在他们的下一行,dissected = 0;的前面
加上offset += Math.abs(dissected);这一行
同时删除掉:
offset -= remainning;
offset += read;
这两行。(这两行在代码中并不是紧哎的)


修改后的next方法如下


[code]
@Override
public Token next() throws IOException {
// 已经穷尽tokensIteractor的Token对象,则继续请求reader流入数据
while (tokenIteractor == null || !tokenIteractor.hasNext()) {
System.out.println(dissected);
int read = 0;
int remainning = -1;//重新从reader读入字符前,buffer中还剩下的字符数,负数表示当前暂不需要从reader中读入字符
if (dissected >= beef.length()) {
remainning = 0;
}
else if (dissected < 0){
remainning = bufferLength + dissected;
}
if (remainning >= 0) {
if (remainning > 0) {
System.arraycopy(buffer, -dissected, buffer, 0, remainning);
}
read = input.read(buffer, remainning, bufferLength - remainning);
int charCount = remainning + read;
if (charCount < 0) {
// reader已尽,按接口next()要求返回null.
return null;
}
if (charCount < bufferLength) {
buffer[charCount ++] = 0;
}
// 构造"牛",并使用knife"解"之
beef.set(0, charCount);
offset += Math.abs(dissected); // 增加这个代码
//offset -= remainning; //删除或注释掉这行代码
dissected = 0;
}
dissected = knife.dissect((Collector)this, beef, dissected);
//offset += read;// !!! //删除或注释掉这行代码
tokenIteractor = tokenCollector.iterator();
}
// 返回tokensIteractor下一个Token对象
return tokenIteractor.next();

}
[/code]

不是从SVN上下载代码的同学,需要自己更新代码
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值