zack_kane 2014-08-26 01:35 采纳率: 0%
浏览 2176

lucene做同义词练习,关于restoreState的疑问。

比如一句话有我,
他的同义词是咱、俺。

网上的代码一般是
循环遍历执行incrementToken,然后每次添加一个同义词
比如:
// 如果有同义词
if (sames.size() > 0) {
// 将元素出栈,并且获取这个同义词
String str = sames.pop();
// 还原状态
restoreState(current);
cta.setEmpty();
cta.append(str);
// 设置位置0
pia.setPositionIncrement(0);

        return true;
    }

为什么不能是,如果有同义词,一次全部取出来:这样的执行结果是,只有最后一个同义词。
if (sames.size() > 0) {
while (sames.size() > 0) {

            // 将元素出栈,并且获取这个同义词

            String str = sames.pop();

            // 还原状态

            restoreState(current);

            cta.setEmpty();

            cta.append(str);

            // 设置位置0

            pia.setPositionIncrement(0);
        }

        return true;
    }

这是为什么啊?

  • 写回答

1条回答 默认 最新

  • Panda_熊猫 2014-12-28 13:01
    关注
    1. 如果是做同义词练习,在增加同义词时,应该用的是 cta.copyBuffer(). 当然了这跟这次提问无关。
    2. while循环里做的工作,明显后覆盖上一次循环的结果。所以最终只是添加了最后一次添加的同义词。所以要想不被覆盖,就得添加后return。
    评论

报告相同问题?

悬赏问题

  • ¥35 平滑拟合曲线该如何生成
  • ¥100 c语言,请帮蒟蒻写一个题的范例作参考
  • ¥15 名为“Product”的列已属于此 DataTable
  • ¥15 安卓adb backup备份应用数据失败
  • ¥15 eclipse运行项目时遇到的问题
  • ¥15 关于#c##的问题:最近需要用CAT工具Trados进行一些开发
  • ¥15 南大pa1 小游戏没有界面,并且报了如下错误,尝试过换显卡驱动,但是好像不行
  • ¥15 没有证书,nginx怎么反向代理到只能接受https的公网网站
  • ¥50 成都蓉城足球俱乐部小程序抢票
  • ¥15 yolov7训练自己的数据集