package org.maltparser.core.feature; import java.io.Serializable; import java.util.ArrayList; import org.maltparser.core.exception.MaltChainedException; import org.maltparser.core.feature.function.FeatureFunction; import org.maltparser.core.feature.spec.SpecificationSubModel; import org.maltparser.core.feature.value.FeatureValue; /** * * * @author Johan Hall */ public class FeatureVector extends ArrayList<FeatureFunction> implements Serializable { public final static long serialVersionUID = 3256444702936019250L; protected SpecificationSubModel specSubModel; protected FeatureModel featureModel; /** * Constructs a feature vector * * @param featureModel the parent feature model * @param specSubModel the subspecifiction-model * @throws MaltChainedException */ public FeatureVector(FeatureModel featureModel, SpecificationSubModel specSubModel) throws MaltChainedException { setSpecSubModel(specSubModel); setFeatureModel(featureModel); for (String spec : specSubModel) { add(featureModel.identifyFeature(spec)); } } /** * Returns the subspecifiction-model. * * @return the subspecifiction-model */ public SpecificationSubModel getSpecSubModel() { return specSubModel; } protected void setSpecSubModel(SpecificationSubModel specSubModel) { this.specSubModel = specSubModel; } /** * Returns the feature model that the feature vector belongs to. * * @return the feature model that the feature vector belongs to */ public FeatureModel getFeatureModel() { return featureModel; } protected void setFeatureModel(FeatureModel featureModel) { this.featureModel = featureModel; } /** * Updates all feature value in the feature vector according to the current * state. * * @throws MaltChainedException */ public void update() throws MaltChainedException { final int size = size(); for (int i = 0; i < size; i++) { get(i).update(); } } public FeatureValue getFeatureValue(int index) { if (index < 0 || index >= size()) { return null; } return get(index).getFeatureValue(); } public FeatureValue[] getFeatureValues() { final int size = size(); FeatureValue[] featureValues = new FeatureValue[size]; for (int i = 0; i < size; i++) { featureValues[i] = get(i).getFeatureValue(); } return featureValues; } /* * (non-Javadoc) @see java.util.AbstractCollection#toString() */ @Override public String toString() { final StringBuilder sb = new StringBuilder(); for (FeatureFunction function : this) { if (function != null) { sb.append(function.getFeatureValue().toString()); sb.append('\n'); } } return sb.toString(); } }