我尝试用Lucene解析Wikipedia标记,发现这个小项目:
3/api/contrib-wikipedia/org/apache/lucene/wikipedia/analysis/WikipediaTokenizer.html
(未能检索到适当的网站,对不起)
下面是一个代码示例的较短版本,它以某种方式在这个库中循环。运行它时,我会得到一个非空WikipediaTokenizer,但一旦执行incrementToken(),就会得到一个空指针异常。有什么想法吗?
import org.apache.log4j.Logger;
import org.apache.lucene.analysis.Token;
import org.apache.lucene.analysis.wikipedia.WikipediaTokenizer;
import java.io.StringReader;
public class WikipediaTokenizerTest {
static Logger logger = Logger.getLogger(WikipediaTokenizerTest.class);
protected static final String LINK_PHRASES = "click [[link here again]] click [http://lucene.apache.org here again] [[Category:a b c d]]";
public WikipediaTokenizer testSimple() throws Exception {
String text = "This is a [[Category:foo]]";
return new WikipediaTokenizer(new StringReader(text));
}
public static void main(String[] args){
WikipediaTokenizerTest wtt = new WikipediaTokenizerTest();
try {
WikipediaTokenizer x = wtt.testSimple();
logger.info(x.hasAttributes());
while (x.incrementToken() == true) {
logger.info("Token found!");
}
} catch(Exception e){
logger.error("Exception while tokenizing Wiki Text: " + e.getMessage());
}
}
我对Maven (pom.xml)使用以下依赖项:
<dependency>
<groupId>org.apache.lucene</groupId>
<artifactId>lucene-core</artifactId>
<version>4.2.1</version>
</dependency>
<dependency>
<groupId>org.apache.lucene</groupId>
<artifactId>lucene-analyzers-common</artifactId>
<version>4.2.1</version>
</dependency>
<dependency>
<groupId>org.apache.lucene</groupId>
<artifactId>lucene-queryparser</artifactId>
<version>4.2.1</version>
</dependency>
<dependency>
<groupId>org.apache.lucene</groupId>
<artifactId>lucene-wikipedia</artifactId>
<version>3.0.3</version>
</dependency>
<dependency>
<groupId>org.apache.lucene</groupId>
<artifactId>lucene-analyzers</artifactId>
<version>3.1.0</version>
</dependency>
任何帮助都将不胜感激!如果有人有更好的库或解决方案,请告诉我。
发布于 2014-05-28 15:45:56
你不能把你的lucene版本混在一起。您使用的是4.2.1版本。它与3.1.0或3.0.3版本都不兼容。您需要删除这些依赖项。
WikipediaTokenizer
包括在分析器中--常见。
而且,您没有履行TokenStream
所要求的合同。请参见 documentation,其中描述了TokenStream API的工作流。特别是,在调用incrementToken()
之前,必须调用reset()
。您还应该使用end()
和close()
。
WikipediaTokenizer x = wtt.testSimple();
logger.info(x.hasAttributes());
x.reset();
while (x.incrementToken() == true) {
logger.info("Token found!");
}
x.end();
x.close();
https://stackoverflow.com/questions/23916012
复制相似问题