//Dstl (c) Crown Copyright 2017
package uk.gov.dstl.baleen.annotators.cleaners;
import static org.junit.Assert.assertEquals;
import org.apache.uima.fit.util.JCasUtil;
import org.junit.Test;
import uk.gov.dstl.baleen.annotators.testing.AbstractAnnotatorTest;
import uk.gov.dstl.baleen.annotators.testing.Annotations;
import uk.gov.dstl.baleen.types.common.Person;
import uk.gov.dstl.baleen.types.geo.Coordinate;
import uk.gov.dstl.baleen.types.semantic.Location;
/**
* Test the MergeAdjacent Cleaner
*/
public class MergeAdjacentTest extends AbstractAnnotatorTest {
public MergeAdjacentTest() {
super(MergeAdjacent.class);
}
@Test
public void testNoTypes() throws Exception{
jCas.setDocumentText("John Smith was seen at London King's Cross");
Person p1 = Annotations.createPerson(jCas, 0, 4, "John");
Person p2 = Annotations.createPerson(jCas, 5, 10, "Smith");
Location l1 = Annotations.createLocation(jCas, 23, 29, "London", null);
Location l2 = Annotations.createLocation(jCas, 30, 42, "King's Cross", null);
processJCas();
assertEquals(2, JCasUtil.select(jCas, Person.class).size());
assertEquals(2, JCasUtil.select(jCas, Location.class).size());
assertEquals(p1, JCasUtil.selectByIndex(jCas, Person.class, 0));
assertEquals(p2, JCasUtil.selectByIndex(jCas, Person.class, 1));
assertEquals(l1, JCasUtil.selectByIndex(jCas, Location.class, 0));
assertEquals(l2, JCasUtil.selectByIndex(jCas, Location.class, 1));
}
@Test
public void testSingleTypes() throws Exception{
jCas.setDocumentText("John Smith was seen at London King's Cross");
Annotations.createPerson(jCas, 0, 4, "John");
Annotations.createPerson(jCas, 5, 10, "Smith");
Location l1 = Annotations.createLocation(jCas, 23, 29, "London", null);
Location l2 = Annotations.createLocation(jCas, 30, 42, "King's Cross", null);
processJCas("types", new String[]{"Person"});
assertEquals(1, JCasUtil.select(jCas, Person.class).size());
assertEquals(2, JCasUtil.select(jCas, Location.class).size());
Person p = JCasUtil.selectByIndex(jCas, Person.class, 0);
assertEquals("John Smith", p.getCoveredText());
assertEquals("John Smith", p.getValue());
assertEquals(l1, JCasUtil.selectByIndex(jCas, Location.class, 0));
assertEquals(l2, JCasUtil.selectByIndex(jCas, Location.class, 1));
}
@Test
public void testMultipleTypes() throws Exception{
jCas.setDocumentText("John Smith was seen at London King's Cross");
Annotations.createPerson(jCas, 0, 4, "John");
Annotations.createPerson(jCas, 5, 10, "Smith");
Annotations.createLocation(jCas, 23, 29, "London", null);
Annotations.createLocation(jCas, 30, 42, "King's Cross", null);
processJCas("types", new String[]{"Person","Location"});
assertEquals(1, JCasUtil.select(jCas, Person.class).size());
assertEquals(1, JCasUtil.select(jCas, Location.class).size());
Person p = JCasUtil.selectByIndex(jCas, Person.class, 0);
assertEquals("John Smith", p.getCoveredText());
assertEquals("John Smith", p.getValue());
Location l = JCasUtil.selectByIndex(jCas, Location.class, 0);
assertEquals("London King's Cross", l.getCoveredText());
assertEquals("London King's Cross", l.getValue());
}
@Test
public void testMultipleAdjacentTypes() throws Exception{
jCas.setDocumentText("John Smith London King's Cross");
Annotations.createPerson(jCas, 0, 4, "John");
Annotations.createPerson(jCas, 5, 10, "Smith");
Annotations.createLocation(jCas, 11, 17, "London", null);
Annotations.createLocation(jCas, 18, 30, "King's Cross", null);
processJCas("types", new String[]{"Person","Location"});
assertEquals(1, JCasUtil.select(jCas, Person.class).size());
assertEquals(1, JCasUtil.select(jCas, Location.class).size());
Person p = JCasUtil.selectByIndex(jCas, Person.class, 0);
assertEquals("John Smith", p.getCoveredText());
assertEquals("John Smith", p.getValue());
Location l = JCasUtil.selectByIndex(jCas, Location.class, 0);
assertEquals("London King's Cross", l.getCoveredText());
assertEquals("London King's Cross", l.getValue());
}
@Test
public void testSubTypes() throws Exception{
jCas.setDocumentText("John Smith was seen at London King's Cross 30N 15E");
Annotations.createLocation(jCas, 23, 29, "London", null);
Annotations.createLocation(jCas, 30, 42, "King's Cross", null);
Annotations.createCoordinate(jCas, 43, 46, "30N");
Annotations.createCoordinate(jCas, 47, 50, "15E");
processJCas("types", new String[]{"Location"});
assertEquals(3, JCasUtil.select(jCas, Location.class).size()); //1 + 2
assertEquals(2, JCasUtil.select(jCas, Coordinate.class).size());
Location l = JCasUtil.selectByIndex(jCas, Location.class, 0);
assertEquals("London King's Cross", l.getCoveredText());
assertEquals("London King's Cross", l.getValue());
Coordinate c1 = JCasUtil.selectByIndex(jCas, Coordinate.class, 0);
assertEquals("30N", c1.getCoveredText());
assertEquals("30N", c1.getValue());
Coordinate c2 = JCasUtil.selectByIndex(jCas, Coordinate.class, 1);
assertEquals("15E", c2.getCoveredText());
assertEquals("15E", c2.getValue());
}
@Test
public void testSubTypesMultiple() throws Exception{
jCas.setDocumentText("John Smith was seen at London King's Cross 30N 15E");
Annotations.createLocation(jCas, 23, 29, "London", null);
Annotations.createLocation(jCas, 30, 42, "King's Cross", null);
Annotations.createCoordinate(jCas, 43, 46, "30N");
Annotations.createCoordinate(jCas, 47, 50, "15E");
processJCas("types", new String[]{"Location", "Coordinate"});
assertEquals(2, JCasUtil.select(jCas, Location.class).size()); //1 + 1
assertEquals(1, JCasUtil.select(jCas, Coordinate.class).size());
Location l = JCasUtil.selectByIndex(jCas, Location.class, 0);
assertEquals("London King's Cross", l.getCoveredText());
assertEquals("London King's Cross", l.getValue());
Coordinate c = JCasUtil.selectByIndex(jCas, Coordinate.class, 0);
assertEquals("30N 15E", c.getCoveredText());
assertEquals("30N 15E", c.getValue());
}
@Test
public void testSeparator() throws Exception{
jCas.setDocumentText("John Smith was seen at London\tKing's Cross");
Annotations.createPerson(jCas, 0, 4, "John");
Annotations.createPerson(jCas, 8, 13, "Smith");
Annotations.createLocation(jCas, 26, 32, "London", null);
Annotations.createLocation(jCas, 33, 45, "King's Cross", null);
processJCas("types", new String[]{"Person","Location"});
assertEquals(1, JCasUtil.select(jCas, Person.class).size());
assertEquals(1, JCasUtil.select(jCas, Location.class).size());
Person p = JCasUtil.selectByIndex(jCas, Person.class, 0);
assertEquals("John Smith", p.getCoveredText());
assertEquals("John Smith", p.getValue());
Location l = JCasUtil.selectByIndex(jCas, Location.class, 0);
assertEquals("London\tKing's Cross", l.getCoveredText());
assertEquals("London\tKing's Cross", l.getValue());
}
}