TokenStream是一个能在被调用后产生语汇单元流的类,但是 TokenStream 类有两个不同的类型:Tokenizer 类和 TokenFilter 类。这两个类都是从抽象类TokenStream类继承而来。

  Tokenizer 对象通过Java.io.Reader 对象读取字符创建语汇单元,而TokenFilter 类则负责处理输入的语汇单元,然后通过新增、删除或者修改属性的方式来产生新的语汇单元。

  当分词器从tokenStream 方法或者 reusableTokenStream 方法返回tokenStream 对象后,它就开始用一个tokenizer对象创建初始的语汇单元流,然后再链接到任意数量的tokenFilter对象来修改这些语汇单元。这被称为分词器链。

Tokenizer是一个以Reader为输入的TokenStream;而TokenFilter是一个以另一个TokenStream为输入的TokenStream。

  表面上看两者只是输入不同,但正因为这一点,Tokenizer被用来做初级的文本处理,它把从Reader读入的原始文本通过一些简单的办法处理成一个个初级的token;TokenFilter则以Tokenizer为输入(因为Tokenizer继承自TokenStream),用一些规则过滤掉不符合要求的token(像StopFilter中的停用词),产生最终的token stream。

  还记得前文说的WhitespaceAnalyzer和SimpleAnalyzer引用的都是Tokenizer,StopAnalyzer和StandardAnalyzer引用的都是TokenFilter吗?这就是因为前二者处理规则比较简单,用Tokenizer把Reader的输入经过一步处理就够了;后二者处理要复杂一些,需要用到TokenFilter,而TokenFilter在Tokenizer处理的基础上进行一些过滤,这样才能满足后二者的需要。

  另外,引用他人的解释

  Lucene Analyzer包含两个核心组件,Tokenizer以及TokenFilter。两者的区别在于,前者在字符级别处理流,而后者则在词语级别处理流。Tokenizer是Analyzer的第一步,其构造函数接收一个Reader作为参数,而TokenFilter则是一个类似拦截器的东东,其参数可以使TokenStream、Tokenizer,甚至是另一个TokenFilter。整个Lucene Analyzer的过程如下图所示:

  

  

  上图中的一些名词的解释如下表所示:

说明
Token 表示文中出现的一个词,它包含了词在文本中的位置信息
Analyzer 将文本转化为TokenStream的工具
TokenStream 文本符号的流
Tokenizer 在字符级别处理输入符号流
TokenFilter 在字符级别处理输入符号流,其输入可以是TokenStream、Tokenizer或者TokenFilter

转载于:https://www.cnblogs.com/yaokaizi/p/3758563.html

关于Tokenizer与TokenFilter的区别相关推荐

  1. Lucene分词实现---Analyzer、TokenStream(Token、Tokenizer、Tokenfilter)

    一  分清概念:  1   TokenStream是用来走访Token的iterator(迭代器) , Tokenizer继承自TokenStream,其输入为Reader . TokenFilter ...

  2. Lucene 中的Tokenizer, TokenFilter学习

    https://brandnewuser.iteye.com/blog/2305140 lucene中的TokenStream,TokenFilter之间关系 TokenStream是一个能够在被调用 ...

  3. Lucene--TokenStream(TokenFilter、Tokenizer)

    TokenStream即是从Document的域(field)中或者查询条件中抽取一个个分词而组成的一个数据流.继承TokenStream的类必须是final类型的,或者至少increamStoken ...

  4. Transfromers的tokenizer

    1. 获取tokenizer对象 from transformers import BertTokenizer tokenizer = BertTokenizer.from_pretrained('b ...

  5. 深度解析 Lucene 轻量级全文索引实现原理

    作者:vivo互联网服务器团队-Qian Yulun 一.Lucene简介 1.1 Lucene是什么? Lucene是Apache基金会jakarta项目组的一个子项目: Lucene是一个开放源码 ...

  6. Lucene in action 笔记 analysis篇

    Analysis, in Lucene, is the process of converting field text into its most fundamental indexed repre ...

  7. Solr笔记--转载

    Solr 是一种可供企业使用的.基于 Lucene 的搜索服务器,它支持层面搜索.命中醒目显示和多种输出格式.在这篇分两部分的文章中,Lucene Java™ 的提交人 Grant Ingersoll ...

  8. 【Java】Lucene检索引擎详解

    基于Java的全文索引/检索引擎--Lucene Lucene不是一个完整的全文索引应用,而是是一个用Java写的全文索引引擎工具包,它可以方便的嵌入到各种应用中实现针对应用的全文索引/检索功能. L ...

  9. 分词相关技术(转载)

    最近在做问答系统,自己在园子里面找了下资料,觉得不错,自己是菜鸟原创不行,废话不多说了,送上资料. 第一个是关于Lucene的分词技术 这里可以下载PDF看,Lucene 原理与代码分析完整版 目录如 ...

最新文章

  1. php节点对象,JavaScript_JavaScript中访问节点对象的方法有哪些如何使用,JavaScript中访问节点对象的方法 - phpStudy...
  2. NYOJ 664 数字整除
  3. 简便方法创建自签名证书
  4. 数据分析TB级别数据量大了怎么办,不会代码模型训练怎么办?
  5. .net身份证号码验证
  6. 智能实验室-全能优化(Guardio) 5.10.0.1150
  7. 泰山服务器 oracle数据库,泰山之巅对话•Oracle数据库掌门人:领先对手10年?凭什么口气这么大?...
  8. c语言 多线程 参数,如何用C语言实现多线程
  9. php smtp发送附件,PHP:如何使用smtp设置发送带附件的电子邮件?
  10. 架构师一般做到多少岁_《迷茫中的我们该如何突破瓶颈——成长为一名架构师》...
  11. 学习OpenCV2——卡尔曼滤波(KalmanFilter)详解
  12. 使用poi导出大量数据到excel遇到的问题
  13. mysql回显_SQL回显
  14. 随机过采样与随机欠采样 代码
  15. 强化物联网连接 Silicon Labs收购Micrium
  16. 【jzoj1592】【二分】【GDKOI训练】音乐节拍
  17. 如果说这个世界不是真实存在的,只是一段代码,迄今为止你发现了哪些bug?
  18. 苹果地图副总裁_挖角苹果高级计算机视觉专家 Mapillary地图更新添一员大将
  19. jdk8的ConcurrentHashMap实现
  20. 自控原理学习笔记-系统稳定性分析(2)-环路分析及Nyquist-Bode判据

热门文章

  1. 机器人门禁控制盒怎么接线方法_RFID门禁系统原理、初始密码、密码修改方法...
  2. 刷卡读取信息自动录入表格_人事自动化管理系统.xls
  3. ios打不开html文件,在DocumentsWeb目录中打开UIWebview时,ios-css和js在html文件中无法链接...
  4. jquery查找父窗体id_js/jquery如何获取父窗口的元素?
  5. ubuntu 以太网已连接但是无法联网_5G物联网掀起工业自动化新高潮 连接器需求巨大...
  6. ubuntu python3 mysql_ubuntu14.04 python3.*连接mysql
  7. git rebase 修改提交信息
  8. Spring mvc @RequestHeader
  9. Node.js ES6 模块化的基本语法-按需导出与按需导入
  10. Flink watermark