跟小刀学习 lucene 分词的原理
来源:互联网 发布:网络诈骗按照什么罪 编辑:程序博客网 时间:2024/04/30 15:36
- 今天我在学lucene 的分词原理。由于工作很忙每天只有晚上的一点时间来学习。但是要学习的东西有很多很多。为了追求速度,所以有些东西只看一遍就不看了。所以在这里记下来方便以后查看
- Analyzer包含两个核心组件,Tokenizer以及TokenFilter。两者的区别在于,前者在字符级别处理流,而后者则在词语级别处理流。Tokenizer是Analyzer的第一步,其构造函数接收一个Reader作为参数
- lucene 分词首先通过tonkenier进行分词(有很多很多的tonkenier),然后交给tokenfilter 进行过滤 有些将停用词过滤,有些不会把停用词过滤掉。不同的分词器,tokenizer 不同。
TokenStream tokenStream = a.tokenStream("content",new StringReader(str));
- tokenStream 可以理解为一组流 里面有很多很多的token 每一个token是一个一个过滤出来的单词 我们可以通过 tokenStrem.incrementToken(); 取出来。在取来的同时我们查看他的分词信息
public void displayAllTokenInfo(String str,Analyzer a){ try { TokenStream tokenStream = a.tokenStream("content",new StringReader(str)); tokenStream.reset(); CharTermAttribute cat = tokenStream.addAttribute(CharTermAttribute.class);//分出来的单词 OffsetAttribute offset = tokenStream.addAttribute(OffsetAttribute.class);//分词的偏移量 //位置增量 PositionIncrementAttribute posi= tokenStream.addAttribute(PositionIncrementAttribute.class);//分词的偏移量 //默认分词的类别word 可以自定义自己的分词类别 TypeAttribute type= tokenStream.addAttribute(TypeAttribute.class);//分词的偏移量 for(;tokenStream.incrementToken();){ System.out.print(posi.getPositionIncrement()+": "); System.out.print("["+cat+"]"+"偏移量:" + ""+"["+offset.startOffset()+"--"+offset.endOffset()+"] 类型:"+ type.type() +"\n"); } } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } }
这里我们把分词器传进入:进行测试
@Test public void testAllAnalyzer() { StandardAnalyzer standardAnalyzer = new StandardAnalyzer(); StopAnalyzer stopAnalyzer = new StopAnalyzer(); SimpleAnalyzer simpleAnalyzer = new SimpleAnalyzer(); WhitespaceAnalyzer whitespaceAnalyzer = new WhitespaceAnalyzer(); String content ="how are you thank you"; LuceneAnalyzer l = new LuceneAnalyzer(); l.displayAllTokenInfo(content, standardAnalyzer); System.out.println("--------------"); l.displayAllTokenInfo(content, stopAnalyzer); System.out.println("--------------"); l.displayAllTokenInfo(content, simpleAnalyzer); System.out.println("--------------"); l.displayAllTokenInfo(content, whitespaceAnalyzer); }
输入结果如下:
1: [how]偏移量:[0--3] 类型:<ALPHANUM>2: [you]偏移量:[8--11] 类型:<ALPHANUM>1: [thank]偏移量:[12--17] 类型:<ALPHANUM>1: [you]偏移量:[18--21] 类型:<ALPHANUM>--------------1: [how]偏移量:[0--3] 类型:word2: [you]偏移量:[8--11] 类型:word1: [thank]偏移量:[12--17] 类型:word1: [you]偏移量:[18--21] 类型:word--------------1: [how]偏移量:[0--3] 类型:word1: [are]偏移量:[4--7] 类型:word1: [you]偏移量:[8--11] 类型:word1: [thank]偏移量:[12--17] 类型:word1: [you]偏移量:[18--21] 类型:word--------------1: [how]偏移量:[0--3] 类型:word1: [are]偏移量:[4--7] 类型:word1: [you]偏移量:[8--11] 类型:word1: [thank]偏移量:[12--17] 类型:word1: [you]偏移量:[18--21] 类型:word
我们还可以自己定义要停用的词,我会在以后的博客中写到,刚刚学习lucene 理解的不对的地方还请大家多多包涵,互相交流
1 0
- 跟小刀学习 lucene 分词的原理
- 跟小刀 学习数据结构 红黑树的概念
- lucene 分词器的原理和学习
- 一步一步跟我学习lucene(3)---lucene的analysis相关和自定义分词器
- 跟小刀学习 java 数据结构 栈和队列的实现
- 跟小刀学习 数据结构二叉树的实现
- 一步一步跟我学习lucene(4)---lucene的中文分词器jcseg和IK Analyzer分词器及其使用说明
- 跟小刀学习 递归简单实现
- 跟小刀 学习java导出word
- 基于Lucene的分词原理和方式
- 一步一步跟我学习lucene(5)---lucene的索引构建原理
- Lucene 分词原理
- Lucene 分词原理
- Lucene 分词原理
- Lucene 分词原理
- Lucene 分词原理
- lucene分词原理
- Lucene 分词原理
- JavaScript中的继承(下)
- bootstrap 模态框属性及warning
- Angular 常见内置指令
- BZOJ 1367: [Baltic2004]sequence 左偏树
- 【电机控制】整流电路Simulink仿真
- 跟小刀学习 lucene 分词的原理
- 内部排序算法1(插入排序)
- LeetCode之ArrayPartition
- Optimal Milking POJ
- C# 中的委托和事件(详解)
- linux虚拟机配置ngnix所遇到的问题
- c语言文件操作函数应用(2) ——学习整理
- 阿里2017实习生招聘笔试-编程题-过滤
- Qt程序显示出命令窗口