📄 matchchinesetokenizer.java
字号:
/*
* @作者:Hades , 创建日期:2007-1-25
*
* 汕头大学03计算机本科
*
*/
package edu.stu.cn.lucene.analysis;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.Reader;
import java.util.List;
import org.apache.lucene.analysis.Token;
import org.apache.lucene.analysis.Tokenizer;
import edu.stu.cn.segment.matching.processor.SegmentProcessorImpl;
/**
* @author Hades Guan
*
*/
public class MatchChineseTokenizer extends Tokenizer
{
/**
* 存放切分结果的列表
*/
private List<String> list = null;
/**
* 切分结果游标的位置
*/
private int listIndex = 0;
/**
* 字符游标位置
*/
private int posIndex = 0;
/**
* 分词构件
*/
private SegmentProcessorImpl processor = null;
/**
* 以分词构建名称beanName、一个阅读器Reader为初始化参数的构造函数
*
* @param beanName
* 分词构建名称
* @param reader
* 阅读器
*/
public MatchChineseTokenizer(SegmentProcessorImpl processor, Reader reader)
{
super(reader);
this.processor = processor;
try
{
this.process();
}
catch (IOException e)
{
// TODO 自动生成 catch 块
e.printStackTrace();
}
}
/*
* (非 Javadoc)
*
* @see org.apache.lucene.analysis.TokenStream#next()
*/
@Override
public Token next() throws IOException
{
// 判断游标位置是否超界
if (this.listIndex >= this.list.size())
return null;
else
{
// 获取短语
String word = this.list.get(listIndex++);
Token token = new Token(word, posIndex, posIndex + word.length());
// 修改字符游标位置
posIndex += word.length();
return token;
}
}
/**
* 分词处理
*
* @throws IOException
*/
private void process() throws IOException
{
// 初始化输入输出
BufferedReader in = new BufferedReader(this.input);
// 读入数据
String line = null;
StringBuffer buffer = new StringBuffer();
while ((line = in.readLine()) != null)
{
buffer.append(line);
buffer.append("\n");
}
// 关闭输入流
this.close();
// 执行分词处理
this.list = this.processor.textProcess(buffer.toString().toLowerCase()
.trim());
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -