lucene维基百科查询

时间:2013-03-19 19:17:30

标签: lucene tokenize

我正在使用lucene从wiki转储查询并获取类别。所以,我得到了相关文档,对于每个文档,我都称之为下面的函数。

static List<String> getCategories(Document document) throws IOException
{
    List<String> categories = new ArrayList<String>();
    String text = document.get("text");
    WikipediaTokenizer tf = new WikipediaTokenizer(new StringReader(text));

    CharTermAttribute termAtt = tf.addAttribute(CharTermAttribute.class);
    TypeAttribute typeAtt = tf.addAttribute(TypeAttribute.class);

    while (tf.incrementToken())
    {
        String tokText = termAtt.toString();
        if (typeAtt.type().equals(WikipediaTokenizer.CATEGORY) == true)
        {
            categories.add(tokText);
        }
    }

    return categories;
}

但它会在while语句中抛出以下错误。

Exception in thread "main" java.lang.NullPointerException
    at org.apache.lucene.analysis.wikipedia.WikipediaTokenizerImpl.zzRefill(WikipediaTokenizerImpl.java:574)
    at org.apache.lucene.analysis.wikipedia.WikipediaTokenizerImpl.getNextToken(WikipediaTokenizerImpl.java:781)
    at org.apache.lucene.analysis.wikipedia.WikipediaTokenizer.incrementToken(WikipediaTokenizer.java:200)
    at SearchIndex.getCategories(SearchIndex.java:82)
    at SearchIndex.main(SearchIndex.java:54)

我查看了zzRefill()函数,但我无法理解它。这是一个已知的bug还是什么?我不知道我做错了什么。 lucene家伙说整个wikipediaTokenizer部分都处于测试阶段,可能会有所变化。我希望有人可以帮助我。

1 个答案:

答案 0 :(得分:1)

我在调用while循环

之前添加了tf.reset()解决了这个问题