【常用分词器】

  • 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可以获取到相关的语汇信息。

最新文章

  1. js正则函数match、exec、test、search、replace、split使用介绍集合
  2. AOP面向切面编程
  3. Win8.1+vs2012+osg环境搭建
  4. 怎么学数学[How to Study Math]
  5. android中GridView关于间距的属性值介绍
  6. Peter Pan By: J. M. Barrie
  7. python包管理-distutils,setuptools,pip,virtualenv等介绍
  8. HTML笔记<note2>
  9. PHP操作MySQL数据库之天龙八部 -- 七贱下天山 -- 六脉神剑
  10. Android中的Socket
  11. 18.Class 的基本语法
  12. 洛谷P1516 青蛙的约会
  13. Restful Service 中 DateTime 在 url 中传递
  14. python编码类型互转总结
  15. oracle 12.2 linux/solaris正式发布
  16. spring boot jpa 多条件组合查询带分页的案例
  17. web自动化时,sendkeys输入长文本时浏览器响应慢或错误时处理
  18. Java常见的乱码解决方式
  19. 20155308 加分题-mybash的实现(第五周)
  20. SCC缩点

热门文章

  1. poj 1258 Agri-Net prim模板 prim与dijkstra的区别
  2. 题解报告:poj 1195 Mobile phones(二维BIT裸题)
  3. 对char类型数组的英文字母进行冒泡排序
  4. MVC C# 直接导出txt文件
  5. javascript 笔记--变量
  6. jquery readio checked
  7. 关于表单清空的细节(reset函数或者class="reset"属性)
  8. PHP(二)常用函数
  9. Django系列:(1)PyCharm下创建并运行我们的第一个Django工程
  10. Fresco 源码分析(序)