代码:
package com.tan.code;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.standard.StandardAnalyzer;
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;
import org.apache.lucene.util.Version;public class TokenStreamDetails {public void tokeStrem(String text) throws IOException {Analyzer analyzer = new StandardAnalyzer(Version.LUCENE_35);StringReader reader = new StringReader(text);TokenStream tokenStream = analyzer.tokenStream("", reader);// 语汇单元对应的文本CharTermAttribute charTermAttribute = tokenStream.addAttribute(CharTermAttribute.class);// 其实字符和终止字符的偏移量OffsetAttribute offsetAttribute = tokenStream.addAttribute(OffsetAttribute.class);// 位置增量(默认为1)PositionIncrementAttribute positionIncrementAttribute = tokenStream.addAttribute(PositionIncrementAttribute.class);// 语汇单元类型(默认为单词)TypeAttribute typeAttribute = tokenStream.addAttribute(TypeAttribute.class);int position = 0;// 递归处理所有语汇单元while (tokenStream.incrementToken()) {int increment = positionIncrementAttribute.getPositionIncrement();if (increment > 0) {// 计算位置信息System.out.println("position:" + (position += increment));}// 打印所有语汇单元详细信息System.out.println("【Trem:" + charTermAttribute.toString()+ "】【StartOffset:" + offsetAttribute.startOffset()+ "】【EndOffset:" + offsetAttribute.endOffset() + "】【Type:"+ typeAttribute.type()+"】");}}
}

测试

@Testpublic void testTokenStream() throws IOException {TokenStreamDetails tokenStreamDetails = new TokenStreamDetails();String text = "打印所有的TokenStream的詳細信息!Print the TokenStream Data";tokenStreamDetails.tokeStrem(text);}

输出:

position:1
【Trem:打】【StartOffset:0】【EndOffset:1】【Type:<IDEOGRAPHIC>】
position:2
【Trem:印】【StartOffset:1】【EndOffset:2】【Type:<IDEOGRAPHIC>】
position:3
【Trem:所】【StartOffset:2】【EndOffset:3】【Type:<IDEOGRAPHIC>】
position:4
【Trem:有】【StartOffset:3】【EndOffset:4】【Type:<IDEOGRAPHIC>】
position:5
【Trem:的】【StartOffset:4】【EndOffset:5】【Type:<IDEOGRAPHIC>】
position:6
【Trem:tokenstream】【StartOffset:5】【EndOffset:16】【Type:<ALPHANUM>】
position:7
【Trem:的】【StartOffset:16】【EndOffset:17】【Type:<IDEOGRAPHIC>】
position:8
【Trem:詳】【StartOffset:17】【EndOffset:18】【Type:<IDEOGRAPHIC>】
position:9
【Trem:細】【StartOffset:18】【EndOffset:19】【Type:<IDEOGRAPHIC>】
position:10
【Trem:信】【StartOffset:19】【EndOffset:20】【Type:<IDEOGRAPHIC>】
position:11
【Trem:息】【StartOffset:20】【EndOffset:21】【Type:<IDEOGRAPHIC>】
position:12
【Trem:print】【StartOffset:22】【EndOffset:27】【Type:<ALPHANUM>】
position:14
【Trem:tokenstream】【StartOffset:32】【EndOffset:43】【Type:<ALPHANUM>】
position:15
【Trem:data】【StartOffset:44】【EndOffset:48】【Type:<ALPHANUM>】

语汇单元的组成【截图】,其中各个属性的作用可以参考《Lucene In Action》:

从代码示例中看到,可以通过调用addAttribute(class)来获取这些属性;使用tokenStream.incrementToken()递归访问所有的语汇单元,如果该方法到达下一个新的语汇单元则返回true,若已经对stream处理完毕则返回false。然后就可以与先前获取的属性对象进行交互得到针对每个语汇单元的属性值。当incrementToken返回true时,其中所有的属性都会将内部状态修改为下一个语汇单元

【Lucene】TokenStream-语汇单元的项、偏移量、类型和位置增量相关推荐

  1. 默认的程序化等效项(类型)

    我正在使用反射来遍历Type的属性并将某些类型设置为其默认值. 现在,我可以对类型进行切换并显式设置default(Type) ,但我宁愿一行执行. 是否有程序等效的默认值? #1楼 您可以使用Pro ...

  2. 分母是一元二次三项多项式,分子是一元一次二项的类型积分

    方法一:分母可以因式分解,待定分子A,B,通分后等于原分子求出A,B:即可积分.若不可因式分用方法二 方法二:观察是否刚好是分母的一阶导数,如果完全是,直接积分:如果部分是(需要对常数项增减),拆开, ...

  3. 2.图像作为函数 | 图像的量化、大小、类型、位置以及Matlab使用_4

    目录 Matlab介绍 量化练习 图像大小和类型 检查像素值 Matlab介绍 对于本系列的任务都是用Matlab或Octave.我们讨论了如何使用Python和OpenCV等. Matlab或Oct ...

  4. JS高程5.引用类型(6)Array类型的位置方法,迭代方法,归并方法

    一.位置方法 ECMAScript5为数组实例添加了两个位置:indexOf()和 lastIndexOf().这两个方法接收两个参数:要查找的项和(可选的)表示查找起点位置的索引(如在数组[7,8, ...

  5. 更改Excel单元格中批注的显示位置

    当在Excel中插入一个批注时,你可以把它调整到不同的位置(如 单元格的左边等等).但是有一个问题,当把批注的显示方式更改为 只显示标示符 后.你移到鼠标到单元格上时批注还是恢复初始的位置-即显示单元 ...

  6. CSS:列表样式(设置列表项的标志图案/位置)

    通过CSS 列表属性可以放置.改变列表项标志,或者将图像作为列表项标志. 代码整理自w3school:http://www.w3school.com.cn 效果图: 示例代码: <!DOCTYP ...

  7. VBA 游标类型声明位置rs.CursorLocation

    '前面的语句省略 '... conn.open mystrconn a=1 for i = rownums to rownume Set rs=Nothingsql="select ID f ...

  8. vue 结合原生tabe 渲染表格 实现 固定头部、固定右侧、单选按钮、单元格拖拽监听位置

    1.vue 结合原生tabe 渲染表格 实现 固定头部.固定右侧.单选按钮(避免el-table 数据量大卡顿) // table.vue <template><div id=&qu ...

  9. Excel公式的常见应用(一)——动态图表

    拜托拜托拜托!动态图表超酷的好不好!! 看看下面的动态图表,一点就能更新欸,但这还不是最酷的: 最好看的还是这个!干净又高效: 是不是已经开始感兴趣了? OK,first,我们先看看怎么根据数据来创建 ...

最新文章

  1. String、StringBuffer、StringBuilder三者的异同
  2. js 显示当前时间(年月日时分秒)——getYear()与getFullYear()
  3. 使用ajax跨域withCredentials的作用
  4. php网站 qq登陆,php写的插件网站接入QQ登录,QQ互联
  5. 【Python3爬虫】为什么你的博客没人看呢?
  6. 随笔--四个月培训小结
  7. Halcon PDF文档(hdevelop_users_guide)学习总结之四——关于3D显示模式
  8. oracle 测试坚挺,access数据库用户依然坚挺,但是面临新的对手挑战
  9. Ajax控件之ScriptManager与UpdatePanel用法 by:凉游浅笔深画眉 / Net7Cracker
  10. oracle 外连接内连接,oracle多表查询之内连接,外连接语句总结
  11. Excel VBA入门教程
  12. 在线Api接口,网易云音乐api数据完整接口文档,QQ音乐在线api接口文档,电商api开放数据接口文档分享,小说ap接口,漫画api接口
  13. 小米 线刷 android,小米10 Android 11 Beta 1线刷包已放出,安卓11/MIUI 12二选一
  14. lincese oracle_关于Oracle数据库企业版的license价格
  15. COSCon'21 大数据(D)论坛介绍
  16. Linux云计算-02_CentOS Linux 7.X系统管理
  17. openssl命令查看证书有效期_使用 openssl 生成证书
  18. 算法:一个小人通过有鳄鱼的河
  19. 快手和抖音怎么打开微信小程序
  20. 《圈外课程学习记录》3.2 数据化强力说服

热门文章

  1. 打车软件是优惠利民还是扰乱市场
  2. 关于竞品分析,这应该是最实用的分析流程
  3. pyhanlp 工具类HanLP基本使用
  4. Oracle数据库创建用户和删除用户(持续更...)
  5. 词权重 (term weight)方案总结
  6. unmountComponentAtNode的用法
  7. 大话流氓软件(四):是谁把IT精英逼成了“流氓”?[转]
  8. IBM Lenovo ServerGuide download
  9. DEDE整站动态化或整站静态化设置方法
  10. PHP+644是什么,多多自走棋644什么意思