2014-1-19_自己动手写中文分词并编写solr接口


一段时间写了DATrie结构的实现博客。一直没有用DATrie来实现一个简单的词典分词。这几天就自己写了一个简单的中文分词。分词算法是最简单的最大逆向匹配。词典用DATrie来存储。


分词的基础知识都比较基础了。这里侧重于分词器与lucene/solr的集成。


solr4.2中实现分词接口还是比较简单的。可以先参考一下StandardTokenizer类中的代码。


这里需要注意Lucene多线程的问题。Lucene多线程实现的思路是每个Field一个线程。


简单地,实现分词器的lucene/solr接口有三步


1、实现一个TokenizerFactory接口。代码如下:



public    class    XhTokenizerFactoryextends TokenizerFactory{
    @Override
    public Tokenizer create(Reader input) {
    returnnew XhTokenizer(input);
    }
}

2、实现自己的Tokenizer



这里需要关注的就是incrementToken方法。分词的结果并不直接返回,而是存储到CharTermAttributeOffsetAttribute


PositionIncrementAttribute、和TypeAttribute四个接口的实现类里面。incrementToken方法返回的是一个boolean值,表示对当前input是否分词完成。


3、(可选)如果想在Lucene中使用分词,那就需要实现自己的Analyzer类。代码如下:


public class XhAnalyzer  extends Analyzer {
@Override
protected TokenStreamComponents createComponents(String fieldName,
Reader reader) {
    final XhTokenizer src=new XhTokenizer(reader);
    returnnew TokenStreamComponents(src) {
    @Override
    protectedvoid setReader(final Reader reader) throws IOException {
    super.setReader(reader);
      }
    };
}


其实还是调用Tokenizer接口的实现。



这样就把一个分词器集成到lucene/solr中去了。整个项目的代码提交到github上面:https://github.com/sbp810050504/xh_seg




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值