一、Analyzer
Analyzer类是所有分词器的基类,它是个抽象类,所有的子类必须实现
- @Override
- protected TokenStreamComponents createComponents(String fieldName, Reader reader) {
- return new TokenStreamComponents;
- }
TokenStreamComponents有两个构造方法
- Analyzer.TokenStreamComponents(Tokenizer source)
- Analyzer.TokenStreamComponents(Tokenizer source, TokenStream result)
二、TokenStream
TokenStream能够产生语汇单元序列的类,有两个类型的子类TokenFilter和Tokenizer
1.Tokenizer是通过读取字符串创建语汇单元的
2.TokenFilter封装另个TokenStream去处理语汇单元,产生新的语汇单元
三、构造一个分析器理解分析链的顺序很重要
看Lunene In Action书上写的,也不知道是不是这样理解的?
- public class StopAnalyzer2 extends Analyzer {
- private Set stopWords;
- public StopAnalyzer2(){
- stopWords=StopAnalyzer.ENGLISH_STOP_WORDS_SET;
- }
- public StopAnalyzer2(String[] stopWords){
- this.stopWords=StopFilter.makeStopSet(Version.LUCENE_42, stopWords);
- }
- @Override
- protected TokenStreamComponents createComponents(String arg0, Reader arg1) {
- //首先转换为小写的流
- Tokenizer t=new LowerCaseTokenizer(Version.LUCENE_42,arg1);
- //转换后用处理去除顿词
- return new TokenStreamComponents(t, new StopFilter(Version.LUCENE_42, t, (CharArraySet) stopWords));
- // TokenFilter tt=new LowerCaseFilter(Version.LUCENE_42, new LetterTokenizer(Version.LUCENE_42, arg1));
- // return new TokenStreamComponents(null,new StopFilter(Version.LUCENE_42, tt, (CharArraySet) stopWords));
- }
- //结果看是否能把大写The过滤掉
- public static void main(String[] args) throws IOException {
- AnalyzerUtils.displayTokes(new StopAnalyzer2(), "The I love you");
- }
- }
结果:
修改后
- @Override
- protected TokenStreamComponents createComponents(String arg0, Reader arg1) {
- TokenStream filter=new StopFilter(Version.LUCENE_42, new LetterTokenizer(Version.LUCENE_42, arg1), (CharArraySet) stopWords);
- return new TokenStreamComponents(t,new LowerCaseFilter(Version.LUCENE_42, filter));
- }
结果:
四、对不同分次器做的比较
书上的Util类这个是在网上找的
- public class AnalyzerUtils {
- public static void displayTokes(Analyzer analyzer,String text) throws IOException{
- displayTokes(analyzer.tokenStream("contents", new StringReader(text)));
- }
- public static void displayTokes(TokenStream tokenStream) throws IOException{
- CharTermAttribute termAttribute = tokenStream.addAttribute(CharTermAttribute.class);
- tokenStream.reset(); //此行,不能少,不然会报 java.lang.ArrayIndexOutOfBoundsException
- PositionIncrementAttribute posIncr=tokenStream.addAttribute(PositionIncrementAttribute.class);
- OffsetAttribute o=tokenStream.addAttribute(OffsetAttribute.class);
- TypeAttribute type=tokenStream.addAttribute(TypeAttribute.class);
- while(tokenStream.incrementToken()){
- System.out.print("["+termAttribute.toString()+" "+o.startOffset()+"->"+o.endOffset()+" "+type.type()+"]");
- }
- // while(tokenStream.incrementToken()){
- // System.out.print("["+termAttribute.toString()+" "+"]");
- //
- // }
- }
- }
相关推荐
**正文** ...通过深入研究这个Demo,开发者不仅可以理解Lucene的基本用法,还能掌握如何在实际项目中整合和优化分词过程。对于那些对自然语言处理或信息检索感兴趣的开发者来说,这是一个极好的学习资源。
Lucene3.0分词系统的核心在于理解和应用其分词原理,无论是对于英文还是中文文本,这一过程都是构建高效搜索引擎的基础。以下是对Lucene3.0分词系统中涉及的关键知识点的深入解析。 ### 英文分词原理 英文分词相较...
以上就是使用Lucene进行中文分词搜索的基本流程。在实际应用中,还需要考虑诸如性能优化、近实时搜索、多线程索引和搜索等问题。此外,LuceneDB.java可能包含了与数据库交互的部分,将数据库中的数据导入到Lucene...
- **文档**:是Lucene中的基本存储单位,由多个字段组成。 - **字段**:包含具体的文本内容,是文档的组成部分。 - **索引**:Lucene通过构建倒排索引来提高搜索效率。倒排索引是一种数据结构,它将每个词映射到包含...
通过这些接口,开发者可以灵活地控制分词过程,比如设置不同的分词模式,或者调整分词器的参数以适应不同的应用场景。 在下载的压缩包中,"META-INF"目录包含了组件的元数据信息,这些信息对于Java的类加载机制至关...
最大向前匹配算法是一种常见的中文分词策略,其基本思想是从待分词的字符串的开头,尝试用已知的词典中的最长词进行匹配,并不断向前移动,直到无法找到更长的匹配为止。该算法简单高效,适用于大部分中文文本处理...
- **运行效率**:测量分词过程的时间消耗,以及对Lucene整体性能的影响。 - **与现有方法的比较**:与其他流行的中文分词工具(如Jieba分词等)进行对比,分析各自的优缺点。 通过实验数据可以看出,基于Lucene的...
4. **创建Document**:Document是Lucene.Net中的基本数据结构,代表一个要索引的文档。添加字段(Field)来存储文档内容,如标题、内容等。 5. **索引文档**:使用IndexWriter将Document写入索引。 6. **关闭资源**...
同时,分词器的性能也有所提升,减少了分词过程中的内存消耗和计算时间。 为了使用和定制Lucene的分词器,开发者需要了解如何配置和调用相应的API。例如,可以通过设置Analyzer类来指定使用的分词器,然后通过...
在中文处理方面,Lucene虽然内置了一些基本的分词功能,但是对于复杂的中文词汇和短语,其原生的分词效果可能不够理想。这就需要引入专门针对中文的分词工具。 Paoding,又名“庖丁”,是专门为Java平台设计的一个...
Analyzer负责整个分词过程,TokenStream则表示一系列的Token(词元)。通过阅读Analyzer子类的实现,可以了解如何初始化分词器,以及如何根据输入文本生成TokenStream。 例如,在jieba分词器的源码中,可以看到如何...
下面将详细介绍Lucene和Paoding分词在构建索引过程中的关键知识点。 一、Lucene的索引机制 Lucene的核心在于它的倒排索引结构。这种结构允许快速地找到包含特定词汇的文档。在建立索引时,Lucene会对输入的文档进行...
3. 分词处理:在3.3版本中,Lucene提供了基本的分词功能,但通常需要与其他分词器结合使用以提高搜索效果。 二、IK分词器3.2.8 1. IK分词器简介:IK (Intelligent Chinese Analyzer) 是一个针对中文的开源分词工具...
在本压缩包中提供的DLL文件是盘古分词的接口,用于与Lucene进行交互,将分词结果应用到Lucene的索引和搜索过程中。词库文件则包含了预定义的词汇,是盘古分词进行分词的基础。 在实际使用中,开发者可以根据需求...
Lucene 是一个开源的全文检索库,由Apache软件基金会维护,它为开发人员提供了高级文本搜索功能。...在使用这些组件时,开发者需要具备一定的Lucene知识和Java编程能力,同时也需要了解中文分词的基本原理和实践技巧。
这个“lucene基本包”包含了Lucene的核心组件,是理解和使用Lucene进行信息检索的基础。 1. **全文检索引擎架构** Lucene的核心理念是建立索引,以便快速查找文档中的信息。它通过将文本数据转换成便于搜索的结构...
通过深入研究《Lucene in Action》的源码,开发者不仅可以理解Lucene的基本工作原理,还能学习如何实际应用这些知识,解决具体的搜索问题。对于初学者而言,这是一个很好的起点,可以帮助他们快速上手并逐步掌握全文...
2. **配置Analyzer**:在Lucene的索引创建和搜索过程中,需要定义Analyzer。对于IKAnalyzer,可以这样配置: ```java import org.apache.lucene.analysis.cn.ik.IKAnalyzer; Analyzer analyzer = new IKAnalyzer();...
Paoding 提供了易于使用的接口,可以在 Lucene 的索引和搜索过程中实现对中文文本的分词处理。 ### 中文分词器配置 在使用 Paoding 分词器时,需要配置相应的字典文件路径和分词参数,以确保分词的效果。例如,...