`
deepfuture
  • 浏览: 4400623 次
  • 性别: Icon_minigender_1
  • 来自: 湛江
博客专栏
073ec2a9-85b7-3ebf-a3bb-c6361e6c6f64
SQLite源码剖析
浏览量:80078
1591c4b8-62f1-3d3e-9551-25c77465da96
WIN32汇编语言学习应用...
浏览量:70054
F5390db6-59dd-338f-ba18-4e93943ff06a
神奇的perl
浏览量:103361
Dac44363-8a80-3836-99aa-f7b7780fa6e2
lucene等搜索引擎解析...
浏览量:285830
Ec49a563-4109-3c69-9c83-8f6d068ba113
深入lucene3.5源码...
浏览量:15014
9b99bfc2-19c2-3346-9100-7f8879c731ce
VB.NET并行与分布式编...
浏览量:67573
B1db2af3-06b3-35bb-ac08-59ff2d1324b4
silverlight 5...
浏览量:32155
4a56b548-ab3d-35af-a984-e0781d142c23
算法下午茶系列
浏览量:45991
社区版块
存档分类
最新评论

java-分析器解析

阅读更多

1、语汇单元的组成:

1)经过分析产生的基本单元。在索引时,Lucene使用特定的分析器来处理需要被语汇单元化的指定域,并将每个语汇单元以项的形式写入索引。

2)起点偏移量是指语汇单元文本的起始字符在原广西中的位置,而终点的偏移量则表示语汇单元终止字符的下一个位置。

3)文本被语汇单元化后,相对于前一语汇单元的位置信息被保存为位置增量值。所有的内置语汇单元将位置增量的默认值设置为1,表示所有语汇单元是连续的,位置上是一个紧接一个的。

2、语汇单元转换为项

1)当文本在索引过程中经过分析后,每个语汇单元做为一个项被传递给索引。

2)位置增量是语汇单元携带到索引中的惟一的附加元数据。

3)起点和终点偏移量和语汇单元类型都被抛弃了-这些元数据仅在分析过程中使用。

4)位置增量使得当前语汇单元和前一个语汇单元 联系起来。位置增量为1,表示每个单词存于域中唯一且连接的位置。

5)位置增量大于1,允许单词之间有空隙。比如说这些空隙上的被分析器删除

6)位置增量为0的语汇单元,会将该语汇单元放置在前一个语汇单元的位置上。通常用于表示单词的同义词。

3、TokenStream(基类包括next()和close()方法 )

1)2个不同的子类

A)Tokenizer:将Reader对象中的数据切分为语汇单元。将String对象包装在StringReader中,进行语汇单元的切分。处理单个字符。

具体又有以下子类:

a)CharTokenizer:其他基于字符的Tokenizer类的父类,包含抽象方法isTokenChar()。当isTokenChar()==true时,输出连续的语汇单元块。该类能对字符规格化处理。Token对象限制的最大字符个数为255个

b)WhitespaceTokenizer:isTokenChar()值为true时的CharTokenizer子类,用于处理所有非空格的字符

c)LetterTokenizer:isTokenChar()值为true并且Character.isLetter()值为true时的CharTokenizer类

d)LowCaseTokenizer:将所有字符小写化的LetterTokenizer

e)StandardTokenier:复杂的基于语法的语汇单元切分器,用于输出高级类型的语汇单元,如E-MAIL地址等。每个输出的语汇单元标记为一个特殊类型,这些类型中的一部分需要使用StandardFilter类特殊处理。

B)TokenFilter:允许你将多个TokenStream对象连接在一起。一个TokenStream对象被传递给TokenFilter时,由TokenFilter对其进行增加、删除和更改等,用于处理单词。

a)LowerCaseFilter:将语汇单元文本转换为小写形式

b)StopFilter:移除指定集合中的信用词

c)PorterStemFilter:利用Poter词干提取算法将语汇单元还原为其词干。

d)StandardFilter:接收一个StandardTokenizer对象做为参数。

4、例子:关于TokenStream

public class AnanlyzerDemo{

private static final String[] examples={"aa adfadf fadfaf,","xxfdasf afadsf wer@qw.com"};

private static final Analyzer[] analyzers=new Analyzer[]{

newWhitespaceAnalyzer(),

newSimpleAnalyzer(),

new StopAnalyzer(),

new StanderdAnalyzer()

};

public static void main(String[] args)throws IOException{

String[]strings=examples;

if(args.length>0) strings=args;

for (inti=0;i<strings.length;i++) analyze(strings[i]);
}

private static void analze(String text) throws IOException{

System.out.println("Analyzing\""+text+"\"");

for (inti=0;i<anayzers.length;i++){

Analyzer analyzer=analyzers[i];

String name=analyzer.getClass().getName();

name=name.substring(name.lastIndexof(".")+1);

System.out.println(" "+name+":");

System.out.print("");

AnaylyzerUtils.displayTokens(analyzer,text);

System.out.println("\n");

}

}

public class AnalyzerUtils{

public class Token[]tokenFromAnalysis(Analyzer analyzer,String text ) throwsIOException{

TokenStream stream=analyzer.tokenStream("contents",newStringReader(text));

ArrayList tokenList=new ArrayList();

while (true){

Token token=stream.next();

if (token==null) break;

tokenList.add(token);

}

return(Token[]) tokenList.toArray(new Token[0]);

 

public static void displayTokens(Analyzer analyzer,String text)throws IOException{

Token[] tokens=tokensFromAnalysis(analyzerm,text);

for (int i=0;i<tokens.length;i+){

Token token=tokens[i];

System.out.print("["+token.termText()+"]");

}

}

//...............其他方法

}

}

}

深入分析Token对象

public static void displayTokensWithFullDetails(Analyzeranalyzer,String text) throws IOException{

Token[] tokens=tokensFromAnalysis(analyzer,text);

int position =0;

for (int i=0;i<tokens.length;i++){

Token token=tokens[i];

 

int increment=token.getPositionIncrement();

 

if (increment>0){

position=position+increment;

System.out.println();

System.out.print(position+":");

}

 

System.out.print("["+token.termText()+":"+token.startoffset()

+"- >"+token.endoffset()+":"+token.type()+"]");

}

}

publci static void main(String[] args) throws IOException{

displayTokensWithFullDetails(new SimpleAnalyzer(),"The quick brownfox....");

下面是这段程序的输出结果

1:[the:0->3:word]

2:[quick:4->9:word]

3:[brown:10-15:word]

4:[fox:16->19:word]

}

}

}

分享到:
评论

相关推荐

    java词法分析器_ - Java - Java_开发文档.rar_java 词法分析_java词法分析_词法分析_词法分析 j

    在Java语言中,词法分析器(也称为扫描器或lexer)的任务是识别源代码中的关键字、标识符、常量、运算符以及注释等元素。下面我们将深入探讨Java词法分析的相关知识点。 1. **词法规则**:Java的词法规则定义了源...

    基于java实现的语法分析器及词法分析器

    在编程语言处理领域,语法分析器和词法分析器是至关重要的组成部分,它们主要用于解析源代码,将其转化为计算机可以理解的形式。在这个项目中,我们关注的是一个基于Java实现的语法分析器和词法分析器。Java是一种...

    java 实现词法分析器以及语法分析器

    在Java中,我们可以使用正则表达式或者自定义的解析逻辑来实现词法分析器。例如,`WordThink3.java`可能就是一个实现了词法分析功能的类,它能够识别关键字、标识符、常量、运算符等不同的Token类型。 语法分析,紧...

    mysql-connector-java-5.1.37jar包和源码

    MySQL Connector/J是MySQL数据库的Java连接器,它允许Java应用程序通过JDBC(Java Database Connectivity)接口与MySQL数据库进行通信。在本案例中,"mysql-connector-java-5.1.37.jar" 是一个特定版本的MySQL JDBC...

    语法分析器 Java

    在Java编程中,语法分析器扮演着至关重要的角色,确保输入的代码符合Java语言的语法规则。这个"语法分析器 Java"项目可能是为了帮助开发者在编写Java程序时检测语法错误,或者扩展到处理其他文件类型。 语法分析器...

    java 语法分析器

    Java语法分析器是编程语言处理领域的一个重要工具,主要用于解析Java源代码,将人类可读的语句转化为计算机可理解的形式。在这个过程中,语法分析器扮演着关键角色,它依据语法规则对输入的源代码进行结构分析,构建...

    java词法分析器源代码

    Java词法分析器是编程语言解析过程中的关键组件,它主要负责将源代码文本转换成一系列有意义的符号或记号,这些符号可以被后续的语法分析器(也称为解析器)理解和处理。在这个特定的“java词法分析器源代码”压缩包...

    Java-日志分析器

    在这个项目中,我们将利用Java编写一个日志分析器,通过对日志数据的处理,获取诸如系统最繁忙时间段等有价值的信息。 首先,我们需要了解日志的基本结构和类型。日志通常包含时间戳、事件级别(如INFO、WARN、...

    语法分析器java实现

    例如,Java的`javacc`(Java Compiler Compiler)是一个用于生成词法分析器和语法分析器的工具,而ANTLR是一个更通用的解析工具,支持多种语言的生成。使用Java实现语法分析器,可以利用其强大的面向对象特性,设计...

    java词法分析器

    本词法分析器能分析出java中常见...另外,本词法分析器对java中的注释也进行了处理,解析过程中会跳过注释。总的来说,本词法分析器是一个比较完备的java词法分析器。本人对比了一下网上词法分析器,觉得本人的比较好。

    CMM解释器java版语法分析器

    本项目名为“CMM解释器java版语法分析器”,是国际软件学院的一次作业,目的是让学生掌握如何使用Java语言实现一个语法分析器。在这个过程中,学生将深入理解编程语言的内部工作原理,以及如何解析并执行代码。 ...

    java-HttpParser.zip

    Java HttpParser是一个基于...通过以上分析,我们可以看出Java HttpParser是一个强大的工具,它将llhttp的高性能和多线程支持带入了Java世界,为Java开发者提供了高效解析HTTP数据的能力,有利于构建高性能的Web服务。

    java语言编写词法、语法、语义分析器

    本项目专注于使用Java实现词法、语法和语义分析器,这些都是编译器设计与实现的核心部分。以下是关于这些知识点的详细说明: **词法分析器(Lexer或Tokenizer)** 词法分析器是编译器的第一步,它将源代码分解成一...

    Java编程艺术-表达式解析器.rar

    本资源“Java编程艺术-表达式解析器.rar”显然聚焦于如何使用Java语言来实现这一功能。这里我们将深入探讨Java编程中的表达式解析器相关知识。 首先,表达式解析器是计算机程序,它能够读取由操作符和操作数组成的...

    JAVA版的JAVA词法分析器

    JAVA版的JAVA词法分析器是一种用于解析JAVA源代码的工具,它主要负责将源代码文本转换成一系列有意义的标记,这一过程被称为词法分析或扫描。词法分析器是编译器或解释器的第一步,它将源代码分解成词汇单元,为后续...

    词法分析器和语法分析器java实现代码---

    语法分析器通常使用上下文无关文法(Context-Free Grammar,CFG)来进行解析,比如Java语言的文法。在Java实现中,可能会使用递归下降解析(Recursive Descent Parsing)或LR/LALR分析等技术。 在这个Java项目中,`...

    JAVA解析DBC文件

    在实际应用中,解析DBC文件的JAVA程序可能会被集成到更复杂的系统中,如汽车诊断工具、数据记录器或仿真环境。这些系统通过读取DBC文件,可以理解CAN总线上的数据流,并根据需要进行响应或模拟发送数据。 总结来说...

    aws-java-sdk-kinesis-1.10.18.zip

    描述中提到的"raml-java-parser.zip"是一个不推荐的RAML(RESTful API Modeling Language)解析器的Java实现,RAML是一种用于规范和文档化RESTful API的 YAML 格式。SnakeYAML是一个流行的开源库,用于解析和生成...

    简易java词法分析器

    词法分析器,又称为扫描器或词法规则解析器,其主要任务是从源代码中识别出一个个的单词 token(如关键字、标识符、常量、运算符等),这些token是构成程序的基本元素。在这个简易的Java词法分析器中,开发者可能...

    grammerAny_Java实现-SNL语法分析器_formhxg_

    本项目“grammerAny_Java实现-SNL语法分析器_formhxg_”聚焦于使用Java语言实现一个针对SNL(可能是特定编程语言或数据描述语言)的语法分析器。下面我们将深入探讨相关知识点。 首先,我们要了解什么是语法分析。...

Global site tag (gtag.js) - Google Analytics