Как использовать библиотеку Lucene для извлечения n-грамм? - PullRequest
2 голосов
/ 01 апреля 2012

Я с трудом пытаюсь обернуть голову вокруг библиотеки 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 использует другой анализатор для создания объекта анализатора гальки.Оттуда я конвертирую его в поток токенов, который затем анализируется с помощью фильтра атрибутов.Однако это всегда приводит к этому исключению:

Исключение в потоке "main" java.lang.AbstractMethodError: org.apache.lucene.analysis.TokenStream.incrementToken () Z

Мысли?Заранее спасибо!

1 Ответ

3 голосов
/ 02 апреля 2012

AbstractMethodError не может произойти в результате неправильного использования API - он должен быть результатом компиляции с одним JAR и последующим выполнением с другим.Поскольку здесь вы используете как Jare Lucene Core, так и JAR Lucene Analyzers, дважды проверьте пути к классам JAR времени компиляции и выполнения.

...