001    package org.maltparser.core.feature;
002    
003    import java.io.Serializable;
004    import java.util.ArrayList;
005    
006    import org.maltparser.core.exception.MaltChainedException;
007    import org.maltparser.core.feature.function.FeatureFunction;
008    import org.maltparser.core.feature.spec.SpecificationSubModel;
009    
010    /**
011    *
012    *
013    * @author Johan Hall
014    */
015    public class FeatureVector extends ArrayList<FeatureFunction> implements Serializable {
016            public final static long serialVersionUID = 3256444702936019250L;
017            protected SpecificationSubModel specSubModel;
018            protected FeatureModel featureModel;
019    
020            
021            /**
022             * Constructs a feature vector
023             * 
024             * @param featureModel  the parent feature model
025             * @param specSubModel  the subspecifiction-model
026             * @throws MaltChainedException
027             */
028            public FeatureVector(FeatureModel featureModel, SpecificationSubModel specSubModel) throws MaltChainedException {
029                    setSpecSubModel(specSubModel);
030                    setFeatureModel(featureModel);
031    
032                    for (String spec : specSubModel) {
033                            add(featureModel.identifyFeature(spec));        
034                    }
035            }
036            
037            /**
038             * Returns the subspecifiction-model.
039             * 
040             * @return the subspecifiction-model
041             */
042            public SpecificationSubModel getSpecSubModel() {
043                    return specSubModel;
044            }
045    
046            protected void setSpecSubModel(SpecificationSubModel specSubModel) {
047                    this.specSubModel = specSubModel;
048            }
049            
050            /**
051             * Returns the feature model that the feature vector belongs to.
052             * 
053             * @return the feature model that the feature vector belongs to
054             */
055            public FeatureModel getFeatureModel() {
056                    return featureModel;
057            }
058    
059            protected void setFeatureModel(FeatureModel featureModel) {
060                    this.featureModel = featureModel;
061            }
062            
063            /**
064             * Updates all feature value in the feature vector according to the current state.
065             * 
066             * @throws MaltChainedException
067             */
068            public void update() throws MaltChainedException {
069                    for (int i = 0; i < size(); i++) {
070                            get(i).update();
071                    }
072            }
073            
074            /**
075             * Updates the cardinality (number of distinct values) of a feature value associated with the feature function 
076             * 
077             * @throws MaltChainedException
078             */
079            public void updateCardinality() throws MaltChainedException {
080                    for (int i = 0; i < size(); i++) {
081                            get(i).updateCardinality();
082                    }
083            }
084            
085            
086            /* (non-Javadoc)
087             * @see java.util.AbstractCollection#toString()
088             */
089            public String toString() {
090                    StringBuilder sb = new StringBuilder();
091                    for (FeatureFunction function : this) {
092                            sb.append(function.getFeatureValue().toString());
093                            sb.append('\n');
094                    }
095                    return sb.toString();
096            }
097    }