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

📄 windowfeatures.java

📁 这是一个CRF(条件随机域)算法的实现,希望能对从事算法的有些帮助.
💻 JAVA
字号:
/* * Created on Dec 6, 2004 * */package iitb.Model;import java.io.Serializable;import iitb.CRF.DataSequence;/** * @author Administrator * * Define features for windows of ranges */public class WindowFeatures extends FeatureTypes  {    private static final long serialVersionUID = 6123;    protected FeatureTypes single;	protected int currentWindow;	int prevPos;	protected int pos;	protected transient DataSequence dataSeq;		public static class Window implements Serializable {	    public int start;	    public boolean startRelativeToLeft;	    public int end;	    public boolean endRelativeToLeft;	    String winName=null;	    public int maxLength=Integer.MAX_VALUE;	    public int minLength=1;	       public Window(int start, boolean startRelativeToLeft, int end,                boolean endRelativeToLeft) {			this(start,startRelativeToLeft,end,endRelativeToLeft,null);	       	String startB = startRelativeToLeft?"L":"R";	       	String endB = endRelativeToLeft?"L":"R";	       	winName = startB + start + endB + end;	    }	        public Window(int start, boolean startRelativeToLeft, int end,                boolean endRelativeToLeft, String winName) {            this.start = start;            this.startRelativeToLeft = startRelativeToLeft;            this.end = end;            this.endRelativeToLeft = endRelativeToLeft;            this.winName = winName;        }        public Window(int start, boolean startRelativeToLeft, int end,                boolean endRelativeToLeft, String winName, int minWinLength, int maxWinLength) {            this(start,startRelativeToLeft,end,endRelativeToLeft,winName);            this.maxLength = maxWinLength;            this.minLength = minWinLength;        }                int leftBoundary(int segStart, int segEnd) {            if (startRelativeToLeft)                return boundary(segStart,start);             return boundary(segEnd,start);        }        int rightBoundary(int segStart, int segEnd) {            if (endRelativeToLeft)                return boundary(segStart,end);             return boundary(segEnd,end);        }        /**         * @param segStart         * @param start2         * @return         */        private int boundary(int boundary, int offset) {            return boundary+offset;        }        public String toString() {        	return winName;        }	}	protected Window windows[];    private int dataLen;	/**	 * 	 */	public WindowFeatures(Window windows[], FeatureTypes single) {		super(single);		this.single = single;		this.windows = windows;	}	protected boolean advance(boolean firstCall) {	    while (firstCall || !single.hasNext()) {	        currentWindow--;	        if (currentWindow < 0)	            return false;	        if ((windows[currentWindow].maxLength < pos-prevPos) || (windows[currentWindow].minLength > pos-prevPos))	            continue;	        int rightB = windows[currentWindow].rightBoundary(prevPos+1,pos);	        int leftB = windows[currentWindow].leftBoundary(prevPos+1,pos);	 	        if ((leftB < dataLen) && (rightB >= 0) && (leftB <= rightB)) {	            single.startScanFeaturesAt(dataSeq,Math.max(leftB,0)-1, Math.min(rightB,dataLen-1));	            firstCall = false;	        }	    }	    return true;	}	/* (non-Javadoc)	 * @see iitb.Model.FeatureTypes#startScanFeaturesAt(iitb.CRF.DataSequence, int, int)	 */	public boolean startScanFeaturesAt(DataSequence data, int prevPos, int pos) {	    currentWindow = windows.length;	    dataSeq = data;	    dataLen = dataSeq.length();	    this.prevPos = prevPos;	    this.pos = pos;		return advance(true);	}	/* (non-Javadoc)	 * @see iitb.Model.FeatureTypes#hasNext()	 */	public boolean hasNext() {		return single.hasNext() && (currentWindow >= 0);	}	/* (non-Javadoc)	 * @see iitb.Model.FeatureTypes#next(iitb.Model.FeatureImpl)	 */	public void next(FeatureImpl f) {	    single.next(f);	    String name = "";	    if (featureCollectMode()) {	        name += f.strId.name + ".W." + windows[currentWindow];	    }	    setFeatureIdentifier(f.strId.id*windows.length+currentWindow, f.strId.stateId, name, f);	    advance(false);	}	public boolean requiresTraining() {		return single.requiresTraining();	}	public void train(DataSequence data, int pos) {		single.train(data, pos);	}}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -