我正忙着试图绕着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
思考?提前谢谢!
答案 0 :(得分:3)
AbstractMethodError不会因错误的API使用而发生 - 它必须是针对一个JAR进行编译然后针对另一个JAR运行的结果。由于您在此处同时使用Lucene Core和Lucene Analyzers JAR,请仔细检查编译时和运行时JAR类路径。