package eu.project.ttc.eval; import java.util.Optional; import eu.project.ttc.engines.BilingualAligner.AlignmentMethod; import eu.project.ttc.models.Term; public class AlignmentRecord { private boolean valid; private Optional<Boolean> success = Optional.empty(); private Optional<Integer> targetTermCandidatePosition = Optional.empty(); private Optional<String> comment = Optional.empty(); private Optional<AlignmentMethod> method = Optional.empty(); private Optional<Term> sourceTerm = Optional.empty(); private Optional<Term> targetTerm = Optional.empty(); /* * In case terms are not found in sources/target terminos */ private Optional<String> sourceLemma = Optional.empty(); private Optional<String> targetLemma = Optional.empty(); public AlignmentRecord() { super(); } public AlignmentRecord(Term sourceTerm, Term targetTerm) { super(); this.sourceTerm = Optional.of(sourceTerm); this.sourceLemma = Optional.of(sourceTerm.getLemma()); this.targetTerm = Optional.of(targetTerm); this.targetLemma = Optional.of(targetTerm.getLemma()); } public boolean isValid() { return valid; } public AlignmentRecord setValid(boolean validTest) { this.valid = validTest; return this; } public AlignmentRecord setMethod(AlignmentMethod method) { this.method = Optional.of(method); return this; } public AlignmentMethod getMethod() { return method.get(); } public boolean isSuccess() { return success.get(); } public AlignmentRecord setSuccess(boolean targetTermFound) { this.success = Optional.of(targetTermFound); return this; } public int getTargetTermCandidatePosition() { return targetTermCandidatePosition.get(); } public AlignmentRecord setTargetTermCandidatePosition(int targetTermCandidatePosition) { this.targetTermCandidatePosition = Optional.of(targetTermCandidatePosition); return this; } public String getComment() { return comment.get(); } public AlignmentRecord setComment(String comment) { this.comment = Optional.of(comment); return this; } public TermType getSourceTermType() { return TermType.ofTerm(sourceTerm.get()); } public TermType getTargetTermType() { return TermType.ofTerm(targetTerm.get()); } public static String toOneLineHeaders() { return "V\tR\tSt\tTt\tM\t" + String.format("%-25s %-25s %s", "source", "target", "Comment"); } public String toOneLineString() { return String.format("%s\t%s\t%s\t%s\t%s\t%-25s %-25s %s", toString(isValid()), toString(this.success), toString(this.sourceTerm.isPresent() ? this.getSourceTermType() : "-"), toString(this.targetTerm.isPresent() ? this.getTargetTermType() : "-"), toString(this.method), sourceLemma.orElse("-"), targetLemma.orElse("-"), this.comment.orElse("-") ); } private String toString(Optional<?> value) { if(value.isPresent()) return toString(value.get()); else return "-"; } private String toString(Boolean value) { return value ? "1" : "0"; } private String toString(AlignmentMethod method) { return method.getShortName(); } private String toString(TermType type) { return type.getTermTypeName(); } private String toString(Object object) { if(object instanceof Boolean) return toString((Boolean)object); else if(object instanceof AlignmentMethod) return toString((AlignmentMethod)object); if(object instanceof TermType) return toString((TermType)object); else return object.toString(); } public AlignmentRecord setTargetLemma(String targetLemma) { this.targetLemma = Optional.of(targetLemma); return this; } public AlignmentRecord setSourceLemma(String sourceLemma) { this.sourceLemma = Optional.of(sourceLemma); return this; } }