package edu.stanford.nlp.ie.crf; import edu.stanford.nlp.util.Index; import java.io.Serializable; import java.util.ArrayList; import java.util.List; /** * @author Jenny Finkel */ public class CRFLabel implements Serializable { private static final long serialVersionUID = 7403010868396790276L; private final int[] label; private int hashCode = -1; // todo: When rebuilding, change this to a better hash function like 31 private static final int maxNumClasses = 10; public CRFLabel(int[] label) { this.label = label; } @Override public boolean equals(Object o) { if (!(o instanceof CRFLabel)) { return false; } CRFLabel other = (CRFLabel) o; if (other.label.length != label.length) { return false; } for (int i = 0; i < label.length; i++) { if (label[i] != other.label[i]) { return false; } } return true; } public CRFLabel getSmallerLabel(int size) { int[] newLabel = new int[size]; System.arraycopy(label, label.length - size, newLabel, 0, size); return new CRFLabel(newLabel); } public CRFLabel getOneSmallerLabel() { return getSmallerLabel(label.length - 1); } public int[] getLabel() { return label; } public <E> String toString(Index<E> classIndex) { List<E> l = new ArrayList<>(); for (int aLabel : label) { l.add(classIndex.get(aLabel)); } return l.toString(); } @Override public String toString() { List<Integer> l = new ArrayList<>(); for (int aLabel : label) { l.add(Integer.valueOf(aLabel)); } return l.toString(); } @Override public int hashCode() { if (hashCode < 0) { hashCode = 0; for (int aLabel : label) { hashCode *= maxNumClasses; hashCode += aLabel; } } return hashCode; } }