⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 matchchinesetokenizer.java

📁 基于最大匹配算法的的中文分词组件
💻 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 + -