赞
踩
逆向最大匹配算法,中文分词机械化分词中最基本的算法,也是入门级别的算法。但是,在机械化分词方面的效果,表现却很好。尤其是在大文本的时候,一次取较多词语进行匹配,因为大文本匹配成词的概率远远高于小文本,所以会有很好的表现。IK分词,在中文分词领域里,只能算是皮毛,或者说是一个壳儿而已,根本不算真正的分词。中文分词里面,运用CRF进行消除歧义分词,是主流,在NLP领域,RNN是主要技术手段,截止到2016年,RNN已经成功应用到NLP领域中,甚至在计算机视觉中也发挥着重要作用。目前,在open nlp社区里,有一个HanLP分词源码包,里面有极速分词和消歧分词,性能非常优异。下面的代码,来自IK分词的一部分源码包,本人进行了逆向最大匹配算法的改造,闲着没事干,算是入门级别的分词。
package org.wltea.analyzer.core;
import java.io.IOException;
import java.io.Reader;
import java.util.HashMap;
import java.util.HashSet;
import java.util.LinkedList;
import java.util.Map;
import java.util.Set;
import org.wltea.analyzer.cfg.Configuration;
import org.wltea.analyzer.dic.Dictionary;
/**
* 中分分词上下文环境
* @author TongXueQiang
* @date 2016/01/22
* @since 1.7
*/
class AnalyzeContext {
private char[] segmentBuff;
private int[] charTypes;
private int buffOffset;
private int cursor;
private int available;
private Set buffLocker;
private QuickSortSet orgLexemes;
private Map pathMap;
private LinkedList results;
private Configuration cfg;
private Integer moveIndex;
public AnalyzeContext(Configuration cfg) {
this.cfg = cfg;
this.segmentBuff = new char[4096];
this.charTypes = new int[4096];
this.buffLocker = new HashSet();
this.orgLexemes = new QuickSortSet();
this.pathMap = new HashMap();
this.results = new LinkedList();
}
int getCursor() {
return this.cursor;
}
char[] getSegmentBuff() {
return this.segmentBuff;
}
char getCurrentChar() {
return this.segmentBuff[this.cursor];
}
int getCurrentCharType() {
retu
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。