// Path: edits-core/src/main/java/org/edits/distance/algorithm/EditDistanceAlgorithm.java
// @Data
// @Log4j
// public abstract class EditDistanceAlgorithm implements Serializable, Cloneable {
// 
// 	private static final long serialVersionUID = 1L;
// 	private Matcher matcher;
// 	private boolean normalize;
// 
// 	public EditDistanceAlgorithm() {
// 		normalize = true;
// 		matcher = new DefaultMatcher();
// 	}
// 
// 	@Override
// 	public abstract EditDistanceAlgorithm clone();
// 
// 	public EditDistanceAlgorithm defaultCopy() {
// 		EditDistanceAlgorithm a = instance(this.getClass().getName());
// 		a.setMatcher(getMatcher().copy());
// 		a.setNormalize(normalize);
// 		return a;
// 	}
// 
// 	public double distance(AnnotatedText t, AnnotatedText h, String pairID) {
// 		List<Annotation> w1 = t.getAnnotation();
// 		List<Annotation> w2 = h.getAnnotation();
// 		return distance(w1, w2, t, h, pairID);
// 	}
// 
// 	public abstract double distance(List<Annotation> ta, List<Annotation> ha, AnnotatedText t, AnnotatedText h,
// 			String pairID);
// 
// 	public double init(double dist, double norm) {
// 		if (!normalize)
// 			return dist;
// 		return dist / norm;
// 	}
// 
// 	public EditDistanceAlgorithm instance(String name) {
// 		try {
// 			return (EditDistanceAlgorithm) this.getClass().getClassLoader().loadClass(this.getClass().getName())
// 					.newInstance();
// 		} catch (Exception e) {
// 			log.debug(e);
// 			throw new RuntimeException("Could not load algorithm " + name);
// 		}
// 	}
// }
// 
// Path: edits-core/src/main/java/org/edits/engines/OptimizationGoal.java
// @ToString(includeFieldNames = true)
// public class OptimizationGoal implements Serializable {
// 
// 	public enum Target {
// 		ACCURACY, FMEASURE, PRECISION, RECALL
// 	}
// 
// 	public static final OptimizationGoal ACCURACY = new OptimizationGoal(Target.ACCURACY, null);
// 
// 	public static final OptimizationGoal FMEASURE_NO = new OptimizationGoal(Target.FMEASURE, "NO");
// 	public static final OptimizationGoal FMEASURE_YES = new OptimizationGoal(Target.FMEASURE, "YES");
// 	public static final OptimizationGoal PRECISION_NO = new OptimizationGoal(Target.PRECISION, "NO");
// 	public static final OptimizationGoal PRECISION_YES = new OptimizationGoal(Target.PRECISION, "YES");
// 	public static final OptimizationGoal RECALL_NO = new OptimizationGoal(Target.RECALL, "NO");
// 	public static final OptimizationGoal RECALL_YES = new OptimizationGoal(Target.RECALL, "YES");
// 
// 	private static final long serialVersionUID = 1L;
// 
// 	@Getter
// 	private final String relation;
// 	@Getter
// 	private final Target target;
// 
// 	public OptimizationGoal() {
// 		this(Target.ACCURACY, null);
// 	}
// 
// 	public OptimizationGoal(Target target, String relation) {
// 		super();
// 		this.relation = relation;
// 		this.target = target;
// 	}
// 
// }
// 
// Path: edits-core/src/main/java/org/edits/etaf/AnnotatedEntailmentPair.java
// @Data
// @XmlAccessorType(XmlAccessType.FIELD)
// @XmlType(name = "AnnotatedEntailmentPair", propOrder = { "t", "h" })
// public class AnnotatedEntailmentPair {
// 
// 	public static AnnotatedEntailmentPair create(String t2, String h2, EditsTextAnnotator annotator) throws Exception {
// 		AnnotatedEntailmentPair px = new AnnotatedEntailmentPair();
// 		AnnotatedText at = new AnnotatedText();
// 		at.getAnnotation().addAll(annotator.annotate(t2));
// 		px.getT().add(at);
// 		at = new AnnotatedText();
// 		at.getAnnotation().addAll(annotator.annotate(h2));
// 		px.getH().add(at);
// 		return px;
// 	}
// 
// 	@XmlTransient
// 	private Map<String, String> attributes;
// 	@XmlAttribute
// 	protected String entailment;
// 	@XmlElement
// 	protected List<AnnotatedText> h;
// 	@XmlAttribute
// 	protected String id;
// 
// 	@XmlTransient
// 	private int order;
// 
// 	@XmlElement
// 	protected List<AnnotatedText> t;
// 
// 	@XmlAttribute
// 	protected String task;
// 
// 	public AnnotatedEntailmentPair() {
// 		t = Lists.newArrayList();
// 		h = Lists.newArrayList();
// 		attributes = Maps.newHashMap();
// 	}
// 
// }
// 
// Path: edits-core/src/main/java/org/edits/etaf/AnnotatedText.java
// @Data
// @XmlAccessorType(XmlAccessType.FIELD)
// @XmlType(name = "AnnotatedText", propOrder = { "annotation" })
// public class AnnotatedText {
// 
// 	@XmlElement
// 	protected List<Annotation> annotation;
// 
// 	public AnnotatedText() {
// 		annotation = Lists.newArrayList();
// 	}
// }


