如何使用Lucene库提取n-gram?

时间:2012-04-01 10:24:51

标签: lucene stream tokenize n-gram

我正忙着试图绕着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分析器对象。从那里,我将其转换为令牌流,然后使用属性过滤器进行解析。但是,它始终会导致此异常:

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

思考?提前谢谢!

1 个答案:

答案 0 :(得分:3)

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