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 import org.maltparser.core.feature.value.FeatureValue; 010 011 /** 012 * 013 * 014 * @author Johan Hall 015 */ 016 public class FeatureVector extends ArrayList<FeatureFunction> implements Serializable { 017 public final static long serialVersionUID = 3256444702936019250L; 018 protected SpecificationSubModel specSubModel; 019 protected FeatureModel featureModel; 020 021 022 /** 023 * Constructs a feature vector 024 * 025 * @param featureModel the parent feature model 026 * @param specSubModel the subspecifiction-model 027 * @throws MaltChainedException 028 */ 029 public FeatureVector(FeatureModel featureModel, SpecificationSubModel specSubModel) throws MaltChainedException { 030 setSpecSubModel(specSubModel); 031 setFeatureModel(featureModel); 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 final int size = size(); 070 for (int i = 0; i < size; i++) { 071 get(i).update(); 072 } 073 } 074 075 076 public FeatureValue getFeatureValue(int index) { 077 if (index < 0 || index >= size()) { 078 return null; 079 } 080 return get(index).getFeatureValue(); 081 } 082 083 public FeatureValue[] getFeatureValues() { 084 final int size = size(); 085 FeatureValue[] featureValues = new FeatureValue[size]; 086 for (int i = 0; i < size; i++) { 087 featureValues[i] = get(i).getFeatureValue(); 088 } 089 return featureValues; 090 } 091 092 /* (non-Javadoc) 093 * @see java.util.AbstractCollection#toString() 094 */ 095 public String toString() { 096 final StringBuilder sb = new StringBuilder(); 097 for (FeatureFunction function : this) { 098 if (function != null) { 099 sb.append(function.getFeatureValue().toString()); 100 sb.append('\n'); 101 } 102 } 103 return sb.toString(); 104 } 105 }