import java.util.List;
import lombok.EqualsAndHashCode;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
import org.edits.distance.algorithm.EditDistanceAlgorithm;
import org.edits.engines.OptimizationGoal;
import org.edits.etaf.AnnotatedEntailmentPair;
import org.edits.etaf.AnnotatedText;
package org.edits.engines.weka.features;




@ToString
@EqualsAndHashCode(callSuper = false)
public class DistanceFeature extends Feature {

	private static final long serialVersionUID = 1L;

	@Getter
// Path: edits-core/src/main/java/org/edits/distance/algorithm/EditDistanceAlgorithm.java
// @Data
// @Log4j
// public abstract class EditDistanceAlgorithm implements Serializable, Cloneable {
// 
// 	private static final long serialVersionUID = 1L;
// 	private Matcher matcher;
// 	private boolean normalize;
// 
// 	public EditDistanceAlgorithm() {
// 		normalize = true;
// 		matcher = new DefaultMatcher();
// 	}
// 
// 	@Override
// 	public abstract EditDistanceAlgorithm clone();
// 
// 	public EditDistanceAlgorithm defaultCopy() {
// 		EditDistanceAlgorithm a = instance(this.getClass().getName());
// 		a.setMatcher(getMatcher().copy());
// 		a.setNormalize(normalize);
// 		return a;
// 	}
// 
// 	public double distance(AnnotatedText t, AnnotatedText h, String pairID) {
// 		List<Annotation> w1 = t.getAnnotation();
// 		List<Annotation> w2 = h.getAnnotation();
// 		return distance(w1, w2, t, h, pairID);
// 	}
// 
// 	public abstract double distance(List<Annotation> ta, List<Annotation> ha, AnnotatedText t, AnnotatedText h,
// 			String pairID);
// 
// 	public double init(double dist, double norm) {
// 		if (!normalize)
// 			return dist;
// 		return dist / norm;
// 	}
// 
// 	public EditDistanceAlgorithm instance(String name) {
// 		try {
// 			return (EditDistanceAlgorithm) this.getClass().getClassLoader().loadClass(this.getClass().getName())
// 					.newInstance();
// 		} catch (Exception e) {
// 			log.debug(e);
// 			throw new RuntimeException("Could not load algorithm " + name);
// 		}
// 	}
// }
// 
// Path: edits-core/src/main/java/org/edits/engines/OptimizationGoal.java
// @ToString(includeFieldNames = true)
// public class OptimizationGoal implements Serializable {
// 
// 	public enum Target {
// 		ACCURACY, FMEASURE, PRECISION, RECALL
// 	}
// 
// 	public static final OptimizationGoal ACCURACY = new OptimizationGoal(Target.ACCURACY, null);
// 
// 	public static final OptimizationGoal FMEASURE_NO = new OptimizationGoal(Target.FMEASURE, "NO");
// 	public static final OptimizationGoal FMEASURE_YES = new OptimizationGoal(Target.FMEASURE, "YES");
// 	public static final OptimizationGoal PRECISION_NO = new OptimizationGoal(Target.PRECISION, "NO");
// 	public static final OptimizationGoal PRECISION_YES = new OptimizationGoal(Target.PRECISION, "YES");
// 	public static final OptimizationGoal RECALL_NO = new OptimizationGoal(Target.RECALL, "NO");
// 	public static final OptimizationGoal RECALL_YES = new OptimizationGoal(Target.RECALL, "YES");
// 
// 	private static final long serialVersionUID = 1L;
// 
// 	@Getter
// 	private final String relation;
// 	@Getter
// 	private final Target target;
// 
// 	public OptimizationGoal() {
// 		this(Target.ACCURACY, null);
// 	}
// 
// 	public OptimizationGoal(Target target, String relation) {
// 		super();
// 		this.relation = relation;
// 		this.target = target;
// 	}
// 
// }
// 
// Path: edits-core/src/main/java/org/edits/etaf/AnnotatedEntailmentPair.java
// @Data
// @XmlAccessorType(XmlAccessType.FIELD)
// @XmlType(name = "AnnotatedEntailmentPair", propOrder = { "t", "h" })
// public class AnnotatedEntailmentPair {
// 
// 	public static AnnotatedEntailmentPair create(String t2, String h2, EditsTextAnnotator annotator) throws Exception {
// 		AnnotatedEntailmentPair px = new AnnotatedEntailmentPair();
// 		AnnotatedText at = new AnnotatedText();
// 		at.getAnnotation().addAll(annotator.annotate(t2));
// 		px.getT().add(at);
// 		at = new AnnotatedText();
// 		at.getAnnotation().addAll(annotator.annotate(h2));
// 		px.getH().add(at);
// 		return px;
// 	}
// 
// 	@XmlTransient
// 	private Map<String, String> attributes;
// 	@XmlAttribute
// 	protected String entailment;
// 	@XmlElement
// 	protected List<AnnotatedText> h;
// 	@XmlAttribute
// 	protected String id;
// 
// 	@XmlTransient
// 	private int order;
// 
// 	@XmlElement
// 	protected List<AnnotatedText> t;
// 
// 	@XmlAttribute
// 	protected String task;
// 
// 	public AnnotatedEntailmentPair() {
// 		t = Lists.newArrayList();
// 		h = Lists.newArrayList();
// 		attributes = Maps.newHashMap();
// 	}
// 
// }
// 
// Path: edits-core/src/main/java/org/edits/etaf/AnnotatedText.java
// @Data
// @XmlAccessorType(XmlAccessType.FIELD)
// @XmlType(name = "AnnotatedText", propOrder = { "annotation" })
// public class AnnotatedText {
// 
// 	@XmlElement
// 	protected List<Annotation> annotation;
// 
// 	public AnnotatedText() {
// 		annotation = Lists.newArrayList();
// 	}
// }


// Path: edits-core/src/main/java/org/edits/engines/weka/features/DistanceFeature.java
import java.util.List;
import lombok.EqualsAndHashCode;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
import org.edits.distance.algorithm.EditDistanceAlgorithm;
import org.edits.engines.OptimizationGoal;
import org.edits.etaf.AnnotatedEntailmentPair;
import org.edits.etaf.AnnotatedText;

package org.edits.engines.weka.features;




@ToString
@EqualsAndHashCode(callSuper = false)
public class DistanceFeature extends Feature {

	private static final long serialVersionUID = 1L;

	@Getter
	private EditDistanceAlgorithm algorithm;