package com.antbrains.crf;
import gnu.trove.iterator.TObjectIntIterator;
import com.antbrains.datrie.DatrieIterator;
import com.antbrains.datrie.DoubleArrayTrie;
public class DATrieFeatureDict implements FeatureDict {
private static final long serialVersionUID = 6807591420833652562L;
private DoubleArrayTrie datrie;
@Override
public int get(String feature, boolean addIfNotExist) {
int[] arr = datrie.find(feature, 0);
if (arr[0] > 0) {
return arr[1];
}
if (addIfNotExist) {
int id = datrie.size();
datrie.coverInsert(feature, id);
return id;
}
return -1;
}
public DATrieFeatureDict() {
datrie = new DoubleArrayTrie();
datrie.setMultiplyExpanding(true);
datrie.setMultiply(1.5);
}
@Override
public int size() {
return datrie.size();
}
@Override
public TObjectIntIterator<String> iterator() {
final DatrieIterator iter = datrie.iterator();
return new TObjectIntIterator<String>() {
@Override
public void advance() {
iter.next();
}
@Override
public boolean hasNext() {
return iter.hasNext();
}
@Override
public void remove() {
throw new UnsupportedOperationException();
}
@Override
public String key() {
return iter.key();
}
@Override
public int setValue(int value) {
return iter.setValue(value);
}
@Override
public int value() {
return iter.value();
}
};
}
}