lucene的Analyzer类里面主要包含这个方法:
public abstract class Analyzer{
public abstract TokenStream tokenStream(String fieldName, Reader reader);
}
-------------------------------------------------------------------
public abstract class TokenStream {
......
public Token next(final Token reusableToken) throws IOException {
// We don't actually use inputToken, but still add this assert
assert reusableToken != null;
return next();
}
......
}
所有要实现analyzer的类都要重写这个方法,获取自己制定的Tokenizer(Tokenizer继承于TokenStream)。而分词的主要方法就是TokenStream里面提供的next()方法,所有继承TokenStream类的方法都要重写这个next()方法,以制定自己分词器。
//下面分析一下StandAnalyzer,它继承于Analyzer,StandAnalyzer里面的tokenStream方法如下:
public class StandardAnalyzer extends Analyzer {
......
public TokenStream tokenStream(String fieldName, Reader reader) {
StandardTokenizer tokenStream = new StandardTokenizer(reader, replaceInvalidAcronym); //使用了StandardTokenizer
tokenStream.setMaxTokenLength(maxTokenLength);
TokenStream result = new StandardFilter(tokenStream);
result = new LowerCaseFilter(result);
result = new StopFilter(result, stopSet);
return result;
}
}
-----------------------------------------------------------------
//StandardTokenizer的next方法如下:
public class StandardTokenizer extends Tokenizer {
.......
public Token next(final Token reusableToken) throws IOException {
assert reusableToken != null;
int posIncr = 1;
while(true) {
int tokenType = scanner.getNextToken();
if (tokenType == StandardTokenizerImpl.YYEOF) {
return null;
}
if (scanner.yylength() <= maxTokenLength) {
reusableToken.clear();
reusableToken.setPositionIncrement(posIncr);
scanner.getText(reusableToken);
final int start = scanner.yychar();
reusableToken.setStartOffset(start);
reusableToken.setEndOffset(start+reusableToken.termLength());
// This 'if' should be removed in the next release. For now, it converts
// invalid acronyms to HOST. When removed, only the 'else' part should
// remain.
if (tokenType == StandardTokenizerImpl.ACRONYM_DEP) {
if (replaceInvalidAcronym) {
reusableToken.setType(StandardTokenizerImpl.TOKEN_TYPES[StandardTokenizerImpl.HOST]);
reusableToken.setTermLength(reusableToken.termLength() - 1); // remove extra '.'
} else {
reusableToken.setType(StandardTokenizerImpl.TOKEN_TYPES[StandardTokenizerImpl.ACRONYM]);
}
} else {
reusableToken.setType(StandardTokenizerImpl.TOKEN_TYPES[tokenType]);
}
return reusableToken;
} else
// When we skip a too-long term, we still increment the
// position increment
posIncr++;
}
}
......
}
测试代码:
public class TestAnalyzer {
final static String TEXT = "hadoop is very good,xina a tooken finished!";
@SuppressWarnings("deprecation")
public void testTokenizer() throws IOException{
Reader reader = new StringReader(TEXT);
StandardTokenizer tokenizer = new StandardTokenizer(reader);
for (Token t = tokenizer.next();t!=null;t = tokenizer.next()) {
System.out.println(t.startOffset() +"--" + t.endOffset() + ": "+ t.termText());
}
}
public static void main(String[] args) throws IOException {
TestAnalyzer t = new TestAnalyzer();
t.testTokenizer();
}
}
//lucene2.4.1新API的测试用法:
TokenStream ts = analyzer.tokenStream("text", new StringReader(txt));
for(Token t= new Token(); (t=ts.next(t)) !=null;) {
System.out.println(t);
}
分享到:
相关推荐
**Lucene分词器资源包详解** Lucene是一款开源的全文搜索引擎库,广泛应用于Java开发中,用于构建高效、可扩展的信息检索应用。这个压缩包提供了Lucene分词时所必需的jar包,使得开发者能够方便地在项目中集成...
`lucene`目录很可能包含了Lucene的库文件,这些文件包含了Lucene的核心组件,如索引和搜索模块,以及各种分词器。在Java项目中,开发者通常会将这些库文件作为依赖引入,以便使用Lucene提供的API进行文本处理。 `...
《Lucene中文分词器——Paoding解牛详解》 在中文信息检索领域,分词是至关重要的一环,它能够将连续的汉字序列切割成具有独立意义的词语,为后续的索引和查询提供基础。Lucene作为Java最著名的全文搜索引擎库,其...
2. **配置分词器**:在Lucene.NET的索引创建阶段,需要配置Analyzer类,指定使用特定的分词器。例如,使用IK Analyzer可以创建`IKAnalyzer analyzer = new IKAnalyzer();`。 3. **字段分析**:在创建Document对象时...
### Lucene4.0 IK分词器使用概览 #### IKAnalyzer:中文分词利器 IKAnalyzer是一款基于Java开发的开源中文分词工具包,自2006年首次发布以来,历经多个版本的迭代,已成为业界广泛认可的中文分词解决方案。其最初...
**Lucene+中文IK分词器实例解析** Lucene是一个高性能、全文检索库,由Apache软件基金会开发。它提供了一个简单但功能强大的API,用于在各种应用中实现全文索引和搜索。在处理中文文本时,由于中文词汇的复杂性和无...
为了增强Lucene在中文环境下的表现,需要对Lucene的默认分析器进行扩展,引入中文分词器。常见的中文分词器有: - **Jieba分词**:一款流行的开源中文分词工具,支持精确模式和搜索引擎模式。 - **IK分词**:针对...
通过阅读和分析代码,开发者可以了解到如何在Lucene.NET中集成自定义分词器,以及如何实现最大向前匹配算法的具体细节。这为其他开发者提供了参考和学习的机会,也是促进技术交流的一个良好途径。 总结来说,这个...
**Lucene分词与查询详解** Lucene是一个高性能、全文本搜索库,广泛应用于各种搜索引擎的开发中。它提供了一套强大的API,用于索引文本数据,并执行复杂的查询操作。在深入理解Lucene的分词与查询机制之前,我们...
《深入剖析:Lucene3与庖丁解牛中文分词器》 在信息技术飞速发展的今天,全文检索和搜索引擎已经成为日常开发中不可或缺的部分。Lucene作为一款强大的全文检索库,被广泛应用于各种信息检索系统中。然而,对于中文...
用java实现的,利用了lucene里面的standardAnalyzer分析器实现的分词,可以去停用词,再利用波特算法实现 词干提取 最后排序 和词频统计输出
System.out.println("当前使用的分词器:" + analyzer.getClass().getSimpleName()); TokenStream tokenStream = analyzer.tokenStream("content", new StringReader(keyWord)); tokenStream.addAttribute...
"中文分词器"在这里指的可能是 "je-analysis-1.5.1.jar",这是一个专门针对中文的分析工具,用于将中文文本分解成有意义的词汇(词)。Je-Analysis 可能是基于 Java 实现的,适用于 Lucene 和 Solr 等搜索引擎,它...
2. **配置分析器**:在LuceneUtils.java或LuceneDB.java中,需要配置合适的中文分词分析器。例如,使用IK Analyzer,代码可能如下: ```java Analyzer analyzer = new IKAnalyzer(); ``` **三、创建索引** 1. *...
总之,“lucene中文分词工具包”通过IKAnalyzer提供的高效分词服务,为中文信息检索、文本挖掘、情感分析等应用提供了强大的支持。理解并掌握其工作原理和使用方法,对于提升中文文本处理的质量至关重要。
**Lucene分词查询**是搜索引擎开发中的关键一环,它是Apache Lucene库的核心功能之一。Lucene是一个高性能、全文本搜索库,为Java开发者提供了强大的文本搜索能力。在这个入门实例中,我们将深入理解如何利用Lucene...
它们提供了强大的信息检索和文本分析功能,但Lucene默认的分词器并不适用于中文处理。因此,对于中文索引和搜索,我们需要引入专门针对中文的分词器。本篇文章将深入探讨Lucene和Solr中的中文分词器及其重要性。 ...
Lucene3.0分词系统的核心在于理解和应用其分词原理,无论是对于英文还是中文文本,这一过程都是构建高效搜索引擎的基础。以下是对Lucene3.0分词系统中涉及的关键知识点的深入解析。 ### 英文分词原理 英文分词相较...
4. 分词处理:在索引文档时,先用庖丁分词器对中文文本进行分词,然后将分词结果转换成Lucene的Term对象,再添加到索引中。 5. 搜索优化:在搜索阶段,同样可以使用庖丁分词器对用户输入的查询进行预处理,提高搜索...