问题描写叙述:将一句话拆分成单个字符。而且去掉空格。

  1. package com.mylucene;
  2.  
  3. import java.io.IOException;
  4. import java.io.Reader;
  5.  
  6. import org.apache.lucene.analysis.Tokenizer;
  7. import org.apache.lucene.analysis.tokenattributes.CharTermAttribute;
  8. import org.apache.lucene.analysis.tokenattributes.OffsetAttribute;
  9. import org.apache.lucene.util.AttributeSource.AttributeFactory;
  10.  
  11. public class SpiltChar extends Tokenizer {
  12.  
  13. public SpiltChar(AttributeFactory factory, Reader input) {
  14. super(factory, input);
  15. // TODO Auto-generated constructor stub
  16. }
  17.  
  18. public SpiltChar(Reader input) {
  19. super(input);
  20. }
  21. private int offset = 0, bufferIndex=0, dataLen=0;
  22. private final static int MAX_WORD_LEN = 255;
  23. private final static int IO_BUFFER_SIZE = 1024;
  24. private final char[] buffer = new char[MAX_WORD_LEN];
  25. private final char[] ioBuffer = new char[IO_BUFFER_SIZE];
  26. private int length;
  27. private int start;
  28. private final CharTermAttribute termAtt = addAttribute(CharTermAttribute.class);
  29. private final OffsetAttribute offsetAtt = addAttribute(OffsetAttribute.class);
  30. private final void push(char c) {
  31. if (length == 0) start = offset-1; // start of token
  32. buffer[length++] = Character.toLowerCase(c); // buffer it
  33.  
  34. }
  35.  
  36. private final boolean flush() {
  37.  
  38. if (length>0) {
  39. //System.out.println(new String(buffer, 0,
  40. //length));
  41. termAtt.copyBuffer(buffer, 0, length);
  42. offsetAtt.setOffset(correctOffset(start), correctOffset(start+length));
  43. return true;
  44. }
  45. else
  46. return false;
  47. }
  48.  
  49. @Override
  50. public boolean incrementToken() throws IOException {
  51. clearAttributes();
  52.  
  53. length = 0;
  54. start = offset;
  55. while (true) {
  56. final char c;
  57. offset++;
  58. if (bufferIndex >= dataLen) {
  59. dataLen = input.read(ioBuffer);
  60. bufferIndex = 0;
  61. }
  62.  
  63. if (dataLen == -1) {
  64. offset--;
  65. return flush();
  66. } else
  67. c = ioBuffer[bufferIndex++];
  68.  
  69. switch(Character.getType(c)) {
  70.  
  71. case Character.DECIMAL_DIGIT_NUMBER://注意此部分只是滤一些熟悉或者字母
  72. case Character.LOWERCASE_LETTER://注意此部分
  73. case Character.UPPERCASE_LETTER://注意此部分
  74. // push(c);
  75. // if (length == MAX_WORD_LEN) return flush();
  76. // break;
  77.  
  78. case Character.OTHER_LETTER:
  79. if (length>0) {
  80. bufferIndex--;
  81. offset--;
  82. return flush();
  83. }
  84. push(c);
  85. return flush();
  86.  
  87. default:
  88. if (length>0) return flush();
  89.  
  90. break;
  91.  
  92. }
  93. }
  94. }
  95.  
  96. @Override
  97. public final void end() {
  98. // set final offset
  99. final int finalOffset = correctOffset(offset);
  100. this.offsetAtt.setOffset(finalOffset, finalOffset);
  101. }
  102.  
  103. @Override
  104. public void reset() throws IOException {
  105. super.reset();
  106. offset = bufferIndex = dataLen = 0;
  107. }
  108.  
  109. }

定义自己的分词器类:

  1. package com.mylucene;
  2.  
  3. import java.io.Reader;
  4.  
  5. import org.apache.lucene.analysis.Analyzer;
  6. import org.apache.lucene.analysis.Tokenizer;
  7.  
  8. /**
  9. * 单字切分
  10. * **/
  11. public class SpiltCharAnalyzer extends Analyzer {
  12.  
  13. @Override
  14. protected TokenStreamComponents createComponents(String arg0, Reader arg1) {
  15.  
  16. Tokenizer token=new SpiltChar(arg1);
  17.  
  18. return new TokenStreamComponents(token);
  19. }
  20.  
  21. }

