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给过滤掉了,所以大家注意第4个Token直接startOffset从5开始.
如果改用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是用来走访Token的iterator(迭代器)
看一下其源代码:

public abstract class TokenStream ...{

public abstract Token next() throws IOException;


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

}

一个Tokenizer,is-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 ...{
![]()
分享到:
相关推荐
《深入解析FileAnalysis文件分析软件》 在信息技术领域,文件分析是至关重要的环节,它涉及到文件类型识别、安全检查以及数据处理等多个方面。FileAnalysis文件分析软件,作为一款专为此目的设计的工具,以其快速、...
总的来说,"lucene je-analysis jar包"是构建高效文本处理和分类系统的基石。正确选择和使用这两个库,可以极大地提高文本分析的准确性和效率。在实践中,开发者需要了解它们的工作原理,掌握其API的使用,并注意...
Tyrrell Rockafellar的著作《凸分析Convex Analysis》是该领域的经典之作,自1970年首次出版以来,它对优化理论和应用数学产生了深远的影响。这本书详细论述了凸集和凸函数的理论,并且深入探讨了这些理论在求解最...
性能测试是评估软件系统在高负载或大数据量情况下的运行状况的重要手段,而LoadRunner的Analysis工具则是进行性能测试分析的关键工具。本篇主要讲解如何使用Analysis进行性能测试结果的分析。 1. Analysis简介 ...
【Google Analysis资源包】是一个专为Android开发者设计的工具包,它主要包含了对Google Analytics的集成和支持。这个压缩包提供了一个jar文件和一个示例项目,帮助开发者更好地理解和使用Google Analytics服务来...
《数学分析Rudin Principles of Mathematical Analysis》是由Walter Rudin所著的一本数学分析领域的经典教材,它深入地探讨了数学分析的基础理论和应用。本书不仅是数学分析入门的基础读物,也被广泛用作大学数学...
Nanoscope-Analysis是一款AFM数据离线分析软件,能够对AFM测试数据进行离线分析和处理。本文将对Nanoscope-Analysis软件的简易使用方法进行详细介绍。 一、安装和设置 首先,需要从ftp://202.38.246.199:2100/上的...
Frontline ComProbe Protocol Analysis System是一款专业的蓝牙抓包分析工具,它的出现极大地简化了蓝牙通信数据的抓取、解析和问题诊断的过程。 蓝牙抓包是利用特定的硬件设备和软件工具,对蓝牙设备之间传输的...
不过,我可以基于标题、描述和标签来提供与《Principles of Real Analysis实分析习题集》相关的知识点。 《Principles of Real Analysis实分析习题集》是一本在数学领域特别是实分析领域广泛使用的教材或参考书。实...
《ComProbe Protocol Analysis System——深度探索蓝牙数据抓包与解析》 在当今信息化社会,蓝牙技术作为无线通信的重要组成部分,广泛应用于各种智能设备之间。为了深入理解和优化蓝牙应用,掌握蓝牙数据的抓包与...
标题中的"SAP BW Analysis插件包64位下载AOFFICE28SP11_0-70004973.rar"指的是SAP Business Warehouse (BW) 的Analysis插件,适用于64位操作系统的Microsoft Office环境,特别是Excel。这个插件的主要功能是将SAP BW...
该系列的第一本“Fourier Analysis: An Introduction”便是专门介绍傅里叶分析这一理论的,其内容不仅包括了傅里叶分析的基础知识,还涉及了复分析、实分析、测度理论、积分以及Hilbert空间等更深层次的分析主题。...
SAP Analysis for Microsoft Excel是SAP公司推出的一款强大的数据分析工具,它将SAP BusinessObjects分析功能与Microsoft Excel的灵活性相结合,为用户提供了在熟悉的Excel环境中进行高级分析的可能性。这款软件的...
通过学习《Learning Linux Binary Analysis》,读者不仅能够掌握Linux二进制分析的基本概念和技术,还能深入了解高级主题,如动态分析、静态分析以及漏洞利用与防御策略。这对于想要在网络安全领域有所作为的专业...
3. RTP Stream analysis:RTP Stream analysis 是 Wireshark 分析 RTP 丢包率的核心技术要点。通过 RTP Stream analysis,可以了解数据包的传输情况,进而了解丢包率。 四、Wireshark 分析 RTP 丢包率的优点 ...
IPA(Ingenuity Pathway Analysis)是一款在生物信息学领域广泛应用的通路分析工具,它专为研究人员提供了一整套分析方案,以理解基因表达数据、蛋白质组学数据或其他分子交互数据背后的生物学意义。这款软件的强大...
《数值分析Numerical Analysis》是Timothy Sauer所著的一本关于数值计算的经典教材,现在已经出到了第三版。这本书深入浅出地介绍了数值分析的基本概念、理论和方法,覆盖了广泛的数值计算领域。尽管该书的中文版在...
通过上述内容的总结可以看出,《Topics in Functional Analysis》深入浅出地介绍了泛函分析领域的多个重要方面,包括空间嵌入理论、闭图像定理的应用、拓扑比较以及非局部凸空间的相关理论。这些内容不仅对于学习...
《Python Data Analysis Cookbook》是一本专注于使用Python进行数据分析的实用指南。这本书旨在帮助读者通过Python的各类库,如Pandas、NumPy和Matplotlib等,有效地处理和分析数据。书中包含了一系列精心设计的实例...
Stein实分析是一本经典的数学分析教材,其内容涵盖了实分析领域中的多个重要概念和定理。通过提供Stein实分析书后习题的部分解答,本文档能够帮助读者更好地理解和掌握这些概念。下面我们从文档提供的内容出发,详细...