Skip to content

Commit

Permalink
Introduces ExperimentsBuilder
Browse files Browse the repository at this point in the history
ExperimentsBuilder eases the creation of a set of experiments with a
fluent interface and syntactic sugar for decorators.

This relates to bst-mug#53.
  • Loading branch information
Michel Oleynik committed Jul 14, 2017
1 parent e3bbd6c commit 901433f
Show file tree
Hide file tree
Showing 4 changed files with 91 additions and 46 deletions.
22 changes: 12 additions & 10 deletions src/main/java/at/medunigraz/imi/bst/trec/Experimenter.java
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
package at.medunigraz.imi.bst.trec;

import java.io.File;
import java.util.HashSet;
import java.util.Set;

import at.medunigraz.imi.bst.trec.experiment.Experiment;
import at.medunigraz.imi.bst.trec.experiment.ExperimentsBuilder;
import at.medunigraz.imi.bst.trec.model.Gene;
import at.medunigraz.imi.bst.trec.query.ElasticSearchQuery;
import at.medunigraz.imi.bst.trec.query.GeneExpanderQueryDecorator;
Expand All @@ -14,19 +14,21 @@

public class Experimenter {
public static void main(String[] args) {
Set<Experiment> experiments = new HashSet<>();

final File pmTemplate = new File(Experimenter.class.getResource("/templates/must-match-gene.json").getFile());
final File boostTemplate = new File(Experimenter.class.getResource("/templates/boost-extra.json").getFile());

Query baselineDecorator = new WordRemovalQueryDecorator(
new TemplateQueryDecorator(pmTemplate, new ElasticSearchQuery("trec")));
Experiment base = Experiment.create().withId("topics2017-pmid").withDecorator(baselineDecorator);
experiments.add(base);

new TemplateQueryDecorator(boostTemplate, new ElasticSearchQuery("trec")));

Gene.Field[] expandTo = { Gene.Field.SYMBOL, Gene.Field.DESCRIPTION };
Query geneDecorator = new WordRemovalQueryDecorator(new GeneExpanderQueryDecorator(expandTo,
new TemplateQueryDecorator(pmTemplate, new ElasticSearchQuery("trec"))));
experiments.add(Experiment.create(base).withDecorator(geneDecorator));
new TemplateQueryDecorator(boostTemplate, new ElasticSearchQuery("trec"))));

ExperimentsBuilder builder = new ExperimentsBuilder();

builder.newExperiment().withId("topics2017-pmid").withDecorator(baselineDecorator);
builder.newExperiment().withId("topics2017-pmid").withDecorator(geneDecorator);

Set<Experiment> experiments = builder.build();

