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年首次出版以来,它对优化理论和应用数学产生了深远的影响。这本书详细论述了凸集和凸函数的理论,并且深入探讨了这些理论在求解最...
【Google Analysis资源包】是一个专为Android开发者设计的工具包,它主要包含了对Google Analytics的集成和支持。这个压缩包提供了一个jar文件和一个示例项目,帮助开发者更好地理解和使用Google Analytics服务来...
《数学分析Rudin Principles of Mathematical Analysis》是由Walter Rudin所著的一本数学分析领域的经典教材,它深入地探讨了数学分析的基础理论和应用。本书不仅是数学分析入门的基础读物,也被广泛用作大学数学...
不过,我可以基于标题、描述和标签来提供与《Principles of Real Analysis实分析习题集》相关的知识点。 《Principles of Real Analysis实分析习题集》是一本在数学领域特别是实分析领域广泛使用的教材或参考书。实...
Nanoscope-Analysis是一款AFM数据离线分析软件,能够对AFM测试数据进行离线分析和处理。本文将对Nanoscope-Analysis软件的简易使用方法进行详细介绍。 一、安装和设置 首先,需要从ftp://202.38.246.199:2100/上的...
该系列的第一本“Fourier Analysis: An Introduction”便是专门介绍傅里叶分析这一理论的,其内容不仅包括了傅里叶分析的基础知识,还涉及了复分析、实分析、测度理论、积分以及Hilbert空间等更深层次的分析主题。...
SAP Analysis for Microsoft Excel是SAP公司推出的一款强大的数据分析工具,它将SAP BusinessObjects分析功能与Microsoft Excel的灵活性相结合,为用户提供了在熟悉的Excel环境中进行高级分析的可能性。这款软件的...
通过学习《Learning Linux Binary Analysis》,读者不仅能够掌握Linux二进制分析的基本概念和技术,还能深入了解高级主题,如动态分析、静态分析以及漏洞利用与防御策略。这对于想要在网络安全领域有所作为的专业...
《ComProbe Protocol Analysis System——深度探索蓝牙数据抓包与解析》 在当今信息化社会,蓝牙技术作为无线通信的重要组成部分,广泛应用于各种智能设备之间。为了深入理解和优化蓝牙应用,掌握蓝牙数据的抓包与...
标题中的"SAP BW Analysis插件包64位下载AOFFICE28SP11_0-70004973.rar"指的是SAP Business Warehouse (BW) 的Analysis插件,适用于64位操作系统的Microsoft Office环境,特别是Excel。这个插件的主要功能是将SAP BW...
IPA(Ingenuity Pathway Analysis)是一款在生物信息学领域广泛应用的通路分析工具,它专为研究人员提供了一整套分析方案,以理解基因表达数据、蛋白质组学数据或其他分子交互数据背后的生物学意义。这款软件的强大...
通过上述内容的总结可以看出,《Topics in Functional Analysis》深入浅出地介绍了泛函分析领域的多个重要方面,包括空间嵌入理论、闭图像定理的应用、拓扑比较以及非局部凸空间的相关理论。这些内容不仅对于学习...
《Python Data Analysis Cookbook》是一本专注于使用Python进行数据分析的实用指南。这本书旨在帮助读者通过Python的各类库,如Pandas、NumPy和Matplotlib等,有效地处理和分析数据。书中包含了一系列精心设计的实例...
数学分析(Analysis III) 数学分析是数学的一个重要分支,它研究函数、极限、微积分、序列、级数等概念和理论。该领域的知识点非常广泛,本文将从给定的文件信息中提取相关知识点,详细说明标题、描述、标签和部分...
### 泛函分析 Functional Analysis 英文笔记 #### 一、概述 泛函分析是现代数学的一个重要分支,它主要研究无限维空间中的函数和算子。这些空间通常包括希尔伯特空间(Hilbert spaces)、巴拿赫空间(Banach ...
Wireshark 分析 RTP 丢包率 Wireshark 是一个功能强大且广泛使用的网络协议分析工具,能够对网络数据包进行捕获、分析和显示。今天,我们将使用 Wireshark 分析 RTP 丢包率,通过详细的步骤来帮助读者快速了解 ...