【常用分词器】

  • SimpleAnalyzer
  • StopAnalyzer
  • WhitespaceAnalyzer
  • StandardAnalyze

【TokenStream】

she is a student ==〉TokenStream

TokenStream有2个实现类。Tokenizer、TokenFilter

1)  Tokenizer

将数据进行分割形成一定的语汇(所谓语汇是指一个一个独立的词语。)。最终结果将形成TokenStream。

2) TokenFilter

按照规则对语汇进行过滤。如:StopFilter可以对停用词进行过滤。

3) 执行过程

【存储方式】

【应用TokenStream】

     /**
* 使用TokenStream进行分词
* @param str
* @param analyzer
*/
public static void displayTokenStream(String str, Analyzer analyzer){
try {
//通过Analayer获取TokenStream
//toenStream("域名称或文件名",输入流对象)
TokenStream stream = analyzer.tokenStream("content", new StringReader(str)); //向流中添加一个属性
//容器,存储每次分词所对应的语汇内容
CharTermAttribute charAttr = stream.addAttribute(CharTermAttribute.class); //通过循环语句读取语汇的内容
while(stream.incrementToken()){
System.out.print("[" + charAttr + "] ");
}
System.out.println();
} catch (IOException e) {
e.printStackTrace();
}
}
     private Version version = Version.LUCENE_35;

     /**
* 测试TokenStream(英文内容)
*/
@Test
public void test01(){
String str = "I'm come from Hanlin,I love Hanlin";
System.out.println("str = " + str);
System.out.println("===================================="); //创建Analyzer对象
Analyzer a1 = new SimpleAnalyzer(version);
Analyzer a2 = new StopAnalyzer(version);
Analyzer a3 = new WhitespaceAnalyzer(version);
Analyzer a4 = new StandardAnalyzer(version); //测试TokenStream
AnalyzerUtil.displayTokenStream(str, a1);
AnalyzerUtil.displayTokenStream(str, a2);
AnalyzerUtil.displayTokenStream(str, a3);
AnalyzerUtil.displayTokenStream(str, a4);
}
     /**
* 测试TokenStream(中文内容)
*/
@Test
public void test02(){
String str = "我来自翰林,我爱翰林";
System.out.println("str = " + str);
System.out.println("===================================="); //创建Analyzer对象
Analyzer a1 = new SimpleAnalyzer(version);
Analyzer a2 = new StopAnalyzer(version);
Analyzer a3 = new WhitespaceAnalyzer(version);
Analyzer a4 = new StandardAnalyzer(version); //测试TokenStream
AnalyzerUtil.displayTokenStream(str, a1);
AnalyzerUtil.displayTokenStream(str, a2);
AnalyzerUtil.displayTokenStream(str, a3);
AnalyzerUtil.displayTokenStream(str, a4);
}

TokenStream可以读取到分词内容.

【Attribute】

     /**
* 显示语汇的基本属性
* @param str
* @param anlyzer
*/
public static void displayAttributes(String str, Analyzer anlyzer){
try {
//获取TokenStream对象
TokenStream stream = anlyzer.tokenStream("content", new StringReader(str)); //PositionIncrementAttribute :存储了语汇之间的位置增量
//添加PositionIncrementAttribute属性
PositionIncrementAttribute positionAttr = stream.addAttribute(PositionIncrementAttribute.class); //添加CharTermAttrbute
CharTermAttribute charAttr = stream.addAttribute(CharTermAttribute.class);
//OffsetAttribute:获取语汇的偏移数据
OffsetAttribute offsetAttr = stream.addAttribute(OffsetAttribute.class); //语汇的分词方式类型(了解)
TypeAttribute typeAttr = stream.addAttribute(TypeAttribute.class); //遍历每一个语汇
while(stream.incrementToken()){
System.out.print(positionAttr.getPositionIncrement() + "、");
System.out.print("[" + charAttr + " : " + offsetAttr.startOffset() + "~" + offsetAttr.endOffset()+ "(" + typeAttr.type()+ ")] " );
}
System.out.println(); } catch (IOException e) {
e.printStackTrace();
}
}
     /**
* 测试属性的应用
*/
@Test
public void test03(){
String str = "I'm come from Hanlin,I love Hanlin";
System.out.println("str = " + str);
System.out.println("===================================="); //创建Analyzer对象
Analyzer a1 = new SimpleAnalyzer(version);
Analyzer a2 = new StopAnalyzer(version);
Analyzer a3 = new WhitespaceAnalyzer(version);
Analyzer a4 = new StandardAnalyzer(version); //测试TokenStream
AnalyzerUtil.displayAttributes(str, a1);
AnalyzerUtil.displayAttributes(str, a2);
AnalyzerUtil.displayAttributes(str, a3);
AnalyzerUtil.displayAttributes(str, a4);
}

FlagsAttribute:标志位属性信息(了解)

PayloadAttribute:负载属性信息(了解)

说明:每一个语汇单元都存在一定的属性.通过Attribute可以获取到相关的语汇信息。

