carrot2 融入自己的中文分词器

初试身手—融入自己的中文分词器



现在准备着手写一个真正意义上的聚类搜素了。一开始担心老外的carrot2对中文会进行“歧视”,后来发现原

来carrot2还是比较重视中文的,在有一个

org.carrot2.filter.lingo.local.ChineseLingoLocalFilterComponent的类,专门用来为中文提供分词操作。

再次往下细看,底层的分词造作在org.carrot2.util.tokenizer.parser.jflex.JeZHWordSplit中实现的,采用

的是基于lucene的MMAnalyer 。我没有使用过这种分词器,不知道它的消歧机制和切分效率如何,于是想拿经

常使用的分词器来做个比较。于是,必须建立一个自己的中文filter组建。 以往经常使用的是中科院的java

改良版(还是很慢)和c++版本的mmseg,由于使用的是自己家是windows平台的,所以只好用中科院的java改良

版。

1. 首先在org.carrot2.util.tokenizer.parser中新加一个分析器就叫KellyWordSplit:

package org.carrot2.util.tokenizer.parser;





import org.apache.lucene.analysis.ictcals.FMNM;

import org.carrot2.util.tokenizer.parser.jflex.PreprocessedJFlexWordBasedParserBase;

public class KellyWordSplit extends PreprocessedJFlexWordBasedParserBase {

//public Segment seg = null;



public KellyWordSplit() {

// try {

// seg = new Segment(1, new File(".").getCanonicalPath()

// + File.separator+"dic"+File.separator);

// } catch (IOException e) {

// // TODO Auto-generated catch block

// e.printStackTrace();

// }

}



@Override

public String preprocess(String input) {

System.out.println("cut:"+input);

return FMNM.ICTCLASCut(input) ;

}



}
然后再在这个包中建立一个解析工厂:ICTCALWordBasedParserFactory

package org.carrot2.util.tokenizer.parser;



import org.apache.commons.pool.BasePoolableObjectFactory;

import org.apache.commons.pool.ObjectPool;

import org.apache.commons.pool.impl.SoftReferenceObjectPool;



public class ICTCALWordBasedParserFactory {

/** Chinese tokenizer factory */

public static final ICTCALWordBasedParserFactory ChineseSimplified = new

KellyICTCALWordBasedParserFactory();



/** Parser pool */

protected ObjectPool parserPool;



/** No public constructor */

private ICTCALWordBasedParserFactory() {

// No public constructor

}



public WordBasedParserBase borrowParser() {

try {

parserPool.returnObject(parser);

} catch (Exception e) {

throw new RuntimeException("Cannot return a parser", e);

}

}



/**

* @author Stanislaw Osinski

* @version $Revision: 2122 $

*/

private static class KellyICTCALWordBasedParserFactory extends

ICTCALWordBasedParserFactory {

public KellyICTCALWordBasedParserFactory() {

parserPool = new SoftReferenceObjectPool(

new BasePoolableObjectFactory() {

public Object makeObject() throws Exception {

return new KellyWordSplit();

}

});

}
}

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值