0

私は 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() 関数を見ましたが、理解できません。これは既知のバグか何かですか?何が間違っているのかわかりません。lucene 関係者は、wikipediaTokenizer セクション全体がベータ版であり、変更される可能性があると述べています。誰かが私を助けてくれることを望んでいました。

4

1 に答える 1

1

while ループを呼び出す前に tf.reset() を追加して問題を解決しました

于 2013-03-19T20:18:43.777 に答える