for (Experiment exp : experiments) {
exp.start();
Expand Down
22 changes: 9 additions & 13 deletions src/main/java/at/medunigraz/imi/bst/trec/RunnerDemo.java
Original file line number Diff line number Diff line change
@@ -1,36 +1,32 @@
package at.medunigraz.imi.bst.trec;

import java.io.File;
import java.util.HashSet;
import java.util.Set;

import at.medunigraz.imi.bst.trec.experiment.Experiment;
import at.medunigraz.imi.bst.trec.model.Gene;
import at.medunigraz.imi.bst.trec.experiment.ExperimentsBuilder;
import at.medunigraz.imi.bst.trec.query.ElasticSearchQuery;
import at.medunigraz.imi.bst.trec.query.Query;
import at.medunigraz.imi.bst.trec.query.TemplateQueryDecorator;
import at.medunigraz.imi.bst.trec.query.WordRemovalQueryDecorator;

public class RunnerDemo {
public static void main(String[] args) {
Set<Experiment> bestExperiments = new HashSet<>();


public static void main(String[] args) {
final File pmTemplate = new File(RunnerDemo.class.getResource("/templates/boost-extra.json").getFile());
Gene.Field[] expandTo = { Gene.Field.SYMBOL, Gene.Field.DESCRIPTION };
Query pmDecorator = new WordRemovalQueryDecorator(
new TemplateQueryDecorator(pmTemplate, new ElasticSearchQuery("trec")));

bestExperiments.add(Experiment.create().withId("example-pmid").withDecorator(pmDecorator));
bestExperiments.add(Experiment.create().withId("extra-pmid").withDecorator(pmDecorator));
bestExperiments.add(Experiment.create().withId("topics2017-pmid").withDecorator(pmDecorator));


final File ctTemplate = new File(RunnerDemo.class.getResource("/templates/baseline-ct.json").getFile());
Query ctDecorator = new TemplateQueryDecorator(ctTemplate, new ElasticSearchQuery("clinicaltrials"));

bestExperiments.add(Experiment.create().withId("extra-ct").withDecorator(ctDecorator));
ExperimentsBuilder builder = new ExperimentsBuilder();

builder.newExperiment().withId("example-pmid").withDecorator(pmDecorator);
builder.newExperiment().withId("extra-pmid").withDecorator(pmDecorator);
builder.newExperiment().withId("topics2017-pmid").withDecorator(pmDecorator);
builder.newExperiment().withId("extra-ct").withDecorator(ctDecorator);

Set<Experiment> bestExperiments = builder.build();

for (Experiment exp : bestExperiments) {
exp.start();
Expand Down
43 changes: 20 additions & 23 deletions src/main/java/at/medunigraz/imi/bst/trec/experiment/Experiment.java
Original file line number Diff line number Diff line change
Expand Up @@ -25,31 +25,10 @@ public class Experiment extends Thread {
private String id;
private Query decorator;

private Experiment() {
}

public static Experiment create() {
return new Experiment();
}

public static Experiment create(Experiment base) {
return new Experiment().withId(base.id).withDecorator(base.decorator);
}

public Experiment withId(String id) {
this.id = id;
return this;
}

public Experiment withDecorator(Query decorator) {
this.decorator = decorator;
return this;
}

@Override
public void run() {
final String collection = id.substring(0, id.indexOf('-'));

final String name = id + " with decorator " + decorator.getName();

LOG.info("Running collection " + name + "...");
Expand Down Expand Up @@ -84,7 +63,25 @@ public void run() {
csw.write(te.getMetrics());
csw.close();

LOG.info("Collection " + name + " finished. NDCG: " + te.getNDCG());
LOG.info("Got NDCG: " + te.getNDCG() + " for collection " + name);
LOG.trace(te.getMetricsByTopic("all"));
}

public void setExperimentId(String id) {
this.id = id;
}

public void setDecorator(Query decorator) {
this.decorator = decorator;
}

public String getExperimentId() {
return id;
}

public Query getDecorator() {
return decorator;
}


}
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
package at.medunigraz.imi.bst.trec.experiment;

import java.util.HashSet;
import java.util.Set;

import at.medunigraz.imi.bst.trec.query.Query;

public class ExperimentsBuilder {

private Set<Experiment> experiments = new HashSet<>();

private Experiment buildingExp = null;

public ExperimentsBuilder() {
}

public ExperimentsBuilder newExperiment() {
addBuilding();
buildingExp = new Experiment();
return this;
}

public ExperimentsBuilder newExperiment(Experiment base) {
buildingExp = new Experiment();
buildingExp.setExperimentId(base.getExperimentId());
buildingExp.setDecorator(base.getDecorator());
return this;
}

public ExperimentsBuilder withId(String id) {
buildingExp.setExperimentId(id);
return this;
}

public ExperimentsBuilder withDecorator(Query decorator) {
buildingExp.setDecorator(decorator);
return this;
}

public Set<Experiment> build() {
addBuilding();
return experiments;
}

private void addBuilding() {
if (buildingExp != null) {
this.experiments.add(buildingExp);
}
}
}

0 comments on commit 901433f

Please sign in to comment.