package eu.project.ttc.eval; import java.io.FileWriter; import java.io.IOException; import java.io.Writer; import java.nio.file.Path; import java.nio.file.Paths; import java.util.List; import java.util.stream.Stream; import org.assertj.core.util.Lists; import eu.project.ttc.engines.desc.Lang; public class AlignmentEvalService { public Tsv3ColFile getRefFile(AlignmentEvalRun run) { return new Tsv3ColFile(getRefFilePath(run.getCorpus(), run.getLangPair())); } private Path getRefFilePath(Corpus corpus, LangPair pair) { return Paths.get("src", "eval", "resources", "refs", corpus.getFullName(), String.format("%s-%s-%s.tsv", corpus.getShortName(), pair.getSource().getCode(), pair.getTarget().getCode()) ); } public boolean hasRef(Corpus corpus, LangPair pair) { return getRefFilePath(corpus, pair).toFile().exists(); } public boolean hasAnyRefForLangPair(LangPair pair) { for(Corpus corpus:Corpus.values()) if(hasRef(corpus, pair)) return true; return false; } public Stream<LangPair> langPairs() { List<LangPair> pairs = Lists.newArrayList(); for(Lang source:Lang.values()) { for(Lang target:Lang.values()) { LangPair pair = new LangPair(source, target); if(hasAnyRefForLangPair(pair)) pairs.add(pair); } } return pairs.stream(); } public Path getLangPairPath(LangPair langPair) { Path path = TermSuiteEvals.getAlignmentDirectory().resolve(langPair.toString()); path.toFile().mkdirs(); return path; } public Path getEvaluatedMethodPath(LangPair langPair, EvaluatedMethod evaluatedMethod) { Path path = getLangPairPath(langPair).resolve(evaluatedMethod.toString()); path.toFile().mkdirs(); return path; } public void saveRunTrace(AlignmentEvalRun run) throws IOException { try(Writer writer = new FileWriter(getRunTracePath(run).toFile())) { writer.write(AlignmentRecord.toOneLineHeaders()); writer.write('\n'); run.getTrace().tries().forEach(e -> { try { writer.write(e.toOneLineString()); writer.write('\n'); } catch (IOException e1) { throw new RuntimeException(e1); } }); } } public Path getRunTracePath(AlignmentEvalRun run) { return getEvaluatedMethodPath(run.getLangPair(), run.getEvaluatedMethod()).resolve( String.format("%s-%s", run.getCorpus(), run.getTerminoConfig())); } public Writer getResultWriter(LangPair langPair, EvaluatedMethod evaluatedMethod) throws IOException { Path resultPath = getEvaluatedMethodPath(langPair, evaluatedMethod).resolve("results.txt"); FileWriter writer = new FileWriter(resultPath.toFile()); writer.write(String.format("%s\t%s\t%s\t%s\t%s%n", "run", "pr", "tot", "suc", "ign" )); return writer; } public void writeResultLine(Writer resultWriter, AlignmentEvalRun run) throws IOException { RunTrace trace = run.getTrace(); resultWriter.write(String.format("%s\t%.2f\t%d\t%d\t%d%n", run.getName(), trace.getPrecision(), trace.validResults().count(), trace.successResults().count(), trace.invalidResults().count() )); resultWriter.flush(); } }