lucene定义自己的分词器将其分成单个字符的更多相关文章

  1. Lucene 03 - 什么是分词器 + 使用IK中文分词器

    目录 1 分词器概述 1.1 分词器简介 1.2 分词器的使用 1.3 中文分词器 1.3.1 中文分词器简介 1.3.2 Lucene提供的中文分词器 1.3.3 第三方中文分词器 2 IK分词器的 ...

  2. Lucene全文搜索之分词器:使用IK Analyzer中文分词器(修改IK Analyzer源码使其支持lucene5.5.x)

    注意:基于lucene5.5.x版本 一.简单介绍下IK Analyzer IK Analyzer是linliangyi2007的作品,再此表示感谢,他的博客地址:http://linliangyi2 ...

  3. Net Core使用Lucene.Net和盘古分词器 实现全文检索

    Lucene.net Lucene.net是Lucene的.net移植版本,是一个开源的全文检索引擎开发包,即它不是一个完整的全文检索引擎,而是一个全文检索引擎的架构,提供了完整的查询引擎和索引引擎, ...

  4. Lucene介绍及简单入门案例(集成ik分词器)

    介绍 Lucene是apache软件基金会4 jakarta项目组的一个子项目,是一个开放源代码的全文检索引擎工具包,但它不是一个完整的全文检索引擎,而是一个全文检索引擎的架构,提供了完整的查询引擎和 ...

  5. lucene分词器与搜索

    一.分词器 lucene针对不同的语言和虚伪提供了许多分词器,我们可以针对应用的不同的需求使用不同的分词器进行分词.我们需要注意的是在创建索引时使用的分词器与搜索时使用的分词器要保持一致.否则搜索的结 ...

  6. Lucene 6.0下使用IK分词器

    Lucene 6.0使用IK分词器需要修改修改IKAnalyzer和IKTokenizer. 使用时先新建一个MyIKTokenizer类,一个MyIkAnalyzer类: MyIKTokenizer ...

  7. 学习笔记(三)--Lucene分词器详解

    Lucene-分词器API org.apache.lucene.analysi.Analyzer 分析器,分词器组件的核心API,它的职责:构建真正对文本进行分词处理的TokenStream(分词处理 ...

  8. Lucene系列四:Lucene提供的分词器、IKAnalyze中文分词器集成、扩展 IKAnalyzer的停用词和新词

    一.Lucene提供的分词器StandardAnalyzer和SmartChineseAnalyzer 1.新建一个测试Lucene提供的分词器的maven项目LuceneAnalyzer 2. 在p ...

  9. Lucene系列三:Lucene分词器详解、实现自己的一个分词器

    一.Lucene分词器详解 1. Lucene-分词器API (1)org.apache.lucene.analysi.Analyzer 分析器,分词器组件的核心API,它的职责:构建真正对文本进行分 ...

随机推荐

  1. VS2012中的全部预定义键盘快捷键列表

    原文 http://www.elanblog.com/2013/05/14/vs2012-key-list/#sectionToggle7 Visual Studio 集成开发环境 (IDE) 包括若 ...

  2. 8.2.5: Spring3.0新增的@DependsOn和@Lazy

    @DependsOn用于强制初始化其他Bean.可以修饰Bean类或方法,使用该Annotation时可以指定一个字符串数组作为参数,每个数组元素对应于一个强制初始化的Bean. @DependsOn ...

  3. mysql DBI 事务控制

    事务: 事务是任何健壮数据库系统的基本组成,它们 防止错误和数据库腐败通过确保有关数据的改变是原子发生的(不可分割的,要么所有要么什么都不做) 这个章节应用于数据库支持事务和 AutoCommit 是 ...

  4. elasticsearch 索引 类型 id

    zjtest7-frontend:/usr/local/logstash-2.3.4/config# cat logstash_indexer01.conf  input {         redi ...

  5. 大型项目使用Automake/Autoconf完成编译配置

    http://www.cnblogs.com/xf-linux-arm-java-android/p/3590770.htmlhttp://blog.csdn.net/zengraoli/articl ...

  6. 【Spring MVC系列】--(4)返回JSON

    [Spring MVC系列]--(4)返回JSON 摘要:本文主要介绍如何在控制器中将数据生成JSON格式并返回 1.导入包 (1)spring mvc 3.0不需要任何其他配置,添加一个jackso ...

  7. 网易云课堂_程序设计入门-C语言_第四周:循环控制_2念整数

    2 念整数(5分) 题目内容: 你的程序要读入一个整数,范围是[-100000,100000].然后,用汉语拼音将这个整数的每一位输出出来. 如输入1234,则输出: yi er san si 注意, ...

  8. php使用NuSoap调用java/C# webservice乱码问题

    今天调用了一个 NuSoap 的接口程序,一切流程操作都很正常,就是最后接收返回值的时候出现了乱码问题(我这边是做一个越南项目固然返回越南语,不过认为中文应该同样实用,需要的人可以尝试下)   许多使 ...

  9. IEnumerable和IEnumerator 详解 【转】

    初学C#的时候,老是被IEnumerable.IEnumerator.ICollection等这样的接口弄的糊里糊涂,我觉得有必要切底的弄清楚IEnumerable和IEnumerator的本质. 下 ...

  10. 获取枚举Name,Value,Description两种方法

    using System;using System.Collections.Generic;using System.Linq;using System.Web;using System.Web.UI ...