Analyzer,或者说文本分析的过程,实质上是将输入文本转化为文本特征向量的过程。这里所说的文本特征,可以是词或者是短语。它主要包括以下四个步骤:
- 分词,将文本解析为单词或短语
- 归一化,将文本转化为小写
- 停用词处理,去除一些常用的、无意义的词
- 提取词干,解决单复数、时态语态等问题
Lucene Analyzer包含两个核心组件,Tokenizer以及TokenFilter。两者的区别在于,前者在字符级别处理流,而后者则在词语级别处理流。Tokenizer是Analyzer的第一步,其构造函数接收一个Reader作为参数,而TokenFilter则是一个类似拦截器的东东,其参数可以使TokenStream、Tokenizer,甚至是另一个TokenFilter。整个Lucene Analyzer的过程如下图所示:
上图中的一些名词的解释如下表所示:
类 | 说明 |
Token | 表示文中出现的一个词,它包含了词在文本中的位置信息 |
Analyzer | 将文本转化为TokenStream的工具 |
TokenStream | 文本符号的流 |
Tokenizer | 在字符级别处理输入符号流 |
TokenFilter | 在字符级别处理输入符号流,其输入可以是TokenStream、Tokenizer或者TokenFilter |
Lucene Analyzer中,Tokenizer和TokenFilter的组织架构如下图所示:
Lucene提供了数十种内置的Tokenizer、TokenFilter以及Analyzer供开发人员使用,事实上大部分时候我们只会需要使用其中的某几种,比如标准分词器StandardTokenizer、空格分词器WhitespaceTokenizer、转化为小写格式的LowCaseFilter、提取词干的PoterStemFilter以及组合使用StandardTokenizer和多种TokenFilter的StandardAnalyzer,有关这些的资料网上很多了,这里就不再详细介绍了。
有些时候,Lucene内置提供的Analyzer或许不能满足我们的需求。下面一个例子叙述了如何使用定制的Analyzer。它的功能是提取词干、将输入规范化为小写并且使用指定的停用词表:
public class PorterStemStopWordAnalyzer extends Analyzer {
public static final String[] stopWords = { "and", "of", "the", "to", "is",
"their", "can", "all", "i", "in" };
public TokenStream tokenStream(String fieldName, Reader reader) {
Tokenizer tokenizer = new StandardTokenizer(reader);
TokenFilter lowerCaseFilter = new LowerCaseFilter(tokenizer);
TokenFilter stopFilter = new StopFilter(lowerCaseFilter, stopWords);
TokenFilter stemFilter = new PorterStemFilter(stopFilter);
return stemFilter;
}
public static void main(String[] args) throws IOException {
Analyzer analyzer = new PorterStemStopWordAnalyzer();
String text = "Holmes, who first appeared in publication in 1887, was featured in four novels and 56 short stories. The first story, A Study in Scarlet, appeared in Beeton's Christmas Annual in 1887 and the second, The Sign of the Four, in Lippincott's Monthly Magazine in 1890. The character grew tremendously in popularity with the beginning of the first series of short stories in Strand Magazine in 1891; further series of short stories and two novels published in serial form appeared between then and 1927. The stories cover a period from around 1880 up to 1914.";
Reader reader = new StringReader(text);
TokenStream ts = analyzer.tokenStream(null, reader);
Token token = ts.next();
while (token != null) {
System.out.println(token.termText());
token = ts.next();
}
}
}
从结果我们可以看出:
- StandardTokenizer将文本按照空格或标点分成词语
- LowerCaseFilter所有的输入都被转化为小写
- StopFilter消除了文中的停用词,比如"appeared between then and 1927"中的"and"
- PorterStemFilter提取了文中的词根,比如story和stories都被转化为stori
之后的文章,会介绍一下如何在这个个Analyzer中引入短语检测和同义词检测。
- 大小: 9.2 KB
- 大小: 78.1 KB
分享到:
相关推荐
《Lucene深入浅出》 Lucene是一款基于Java的全文检索引擎,由Apache软件基金会开发并维护,广泛应用于各种搜索引擎和信息检索系统中。作为一款开源工具,它为开发者提供了强大的文本搜索功能,使得在海量数据中快速...
《Lucene in Action》是关于Apache Lucene的权威指南,这本书深入浅出地介绍了全文搜索引擎的构建和优化。源码的提供使得读者可以更直观地理解Lucene的工作原理,这对于学习和开发基于Lucene的搜索应用非常有帮助。...
3. 书籍:《Lucene in Action》是一本经典的Lucene入门书籍,深入浅出地讲解了Lucene的各个方面。 通过这个PPT教程,你将全面了解Lucene的原理、使用方法以及如何在实际项目中集成和优化搜索引擎。每个章节都会结合...
《深入浅出Lucene3与SSH整合:全文检索的快速指南》 在信息化时代,数据量日益庞大,如何高效地搜索和获取所需信息成为了一项关键任务。这就是全文搜索引擎如Apache Lucene发挥作用的地方。Lucene是一款强大的开源...
本文将深入浅出地介绍Lucene的基本使用,帮助初学者快速上手。 一、Lucene的架构与工作原理 Lucene的核心概念包括文档(Document)、字段(Field)、索引(Index)和查询(Query)。首先,每个文档由一个或多个...
《Lucene in Action》是关于Apache Lucene搜索引擎库的一本经典著作,这本书深入浅出地讲解了Lucene的原理和应用。源代码是学习技术书籍的精髓所在,它能让我们直观地理解书中理论的实现过程。现在我们拥有《Lucene ...
孔浩老师,作为业界知名的IT教育专家,以其深入浅出的教学方式,使得复杂的Lucene技术变得易于理解和掌握。 Lucene是Java平台上的一个开源全文检索库,它提供了基本的索引和搜索功能,同时也支持高级的搜索特性,如...
《Lucene in Action》是一本深受开发者欢迎的书籍,它深入浅出地介绍了Apache Lucene这个全文搜索引擎库的使用和实现原理。这本书的配套源码提供了丰富的实例,帮助读者更好地理解Lucene的工作机制,同时也为实际...
总结来说,这篇关于“Lucene全文检索”的文章深入浅出地探讨了Lucene的基本概念、工作流程、源码解析和实践应用,为开发者提供了全面了解和使用Lucene的指导。通过阅读和学习,读者将能够掌握如何利用Lucene构建自己...
《Lucene in Action》是一本深受开发者欢迎的关于Apache Lucene的权威指南,它深入浅出地介绍了如何使用这个强大的全文搜索引擎库。这本书的配套源代码包含了大量的示例和实战练习,帮助读者更好地理解和应用Lucene...
这本书深入浅出地讲解了Lucene的工作原理和实际应用,而提供的源码则帮助读者更好地理解和实践书中的示例。 源码文件通常包含了书中各个章节的示例程序,这些示例涵盖了Lucene的基本用法到高级特性的实现,如文档...
《Lucene in Action》是一本深受开发者喜爱的书籍,它深入浅出地介绍了Apache Lucene这个全文搜索引擎库的使用和实现细节。这本书的实例代码涵盖了Lucene的核心功能和高级用法,是学习Lucene不可或缺的参考资料。...
这本书深入浅出地讲解了如何利用Lucene进行高效的文本搜索和索引构建,是Java开发者理解和应用Lucene不可或缺的参考资料。 Lucene是一个强大的全文检索库,它允许开发者在应用程序中实现高级搜索功能,而无需从头...
总的来说,"Lucene.Net 2.0 源码+文档"是学习和研究全文检索技术的宝贵资料,无论是对.NET开发人员还是对信息检索感兴趣的人员,都能从中获益匪浅。通过深入研究源码和文档,你可以掌握如何利用Lucene.Net构建高效...
《Lucene in Action》是一本深受开发者欢迎的书籍,它深入浅出地介绍了Apache Lucene这个全文搜索引擎库的使用和实现原理。这本书分为中文和英文两个版本,为读者提供了全面了解和掌握Lucene的机会。PDF版包含了完整...
《Lucene in Action》中文版是一本全面介绍Apache Lucene搜索引擎库的专业书籍,它深入浅出地阐述了Lucene的核心概念、使用方法以及高级技术。Lucene是一个高性能、全文本搜索库,广泛应用于各种信息检索系统,如...
《深入浅出Lucene搜索引擎:基于Java的关键字搜索实践》 Lucene是Apache软件基金会的开源项目,它是一个全文检索库,提供了强大的文本分析、索引和搜索功能。本实例将探讨如何使用Lucene在Java环境中实现关键词搜索...
这个压缩包包含的是Lucene.NET的源代码以及相关的中文文档,对于想要深入理解和使用Lucene.NET的开发者来说,是非常宝贵的资源。 首先,让我们来看看Lucene.NET的核心功能。Lucene.NET提供了一套完整的文本分析和...
- 教程文章:深入浅出的讲解Lucene的关键概念和技术。 - 论文与书籍:如《Lucene in Action》等经典著作,深入探讨Lucene的内部工作原理和最佳实践。 ### 总结 学习Lucene不仅是掌握一个库,更是对信息检索技术的...
《Annotated Lucene(源码剖析中文版)》这本书深入浅出地介绍了这些概念,并通过源码解析帮助读者掌握Lucene的实现细节,对于Java开发者来说,是一本宝贵的参考资料。通过阅读这本书,你可以提升在全文检索领域的...