【问题标题】:How to use Lucene library to extract n-grams?如何使用 Lucene 库提取 n-gram?
【发布时间】:2012-04-01 10:24:50
【问题描述】:

我在尝试围绕 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

想法?提前致谢!

【问题讨论】:

    标签: lucene stream tokenize n-gram


    【解决方案1】:

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

    【讨论】:

    • 谢谢!我有一个旧的分析器 jar 和一个新的核心 jar。
    猜你喜欢
    • 2013-10-06
    • 1970-01-01
    • 1970-01-01
    • 2016-05-02
    • 1970-01-01
    • 2018-08-10
    • 2018-12-07
    • 2014-12-13
    • 1970-01-01
    相关资源
    最近更新 更多