【问题标题】:java lucene stopwords listjava lucene 停用词列表
【发布时间】:2015-01-10 06:34:29
【问题描述】:

我想逐字获取 lucene 停用词列表。我可以访问整个集合,但是当我迭代它时,输出不是我想要的

这是我的代码:

analyzer = new StandardAnalyzer(Version.LUCENE_36);
Set set=analyzer.getStopwordSet();
Iterator iterator = set.iterator();
        while (iterator.hasNext()) {
    System.out.println(iterator.next());
    }

在控制台中我看到了它:

[C@7ef955da
[C@23739c56
[C@7b1ce448
[C@25cf721d
[C@564ce14f
[C@515c35cc
[C@7cd00dce

【问题讨论】:

    标签: java lucene set stop-words


    【解决方案1】:

    您得到“[C@7ef955da”的原因是您将iterator.next() 视为System.out.println(...) 中的对象,因此它以十六进制打印其对象的hashCode()。 iterator.next() 返回的对象是 char[] 类型,所以试试这个

    analyzer = new StandardAnalyzer(Version.LUCENE_36);
    Set set=analyzer.getStopwordSet();
    Iterator iterator = set.iterator();
            while (iterator.hasNext()) {
        System.out.println((char[])iterator.next());
        }
    

    【讨论】:

      【解决方案2】:

      getStopwordSet 返回的Set 不包含字符串,而是字符数组。不过很容易转换,只需使用适当的String ctor

      Iterator<char[]> iterator = set.iterator();
      while (iterator.hasNext()) {
          System.out.println(new String(iterator.next()));
      }
      

      【讨论】:

      • 让我猜猜,你在类型方面遇到了问题,因为迭代器没有声明泛型类型,所以它试图调用不存在的 new String(Object)。您可以将iterator.next() 返回的值转换为char[]。或者给它一个泛型类型。
      【解决方案3】:

      您需要确保将iterator.next() 转换为char[]。您的迭代器应如下所示:

      while (iterator.hasNext()) {
          char[] stopWord = (char[]) iterator.next();
          System.out.println(String.valueOf(stopWord));
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-05-05
        • 2013-07-11
        • 2013-10-05
        • 1970-01-01
        • 1970-01-01
        • 2013-07-05
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多