2

我很难把头绕在 Lucene 库上。这是我到目前为止所拥有的:

public void shingleMe()
{

    try
    {
        StandardAnalyzer analyzer = new StandardAnalyzer(Version.LUCENE_35);
        FileReader reader = new FileReader("test.txt");

        ShingleAnalyzerWrapper shingleAnalyzer = new ShingleAnalyzerWrapper(analyzer, 2);
        shingleAnalyzer.setOutputUnigrams(false);

        TokenStream stream = shingleAnalyzer.tokenStream("contents", reader);
        CharTermAttribute charTermAttribute = stream.getAttribute(CharTermAttribute.class);         

        while (stream.incrementToken())
        {
            System.out.println(charTermAttribute.toString());
        }

    }

    catch (FileNotFoundException e)
    {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

    catch (IOException e)
    {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

}

它在 stream.incrementToken() 处失败。据我了解,ShingleAnalyzerWrapper 使用另一个 Analyzer 来创建 shingle 分析器对象。从那里,我将其转换为令牌流,然后使用属性过滤器对其进行解析。但是,它总是会导致此异常:

线程“主”java.lang.AbstractMethodError 中的异常:org.apache.lucene.analysis.TokenStream.incrementToken()Z

想法?提前致谢!

4

1 回答 1

3

AbstractMethodError 不会由于错误的 API 使用而发生——它必须是针对一个 JAR 编译然后针对另一个 JAR 运行的结果。由于您在此处同时使用 Lucene Core 和 Lucene Analyzers JAR,请仔细检查您的编译时和运行时 JAR 类路径。

于 2012-04-01T20:48:22.450 回答