`
fuyangchang
  • 浏览: 147210 次
  • 性别: Icon_minigender_1
  • 来自: 大连
社区版块
存档分类
最新评论

Analysis包分析

阅读更多

Analysis包分析

算法和数据结构分析:

由于Analysis包比较简单,不详述了!

算法:基于机械分词 1-gram,2-gram,HMM(如果使用ICTCLAS接口的话)

数据结构:部分源码用到了Set ,HashTable,HashMap

认真理解Token

Lucene中的Analysis包专门用于完成对于索引文件的分词.Lucene中的Token是一个非常重要的概念.

看一下其源码实现:

public final class Token ...{

  String termText;                        
// the text of the term

  
int startOffset;                           // start in source text

  
int endOffset;                            // end in source text

  String type 
= "word";                        // lexical type

  
private int positionIncrement = 1;

  
public Token(String text, int start, int end)

  
public Token(String text, int start, int end, String typ)

  
public void setPositionIncrement(int positionIncrement)

  
public int getPositionIncrement() ...return positionIncrement; }

  
public final String termText() ...return termText; }

  
public final int startOffset() ...return startOffset; }

public void setStartOffset(int givenStartOffset)

  
public final int endOffset() ...return endOffset; }

public void setEndOffset(int givenEndOffset)

  
public final String type() ...return type; }

  
public String toString()

 }


下面编一段代码来看一下

TestToken.java

package org.apache.lucene.analysis.test;

import org.apache.lucene.analysis.*;

import org.apache.lucene.analysis.standard.StandardAnalyzer;

import java.io.*;

public class TestToken

...{

  
public static void main(String[] args)

  
...{

    String string 
= new String("我爱天大,但我更爱中国");

//Analyzer analyzer = new StandardAnalyzer();

Analyzer analyzer 
= new TjuChineseAnalyzer();

//Analyzer analyzer= new StopAnalyzer();

    TokenStream ts 
= analyzer.tokenStream("dummy",new StringReader(string));

    Token token;

    
try

    
...{

      
int n=0;

      
while ( (token = ts.next()) != null)

      
...{

        System.out.println((n
++)+"->"+token.toString());

      }


    }


    
catch(IOException ioe)

    
...{

      ioe.printStackTrace();

    }


 

  }


}


注意看其结果如下所示

0->Token's (termText,startOffset,endOffset,type,positionIncrement) is:(,0,1,<CJK>,1)

1->Token's (termText,startOffset,endOffset,type,positionIncrement) is:(,1,2,<CJK>,1)

2->Token's (termText,startOffset,endOffset,type,positionIncrement) is:(,2,3,<CJK>,1)

3->Token's (termText,startOffset,endOffset,type,positionIncrement) is:(,3,4,<CJK>,1)

4->Token's (termText,startOffset,endOffset,type,positionIncrement) is:(,5,6,<CJK>,1)

5->Token's (termText,startOffset,endOffset,type,positionIncrement) is:(,6,7,<CJK>,1)

6->Token's (termText,startOffset,endOffset,type,positionIncrement) is:(,7,8,<CJK>,1)

7->Token's (termText,startOffset,endOffset,type,positionIncrement) is:(,8,9,<CJK>,1)

8->Token's (termText,startOffset,endOffset,type,positionIncrement) is:(,9,10,<CJK>,1)

9->Token's (termText,startOffset,endOffset,type,positionIncrement) is:(,10,11,<CJK>,1)

注意:其中”,”StandardAnalyzer给过滤掉了,所以大家注意第4Token直接startOffset5开始.

如果改用StopAnalyzer()

0->Token's (termText,startOffset,endOffset,type,positionIncrement) is:(我爱天大,0,4,word,1)

1->Token's (termText,startOffset,endOffset,type,positionIncrement) is:(但我更爱中国,5,11,word,1)

改用TjuChineseAnalyzer(我写的,下文会讲到如何去写)

0->Token's (termText,startOffset,endOffset,type,positionIncrement) is:(,3,4,word,1)

1->Token's (termText,startOffset,endOffset,type,positionIncrement) is:(天大,6,8,word,1)

2->Token's (termText,startOffset,endOffset,type,positionIncrement) is:(,19,20,word,1)

3->Token's (termText,startOffset,endOffset,type,positionIncrement) is:(,22,23,word,1)

4->Token's (termText,startOffset,endOffset,type,positionIncrement) is:(中国,25,27,word,1)

讲明白了Token,咱们来看以下其他的东西

一个TokenStream是用来走访Tokeniterator(迭代器)

看一下其源代码:

public abstract class TokenStream ...{

  
public abstract Token next() throws IOException;

  
public void close() throws IOException ...{}

}


一个Tokenizeris-a TokenStream(派生自TokenStream),其输入为Reader

看一下其源码如下:

public abstract class Tokenizer extends TokenStream ...{

  
protected Reader input;

  
protected Tokenizer() ...{}

  
protected Tokenizer(Reader input) ...{

    
this.input = input;

  }


  
public void close() throws IOException ...{

    input.close();

  }


}


一个TokenFilter is–a TokenStream(派生自TokenStream),其义如名就是用来完成对TokenStream的过滤操作,譬如

StopWords,将Token变为小写等。

源码如下:

public abstract class TokenFilter extends TokenStream ...{
分享到:
评论
1 楼 gloomylilac 2008-03-28  
为什么没看见列出TjuChineseAnalyzer源码?

相关推荐

    FileAnalysis文件分析软件

    《深入解析FileAnalysis文件分析软件》 在信息技术领域,文件分析是至关重要的环节,它涉及到文件类型识别、安全检查以及数据处理等多个方面。FileAnalysis文件分析软件,作为一款专为此目的设计的工具,以其快速、...

    lucene je-analysis jar包

    总的来说,"lucene je-analysis jar包"是构建高效文本处理和分类系统的基石。正确选择和使用这两个库,可以极大地提高文本分析的准确性和效率。在实践中,开发者需要了解它们的工作原理,掌握其API的使用,并注意...

    凸分析Convex Analysis(by Rockafellar)

    Tyrrell Rockafellar的著作《凸分析Convex Analysis》是该领域的经典之作,自1970年首次出版以来,它对优化理论和应用数学产生了深远的影响。这本书详细论述了凸集和凸函数的理论,并且深入探讨了这些理论在求解最...

    Google Analysis资源包

    【Google Analysis资源包】是一个专为Android开发者设计的工具包,它主要包含了对Google Analytics的集成和支持。这个压缩包提供了一个jar文件和一个示例项目,帮助开发者更好地理解和使用Google Analytics服务来...

    数学分析Rudin Principles of Mathematical Analysis

    《数学分析Rudin Principles of Mathematical Analysis》是由Walter Rudin所著的一本数学分析领域的经典教材,它深入地探讨了数学分析的基础理论和应用。本书不仅是数学分析入门的基础读物,也被广泛用作大学数学...

    Principles of Real Analysis实分析习题集

    不过,我可以基于标题、描述和标签来提供与《Principles of Real Analysis实分析习题集》相关的知识点。 《Principles of Real Analysis实分析习题集》是一本在数学领域特别是实分析领域广泛使用的教材或参考书。实...

    AFM数据离线分析软件Nanoscope-Analysis简易使用方法(PPT文档).ppt

    Nanoscope-Analysis是一款AFM数据离线分析软件,能够对AFM测试数据进行离线分析和处理。本文将对Nanoscope-Analysis软件的简易使用方法进行详细介绍。 一、安装和设置 首先,需要从ftp://202.38.246.199:2100/上的...

    傅里叶分析英文原版 Fourier analysis

    该系列的第一本“Fourier Analysis: An Introduction”便是专门介绍傅里叶分析这一理论的,其内容不仅包括了傅里叶分析的基础知识,还涉及了复分析、实分析、测度理论、积分以及Hilbert空间等更深层次的分析主题。...

    SAP Analysis for Microsoft Excel SP10_70004974 包含 EPM

    SAP Analysis for Microsoft Excel是SAP公司推出的一款强大的数据分析工具,它将SAP BusinessObjects分析功能与Microsoft Excel的灵活性相结合,为用户提供了在熟悉的Excel环境中进行高级分析的可能性。这款软件的...

    Learning Linux Binary Analysis linux 二进制分析

    通过学习《Learning Linux Binary Analysis》,读者不仅能够掌握Linux二进制分析的基本概念和技术,还能深入了解高级主题,如动态分析、静态分析以及漏洞利用与防御策略。这对于想要在网络安全领域有所作为的专业...

    蓝牙抓包工具-ComProbe Protocol Analysis System.rar

    《ComProbe Protocol Analysis System——深度探索蓝牙数据抓包与解析》 在当今信息化社会,蓝牙技术作为无线通信的重要组成部分,广泛应用于各种智能设备之间。为了深入理解和优化蓝牙应用,掌握蓝牙数据的抓包与...

    SAP BW Analysis插件包64位下载AOFFICE28SP11_0-70004973.rar

    标题中的"SAP BW Analysis插件包64位下载AOFFICE28SP11_0-70004973.rar"指的是SAP Business Warehouse (BW) 的Analysis插件,适用于64位操作系统的Microsoft Office环境,特别是Excel。这个插件的主要功能是将SAP BW...

    IPA-Ingenuity Pathway Analysis

    IPA(Ingenuity Pathway Analysis)是一款在生物信息学领域广泛应用的通路分析工具,它专为研究人员提供了一整套分析方案,以理解基因表达数据、蛋白质组学数据或其他分子交互数据背后的生物学意义。这款软件的强大...

    Topics in Functional Analysis泛函分析

    通过上述内容的总结可以看出,《Topics in Functional Analysis》深入浅出地介绍了泛函分析领域的多个重要方面,包括空间嵌入理论、闭图像定理的应用、拓扑比较以及非局部凸空间的相关理论。这些内容不仅对于学习...

    Python Data Analysis Cookbook数据分析

    《Python Data Analysis Cookbook》是一本专注于使用Python进行数据分析的实用指南。这本书旨在帮助读者通过Python的各类库,如Pandas、NumPy和Matplotlib等,有效地处理和分析数据。书中包含了一系列精心设计的实例...

     Analysis III-Herbert Amann, Joachim Escher.pdf

    数学分析(Analysis III) 数学分析是数学的一个重要分支,它研究函数、极限、微积分、序列、级数等概念和理论。该领域的知识点非常广泛,本文将从给定的文件信息中提取相关知识点,详细说明标题、描述、标签和部分...

    泛函分析 functional analysis 英文笔记

    ### 泛函分析 Functional Analysis 英文笔记 #### 一、概述 泛函分析是现代数学的一个重要分支,它主要研究无限维空间中的函数和算子。这些空间通常包括希尔伯特空间(Hilbert spaces)、巴拿赫空间(Banach ...

    wireshark分析RTP丢包率

    Wireshark 分析 RTP 丢包率 Wireshark 是一个功能强大且广泛使用的网络协议分析工具,能够对网络数据包进行捕获、分析和显示。今天,我们将使用 Wireshark 分析 RTP 丢包率,通过详细的步骤来帮助读者快速了解 ...

Global site tag (gtag.js) - Google Analytics