use of de.tudarmstadt.ukp.clarin.webanno.api.annotation.adapter.RelationOverlapBehavior in project webanno by webanno.
the class RelationRendererTest method thatRelationOverlapBehaviorOnRenderGeneratesErrors.
@Test
public void thatRelationOverlapBehaviorOnRenderGeneratesErrors() throws Exception {
TokenBuilder<Token, Sentence> builder = new TokenBuilder<>(Token.class, Sentence.class);
builder.buildTokens(jcas, "This is a test .\nThis is sentence two .");
for (Token t : select(jcas, Token.class)) {
POS pos = new POS(jcas, t.getBegin(), t.getEnd());
t.setPos(pos);
pos.addToIndexes();
}
RelationAdapter adapter = new RelationAdapter(layerSupportRegistry, featureSupportRegistry, null, depLayer, FEAT_REL_TARGET, FEAT_REL_SOURCE, () -> asList(dependencyLayerGovernor, dependencyLayerDependent), behaviors);
List<POS> posAnnotations = new ArrayList<>(select(jcas, POS.class));
POS source = posAnnotations.get(0);
POS target = posAnnotations.get(1);
RelationRenderer sut = new RelationRenderer(adapter, layerSupportRegistry, featureSupportRegistry, asList(new RelationOverlapBehavior()));
// Create two annotations stacked annotations
depLayer.setOverlapMode(ANY_OVERLAP);
AnnotationFS dep1 = adapter.add(document, username, source, target, jcas.getCas());
AnnotationFS dep2 = adapter.add(document, username, source, target, jcas.getCas());
{
depLayer.setOverlapMode(ANY_OVERLAP);
VDocument vdoc = new VDocument();
sut.render(jcas.getCas(), asList(), vdoc, 0, jcas.getDocumentText().length());
assertThat(vdoc.comments()).filteredOn(c -> !YIELD.equals(c.getCommentType())).isEmpty();
}
{
depLayer.setOverlapMode(STACKING_ONLY);
VDocument vdoc = new VDocument();
sut.render(jcas.getCas(), asList(), vdoc, 0, jcas.getDocumentText().length());
assertThat(vdoc.comments()).filteredOn(c -> !YIELD.equals(c.getCommentType())).isEmpty();
}
{
depLayer.setOverlapMode(OVERLAP_ONLY);
VDocument vdoc = new VDocument();
sut.render(jcas.getCas(), asList(), vdoc, 0, jcas.getDocumentText().length());
assertThat(vdoc.comments()).filteredOn(c -> !YIELD.equals(c.getCommentType())).usingFieldByFieldElementComparator().contains(new VComment(dep1, ERROR, "Stacking is not permitted."), new VComment(dep2, ERROR, "Stacking is not permitted."));
}
{
depLayer.setOverlapMode(NO_OVERLAP);
VDocument vdoc = new VDocument();
sut.render(jcas.getCas(), asList(), vdoc, 0, jcas.getDocumentText().length());
assertThat(vdoc.comments()).filteredOn(c -> !YIELD.equals(c.getCommentType())).usingFieldByFieldElementComparator().contains(new VComment(dep1, ERROR, "Stacking is not permitted."), new VComment(dep2, ERROR, "Stacking is not permitted."));
}
// Remove the stacked annotation and introduce one that is purely overlapping
adapter.delete(document, username, jcas.getCas(), new VID(dep2));
depLayer.setOverlapMode(ANY_OVERLAP);
AnnotationFS dep3 = adapter.add(document, username, source, posAnnotations.get(2), jcas.getCas());
{
depLayer.setOverlapMode(NO_OVERLAP);
VDocument vdoc = new VDocument();
sut.render(jcas.getCas(), asList(), vdoc, 0, jcas.getDocumentText().length());
assertThat(vdoc.comments()).filteredOn(c -> !YIELD.equals(c.getCommentType())).usingFieldByFieldElementComparator().contains(new VComment(dep1, ERROR, "Overlap is not permitted."), new VComment(dep3, ERROR, "Overlap is not permitted."));
}
}
use of de.tudarmstadt.ukp.clarin.webanno.api.annotation.adapter.RelationOverlapBehavior in project webanno by webanno.
the class RelationRendererTest method setup.
@Before
public void setup() throws Exception {
if (jcas == null) {
jcas = JCasFactory.createJCas();
} else {
jcas.reset();
}
username = "user";
project = new Project();
project.setId(1l);
project.setMode(PROJECT_TYPE_ANNOTATION);
document = new SourceDocument();
document.setId(1l);
document.setProject(project);
// Set up annotation schema with POS and Dependency
AnnotationLayer tokenLayer = new AnnotationLayer(Token.class.getName(), "Token", SPAN_TYPE, project, true, SINGLE_TOKEN, NO_OVERLAP);
tokenLayer.setId(1l);
AnnotationFeature tokenLayerPos = new AnnotationFeature(1l, tokenLayer, "pos", POS.class.getName());
AnnotationLayer posLayer = new AnnotationLayer(POS.class.getName(), "POS", SPAN_TYPE, project, true, SINGLE_TOKEN, NO_OVERLAP);
posLayer.setId(2l);
depLayer = new AnnotationLayer(Dependency.class.getName(), "Dependency", RELATION_TYPE, project, true, SINGLE_TOKEN, OVERLAP_ONLY);
depLayer.setId(3l);
depLayer.setAttachType(tokenLayer);
depLayer.setAttachFeature(tokenLayerPos);
dependencyLayerGovernor = new AnnotationFeature(2l, depLayer, "Governor", Token.class.getName());
dependencyLayerDependent = new AnnotationFeature(3l, depLayer, "Dependent", Token.class.getName());
featureSupportRegistry = new FeatureSupportRegistryImpl(asList());
layerSupportRegistry = new LayerSupportRegistryImpl(asList());
behaviors = asList(new RelationAttachmentBehavior(), new RelationOverlapBehavior(), new RelationCrossSentenceBehavior());
}
Aggregations