Analyzer原理的更多相关文章

  1. Lucene 工作原理 之倒排索引

      1.简介 倒排索引源于实际应用中需要根据属性的值来查找记录.这种索引表中的每一项都包括一个属性值和具有该属性值的各记录的地址.由于不是由记录来确定属性值,而是由属性值来确定记录的位置,因而称为倒排 ...

  2. Compiler Theory(编译原理)、词法/语法/AST/中间代码优化在Webshell检测上的应用

    catalog . 引论 . 构建一个编译器的相关科学 . 程序设计语言基础 . 一个简单的语法制导翻译器 . 简单表达式的翻译器(源代码示例) . 词法分析 . 生成中间代码 . 词法分析器的实现 ...

  3. LDO稳压器工作原理

    LDO稳压器工作原理 随着便携式设备(电池供电)在过去十年间的快速增长,像原来的业界标准 LM340 和LM317 这样的稳压器件已经无法满足新的需要.这些稳压器使用NPN 达林顿管,在本文中称其为N ...

  4. IKAnalyzer原理分析

    IKAnalyzer原理分析 IKAnalyzer自带的 void org.wltea.analyzer.dic.Dictionary.disableWords(Collection<Strin ...

  5. 免费的Lucene 原理与代码分析完整版下载

    Lucene是一个基于Java的高效的全文检索库.那么什么是全文检索,为什么需要全文检索?目前人们生活中出现的数据总的来说分为两类:结构化数据和非结构化数据.很容易理解,结构化数据是有固定格式和结构的 ...

  6. R语言︱文本挖掘之中文分词包——Rwordseg包(原理、功能、详解)

    每每以为攀得众山小,可.每每又切实来到起点,大牛们,缓缓脚步来俺笔记葩分享一下吧,please~ --------------------------- 笔者寄语:与前面的RsowballC分词不同的 ...

  7. Lucene 的索引文件锁原理

    Lucene 的索引文件锁原理 2016/11/24 · IT技术 · lucene   环境 Lucene 6.0.0Java “1.8.0_111”OS Windows 7 Ultimate 线程 ...

  8. springboot之启动原理解析

    前言 SpringBoot为我们做的自动配置,确实方便快捷,但是对于新手来说,如果不大懂SpringBoot内部启动原理,以后难免会吃亏.所以这次博主就跟你们一起一步步揭开SpringBoot的神秘面 ...

  9. SpringBoot启动原理及相关流程

    一.springboot启动原理及相关流程概览 springboot是基于spring的新型的轻量级框架,最厉害的地方当属自动配置.那我们就可以根据启动流程和相关原理来看看,如何实现传奇的自动配置 二 ...

随机推荐

  1. 配置Ubuntu16.04第03步:安装搜狗输入法

    1.进入搜狗官网:https://pinyin.sogou.com/linux/ ,下载搜狗输入法安装包 2.使用dpkg命令安装Deb包: sudo dpkg -i sogoupinyin_2.0. ...

  2. 题解报告:hdu 2093 考试排名

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2093 Problem Description C++编程考试使用的实时提交系统,具有即时获得成绩排名的 ...

  3. Looper、MessageQueue、Message、Handler的关系

    1.快速复习 1.1 基本装置 类 装置名 作用 线程中数量 Looper 消息分发装置 从消息队列中取出一个消息,交给对应的Handler处理消息. 1 MessageQueue 消息队列 保存所有 ...

  4. SpringCloud开发学习总结(五)—— 服务容错保护Hystrix

    在微服务架构中,我们将系统拆分成了很多服务单元,各单元的应用间通过服务注册与订阅的方式相互依赖.但由于每个单元都在不同的进程中运行,一来通过远程调用的方式执行,这样就有可能因为网络原因或是依赖服务自身 ...

  5. 229 Majority Element II 求众数 II

    给定一个大小为 n 的数组,找出其中所有出现超过 ⌊ n/3 ⌋ 次的元素. 你的算法应该在O(1)空间中以线性时间运行. 详见:https://leetcode.com/problems/major ...

  6. 45 个非常有用的 Oracle 日期查询语句

    日期/时间 相关查询 获取当前月份的第一天 运行这个命令能快速返回当前月份的第一天.你可以用任何的日期值替换 “SYSDATE”来指定查询的日期. SELECT TRUNC (SYSDATE, 'MO ...

  7. WPF 实时绘图的逻辑

    实时绘图实际上是两个线程.外部线程直接用thread,只有到绘图那个逻辑才用绘图控件的mycanvas2.Dispatcher.Invoke. 或者说,INVOKE并不是开线程,只是一个绘图的委托而已 ...

  8. Android BitmapFactory.decodeFile(filePath, options) 返回 Null 6.0权限

    今天在做拍照上传的时候遇到个问题,根据路径获取Bitmap 失败,一直返回空,以为这个路径获取Bitmap代码久经考验,不怀疑它,找参数传入是否正确,初步怀疑是 filePath 没传进去,打印 fi ...

  9. 详解Android Activity启动模式

    相关的基本概念: 1.任务栈(Task)   若干个Activity的集合的栈表示一个Task.   栈不仅仅只包含自身程序的Activity,它也可以跨应用包含其他应用的Activity,这样有利于 ...

  10. iOS 蓝牙的GameKit用法

    一.连接蓝牙 显示可以连接的蓝牙设备列表 - (IBAction)buildConnect:(id)sender { // 创建弹窗 GKPeerPickerController *ppc = [[G ...