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

📄 featuregencache.java

📁 CRF1.2
💻 JAVA
字号:
/* * Created on Feb 15, 2005 * */package iitb.CRF;/** * @author sunita * */public class FeatureGenCache implements FeatureGeneratorNested {    /**     * @author sunita     *     */    class FeatureImpl implements Feature {        int _index;        int _y;        int _yprev;        float _value;        void init(int _index, int _y, int _yprev, float _value) {            this._index = _index;            this._y = _y;            this._yprev = _yprev;            this._value = _value;        }          /**         *          */        public FeatureImpl() {            super();            // TODO Auto-generated constructor stub        }        /* (non-Javadoc)         * @see iitb.CRF.Feature#index()         */        public int index() {            return _index;        }        /* (non-Javadoc)         * @see iitb.CRF.Feature#y()         */        public int y() {            return _y;        }        /* (non-Javadoc)         * @see iitb.CRF.Feature#yprev()         */        public int yprev() {            return _yprev;        }        /* (non-Javadoc)         * @see iitb.CRF.Feature#value()         */        public float value() {            return _value;        }        /* (non-Javadoc)         * @see iitb.CRF.Feature#yprevArray()         */        public int[] yprevArray() {            // TODO Auto-generated method stub            return null;        }    }    private static final long serialVersionUID = 1L;    FeatureGeneratorNested fgen;    FeatureGenerator sfgen;    FeatureImpl feature = new FeatureImpl();    int numFeatures = 0;    int scanNum = 0;    int dataIndex = 0;    int y[];    int yprev[];    int index[];    float val[];    int offset[], endOffset[];    int indexPtr;    int thisKey;    int maxKey=0;    int numData = 0;    int maxDataLen=0;    int maxSegLen=0;    /**     *      */    public FeatureGenCache(FeatureGeneratorNested fgen) {        this.fgen = fgen;        sfgen = fgen;        numFeatures = 0;    }    public FeatureGenCache(FeatureGenerator fgen) {        this.sfgen = fgen;        numFeatures = 0;        this.fgen = null;        if (sfgen instanceof FeatureGeneratorNested)        	this.fgen = ((FeatureGeneratorNested)sfgen);    }    /* (non-Javadoc)     * @see iitb.CRF.FeatureGeneratorNested#maxMemory()     */    public int maxMemory() {    	return (sfgen instanceof FeatureGeneratorNested)?((FeatureGeneratorNested)sfgen).maxMemory():1;    }      public void startDataScan() {        scanNum++;        if (scanNum==2) {           // System.out.println("Numfeatures overall "+numFeatures);            y = new int[numFeatures];            yprev = new int[numFeatures];            index = new int[numFeatures];            val = new float[numFeatures];            maxKey = maxSegLen*numData*maxDataLen;            offset = new int[maxKey+1];            endOffset = new int[maxKey+1];            numFeatures = 0;        }        dataIndex = -1;    }    public void nextDataIndex() {        dataIndex++;        if (scanNum==1) numData++;    }    public void startScanFeaturesAt(DataSequence data, int prevPos, int pos) {        startScanFeaturesAt(data,prevPos,pos,true);    }    /* (non-Javadoc)     * @see iitb.CRF.FeatureGeneratorNested#startScanFeaturesAt(iitb.CRF.DataSequence, int, int)     */    public void startScanFeaturesAt(DataSequence data, int prevPos, int pos, boolean nested) {        assert(scanNum > 0);        thisKey = dataIndex*maxDataLen + pos + (pos-prevPos-1)*maxDataLen*numData;        if (scanNum == 1) {            maxSegLen = Math.max(maxSegLen,pos-prevPos);            maxDataLen = Math.max(maxDataLen,data.length());        } else            assert(thisKey < maxKey+1);        if (scanNum <= 2) {            if (nested)                 fgen.startScanFeaturesAt(data,prevPos,pos);            else                 sfgen.startScanFeaturesAt(data,pos);        } else {            indexPtr = offset[thisKey];        }        if (scanNum==2) {            offset[thisKey]=numFeatures;            endOffset[thisKey]=numFeatures;        }    }	    /* (non-Javadoc)     * @see iitb.CRF.FeatureGenerator#numFeatures()     */    public int numFeatures() {        return fgen.numFeatures();    }    /* (non-Javadoc)     * @see iitb.CRF.FeatureGenerator#startScanFeaturesAt(iitb.CRF.DataSequence, int)     */    public void startScanFeaturesAt(DataSequence data, int pos) {        startScanFeaturesAt(data,pos-1,pos,false);    }    /* (non-Javadoc)     * @see iitb.CRF.FeatureGenerator#hasNext()     */    public boolean hasNext() {        return (scanNum<=2)?sfgen.hasNext():endOffset[thisKey]>indexPtr;    }    /* (non-Javadoc)     * @see iitb.CRF.FeatureGenerator#next()     */    public Feature next() {        if (scanNum <= 2) {            Feature f = sfgen.next();            if (scanNum==2) {                y[numFeatures]=f.y();                yprev[numFeatures]=f.yprev();                val[numFeatures]=f.value();                index[numFeatures] = f.index();                endOffset[thisKey]++;            }            numFeatures++;            return f;        } else {            feature.init(index[indexPtr],y[indexPtr],yprev[indexPtr],val[indexPtr]);            indexPtr++;            return feature;        }    }    /* (non-Javadoc)     * @see iitb.CRF.FeatureGenerator#featureName(int)     */    public String featureName(int featureIndex) {        return sfgen.featureName(featureIndex);    }}

⌨️ 快捷键说明

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