lucene分词器中的Analyzer,TokenStream, Tokenizer, TokenFilter

lucene分词器中的Analyzer,TokenStream, Tokenizer, TokenFilterTokenStream:分词器做好处理之后得到的一个流。这个流中存储了分词的各种信息,可以通过TokenStream有效的获取到分词单元。以下是把文件流转换成分词流(TokenStream)的过程首先,通过Tokenizer来进行分词,不同分词器有着不同的Tokenzier,Tokenzier分完词后,通过TokenFilter对已经分好词的数据进行过滤,比如停止词。过滤完之后,把所有的数据组合成一个TokenStream;

大家好,又见面了,我是你们的朋友全栈君。分词器的核心类:


Analyzer:
分词器


TokenStream:
分词器做好处理之后得到的一个流。这个流中存储了分词的各种信息,可以通过TokenStream有效的获取到分词单元。


以下是把文件流转换成分词流(TokenStream)的过程

首先,通过Tokenizer来进行分词,不同分词器有着不同的Tokenzier,Tokenzier分完词后,通过TokenFilter对已经分好词的数据进行过滤,比如停止词。过滤完之后,把所有的数据组合成一个TokenStream;以下这图就是把一个reader转换成TokenStream:lucene分词器中的Analyzer,TokenStream, Tokenizer, TokenFilter

这个TokenStream中存有一些属性,这些属性会来标识这个分词流的元素。

在这个流里 有很多属性。下面截了lucene4.10.1源码中的图:

lucene分词器中的Analyzer,TokenStream, Tokenizer, TokenFilter

     其中有3个重要的属性,CharTermAttribute(保存相印的词汇),OffsetAttribute(保存各个词汇的偏移量),PositionIncrementAttribute(保存各个词与词之间的位置增量,如果为0,可以做同义词搜索)。是由这3个属性来控制这些分词信息
    Tokenzier 主要负责接收Reader,将Reader进行分词操作,有如下一些实现类

lucene分词器中的Analyzer,TokenStream, Tokenizer, TokenFilter

TokenFilter  将分词的出来的单元,进行各种各样的过滤。 


代码如下:

<span style="font-size:14px;">package hhc;

import java.io.IOException;
import java.io.StringReader;

import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.analysis.TokenStream;
import org.apache.lucene.analysis.tokenattributes.CharTermAttribute;
import org.apache.lucene.analysis.tokenattributes.OffsetAttribute;
import org.apache.lucene.analysis.tokenattributes.PositionIncrementAttribute;
import org.apache.lucene.analysis.tokenattributes.TypeAttribute;

public class AnalyzerUtil {

	
	/**
	 * 输出字符分词信息
	 * 
	 * @param str
	 * @param a
	 */
	public static void displayAllToken(String str, Analyzer a) {
		try {
			// 所有的分词器都必须含有分词流
			TokenStream stream = a.tokenStream("content", new StringReader(str));// 放回一个TokenStream;
			/**
			 * 创建一个属性,这个属性会添加到流里,随着这个TokenStream流增加
			 * 这个属性中保存中所有的分词信息
			 */
			CharTermAttribute cta=stream.addAttribute(CharTermAttribute.class);
			//位置增量的属性,存储词之间的距离
			PositionIncrementAttribute pia = stream.addAttribute(PositionIncrementAttribute.class);
			//储存每个词直接的偏移量
			OffsetAttribute oa = stream.addAttribute(OffsetAttribute.class);
			//使用的每个分词器直接的类型信息
			TypeAttribute ta = stream.addAttribute(TypeAttribute.class);
			for (; stream.incrementToken();) {
				System.out.print(pia.getPositionIncrement()+":");
				System.out.print(cta+":["+oa.startOffset()+"-"+oa.endOffset()+"]-->"+ta.type()+"\n");
			}
			System.out.println();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
}
</span>


测试:

<span style="font-size:14px;">	@Test
	public void hhcTest(){
		Analyzer a1 =new StandardAnalyzer(Version.LUCENE_35);
		Analyzer a2 =new StopAnalyzer(Version.LUCENE_35);
		Analyzer a3 =new SimpleAnalyzer(Version.LUCENE_35);
		Analyzer a4 =new WhitespaceAnalyzer(Version.LUCENE_35);
		
		String txt ="how are you think you";
		AnalyzerUtil.displayAllToken(txt, a1);
		AnalyzerUtil.displayAllToken(txt, a2);
		AnalyzerUtil.displayAllToken(txt, a3);
		AnalyzerUtil.displayAllToken(txt, a4);
	}</span>



版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/163092.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • docker dockerfile详解_docker指令

    docker dockerfile详解_docker指令前言Dockerfile是一个用来构建镜像的文本文件,文本内容包含了一条条构建镜像所需的指令和说明。Dockerfile简介Dockerfile是用来构建Docker镜像的构建文件,是由一系列

  • Canny算子–边缘检测[通俗易懂]

    Canny算子–边缘检测[通俗易懂]Canny边缘检测算法的发展历史Canny边缘检测于1986年由JOHNCANNY首次在论文《AComputationalApproachtoEdgeDetection》中提出,就此拉开了Canny边缘检测算法的序幕。Canny边缘检测是从不同视觉对象中提取有用的结构信息并大大减少要处理的数据量的一种技术,目前已广泛应用于各种计算机视觉系统。Canny发现,在不同视觉系统…

  • ViewState 剖析

    ViewState 剖析 ViewState不是什么?1.ViewState不是用来恢复回发的控件的值。这个是通过匹配form中该控件的变量名而自动完成的。这个只对Load事件加载之前创建的控件有效。2.ViewState不会自动重新创建任何通过代码动态创建的控件。3.不是用来保存用户信息的。仅仅保存本页的控件状态,而不能在页面之间传递。ViewState是什么?ViewState用来

  • Rabbitmq入门案例

    Rabbitmq入门案例1创建一个maven项目配置资源pom.xml文件<projectxmlns=”http://maven.apache.org/POM/4.0.0″ xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance” xsi:schemaLocation=”http://maven.apache.org/POM/4…

  • 百度UEditor基本使用

    百度UEditor基本使用

  • js的6种数据类型_主要的数据类型

    js的6种数据类型_主要的数据类型JS常用的六种数据类型在JS中一共有九种数据类型,有六种基本数据类型,分别是:String(字符串)、Number(数值)、Boolean(布尔值)、Null(空值)、Undefined(未定义)、Object(对象)String字符串在JS中字符串需要使用引号引起来使用双引号或单引号都行,但是不要混着用引号不能嵌套,双引号不能放双引号,单引号不能放单引号在字符串中我们可以使用\作为转义字符,当表示一些特殊符号是可以使用\进行转义\“表示”、\‘表示’、\n表示换行、\t制表符

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号