001 package org.maltparser.core.syntaxgraph.feature; 002 003 import org.maltparser.core.exception.MaltChainedException; 004 import org.maltparser.core.feature.function.FeatureFunction; 005 import org.maltparser.core.feature.function.Modifiable; 006 import org.maltparser.core.feature.value.FeatureValue; 007 import org.maltparser.core.feature.value.SingleFeatureValue; 008 import org.maltparser.core.io.dataformat.ColumnDescription; 009 import org.maltparser.core.symbol.SymbolTable; 010 import org.maltparser.core.symbol.nullvalue.NullValues.NullValueId; 011 012 /** 013 * 014 * 015 * @author Johan Hall 016 */ 017 public abstract class ColumnFeature implements FeatureFunction, Modifiable { 018 protected ColumnDescription column; 019 protected SingleFeatureValue featureValue; 020 021 public ColumnFeature() throws MaltChainedException { 022 featureValue = new SingleFeatureValue(this); 023 } 024 025 public abstract void update() throws MaltChainedException; 026 public abstract void initialize(Object[] arguments) throws MaltChainedException; 027 public abstract Class<?>[] getParameterTypes(); 028 029 public String getSymbol(int value) throws MaltChainedException { 030 return column.getSymbolTable().getSymbolCodeToString(value); 031 } 032 033 public int getCode(String value) throws MaltChainedException { 034 return column.getSymbolTable().getSymbolStringToCode(value); 035 } 036 037 public ColumnDescription getColumn() { 038 return column; 039 } 040 041 protected void setColumn(ColumnDescription column) { 042 this.column = column; 043 } 044 045 public void updateCardinality() { 046 featureValue.setCardinality(column.getSymbolTable().getValueCounter()); 047 } 048 049 public void setFeatureValue(int value) throws MaltChainedException { 050 if (column.getSymbolTable().getSymbolCodeToString(value) == null) { 051 featureValue.setCode(value); 052 featureValue.setKnown(column.getSymbolTable().getKnown(value)); 053 featureValue.setSymbol(column.getSymbolTable().getNullValueSymbol(NullValueId.NO_NODE)); 054 featureValue.setNullValue(true); 055 } else { 056 featureValue.setCode(value); 057 featureValue.setKnown(column.getSymbolTable().getKnown(value)); 058 featureValue.setSymbol(column.getSymbolTable().getSymbolCodeToString(value)); 059 featureValue.setNullValue(column.getSymbolTable().isNullValue(value)); 060 } 061 } 062 063 public void setFeatureValue(String value) throws MaltChainedException { 064 if (column.getSymbolTable().getSymbolStringToCode(value) < 0) { 065 featureValue.setCode(column.getSymbolTable().getNullValueCode(NullValueId.NO_NODE)); 066 featureValue.setKnown(column.getSymbolTable().getKnown(value)); 067 featureValue.setSymbol(value); 068 featureValue.setNullValue(true); 069 } else { 070 featureValue.setCode(column.getSymbolTable().getSymbolStringToCode(value)); 071 featureValue.setKnown(column.getSymbolTable().getKnown(value)); 072 featureValue.setSymbol(value); 073 featureValue.setNullValue(column.getSymbolTable().isNullValue(value)); 074 } 075 } 076 077 public FeatureValue getFeatureValue() { 078 return featureValue; 079 } 080 081 public boolean equals(Object obj) { 082 if (this == obj) 083 return true; 084 if (obj == null) 085 return false; 086 if (getClass() != obj.getClass()) 087 return false; 088 return obj.toString().equals(this.toString()); 089 } 090 091 public String getColumnName() { 092 return column.getName(); 093 } 094 095 public SymbolTable getSymbolTable() { 096 return column.getSymbolTable(); 097 } 098 099 public String toString() { 100 return column.getName(); 101 } 102 }