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 }