lucene分词器中的Analyzer,TokenStream, Tokenizer, TokenFilter
分词器的核心类:
Analyzer:分词器
TokenStream:
分词器做优点理之后得到的一个流。这个流中存储了分词的各种信息,能够通过TokenStream有效的获取到分词单元。
下面是把文件流转换成分词流(TokenStream)的过程
首先,通过Tokenizer来进行分词,不同分词器有着不同的Tokenzier,Tokenzier分完词后,通过TokenFilter对已经分好词的数据进行过滤,比方停止词。过滤完之后,把全部的数据组合成一个TokenStream;下面这图就是把一个reader转换成TokenStream:
这个TokenStream中存有一些属性,这些属性会来标识这个分词流的元素。
在这个流里 有非常多属性。
以下截了lucene4.10.1源代码中的图:
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvaHU5NDgxNjI5OTk=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">
当中有3个重要的属性,CharTermAttribute(保存相印的词汇),OffsetAttribute(保存各个词汇的偏移量)。PositionIncrementAttribute(保存各个词与词之间的位置增量,假设为0。能够做同义词搜索)。
是由这3个属性来控制这些分词信息
Tokenzier
主要负责接收Reader。将Reader进行分词操作。有例如以下一些实现类
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>
lucene分词器中的Analyzer,TokenStream, Tokenizer, TokenFilter的更多相关文章
- Lucene学习-深入Lucene分词器,TokenStream获取分词详细信息
Lucene学习-深入Lucene分词器,TokenStream获取分词详细信息 在此回复牛妞的关于程序中分词器的问题,其实可以直接很简单的在词库中配置就好了,Lucene中分词的所有信息我们都可以从 ...
- Lucene系列三:Lucene分词器详解、实现自己的一个分词器
一.Lucene分词器详解 1. Lucene-分词器API (1)org.apache.lucene.analysi.Analyzer 分析器,分词器组件的核心API,它的职责:构建真正对文本进行分 ...
- 学习笔记(三)--Lucene分词器详解
Lucene-分词器API org.apache.lucene.analysi.Analyzer 分析器,分词器组件的核心API,它的职责:构建真正对文本进行分词处理的TokenStream(分词处理 ...
- Lucene分词器
Lucene分析器的基类为Analyzer,Analyzer包含两个核心组件:Tokenizer和 TokenFilter.自定义分析器必须实现Analyzer类的抽象方法createComponen ...
- lucene分词器与搜索
一.分词器 lucene针对不同的语言和虚伪提供了许多分词器,我们可以针对应用的不同的需求使用不同的分词器进行分词.我们需要注意的是在创建索引时使用的分词器与搜索时使用的分词器要保持一致.否则搜索的结 ...
- lucene 分词器
分词器 作用:切分关键词的. 在什么地方使用到了:在建立索引和搜索时. 原文:An IndexWriter creates and maintains an index. 1,切分: An Index ...
- Lucene中TokenStream,Tokenizer,TokenFilter,TokenStreamComponents与Analyzer
TokenStream extends AttributeSource implements Closeable: incrementToken,end,reset,close Tokenizer直接 ...
- Lucene.net(4.8.0) 学习问题记录二: 分词器Analyzer中的TokenStream和AttributeSource
前言:目前自己在做使用Lucene.net和PanGu分词实现全文检索的工作,不过自己是把别人做好的项目进行迁移.因为项目整体要迁移到ASP.NET Core 2.0版本,而Lucene使用的版本是3 ...
- Lucene.net(4.8.0)+PanGu分词器问题记录一:分词器Analyzer的构造和内部成员ReuseStategy
前言:目前自己在做使用Lucene.net和PanGu分词实现全文检索的工作,不过自己是把别人做好的项目进行迁移.因为项目整体要迁移到ASP.NET Core 2.0版本,而Lucene使用的版本是3 ...
随机推荐
- 【shell】Shell命令合集(0)
Ccat zdd 浏览文件zdd的内容cat zdd1 zdd2 浏览多个文件的内容cat -n zdd浏览文件zdd的内容并显示行号 cd 回到起始目录,也即刚登陆到系统的目录,cd后面无参数cd ...
- locust性能测试(无 web ui 模式)
前言 前面是在web页面操作,需要手动的点start启动,结束的时候也需要手工去点stop,没法自定义运行时间,这就不太方便.locust提供了命令行运行的方法,不启动web页面也能运行,这就是no- ...
- django + gunicorn + supervisor
在服务器上跑着一个Django项目,想用supervisor管理起来,遇到一个小问题,记录一下本来启动Django项目的命令是用的manage.py , 但是这中方法有个很神奇的坑,就是ctrl + ...
- Java反射获取类对象的三种方式
package demo01; /* * 获取一个类的class文件对象的三种方式 * 1.对象获取 * 2.类名获取 * 3.Class类的静态方法获取 */ public class Reflec ...
- sublime 中设置pylint
http://www.360doc.com/content/14/1110/11/15077656_424004081.shtml 安装 pylinter 插件 详见 sublime 插件安装 配 ...
- hdu 2242 无向图/求用桥一分为二后使俩个bcc点权值和之差最小并输出 /缩点+2次新图dfs
题意如标题所述, 先无向图缩点,统计出每个bcc权,建新图,然后一遍dfs生成树,标记出每个点(新图)以及其子孙的权值之和.这样之后就可以dfs2来枚举边(原图的桥),更新最小即可. 调试了半天!原来 ...
- (1)WCF托管
wcf 托管方式有很多种,常见的托管方式,iis,was,控制台,winfrom等. 先创建一个wcf服务 IService1.cs using System.ServiceModel; namesp ...
- 关于asp.netCore3.0区域和路由配置
在ASP.NET Core 3.0中路由配置和2.0不一样了 一.MVC 服务注册 ASP.NET Core 3.0 添加了用于注册内部的 MVC 方案的新选项Startup.ConfigureSer ...
- Python: Write UTF-8 characters to csv file
To use codecs, we can write UTF-8 characters into csv file import codecs with open('ExcelUtf8.csv', ...
- Jenkins introduction
http://birdinroom.blog.51cto.com/7740375/1342897 https://www.ibm.com/developerworks/cn/java/j-lo-jen ...