//Dstl (c) Crown Copyright 2017 package uk.gov.dstl.baleen.annotators.relations; import static org.junit.Assert.assertEquals; import org.apache.uima.UIMAException; import org.apache.uima.fit.util.JCasUtil; import org.junit.Test; import uk.gov.dstl.baleen.annotators.testing.AbstractAnnotatorTest; import uk.gov.dstl.baleen.types.common.Money; import uk.gov.dstl.baleen.types.common.Person; import uk.gov.dstl.baleen.types.language.PhraseChunk; import uk.gov.dstl.baleen.types.semantic.Relation; import uk.gov.dstl.baleen.types.semantic.Temporal; public class NPVNPTest extends AbstractAnnotatorTest{ public NPVNPTest() { super(NPVNP.class); } @Test public void test1() throws UIMAException{ createPOS(); Person person = new Person(jCas, 0, 2); //He person.addToIndexes(); Money money = new Money(jCas, 59, 71); //$1.8 billion money.addToIndexes(); Temporal date = new Temporal(jCas, 75, 84); //September date.addToIndexes(); processJCas(); assertEquals(2, JCasUtil.select(jCas, Relation.class).size()); Relation r1 = JCasUtil.selectByIndex(jCas, Relation.class, 0); assertEquals("reckons", r1.getValue()); assertEquals(person, r1.getSource()); assertEquals("uk.gov.dstl.baleen.types.semantic.Entity", r1.getTarget().getTypeName()); assertEquals("the current account deficit", r1.getTarget().getCoveredText()); Relation r2 = JCasUtil.selectByIndex(jCas, Relation.class, 1); assertEquals("will narrow to", r2.getValue()); assertEquals("uk.gov.dstl.baleen.types.semantic.Entity", r2.getSource().getTypeName()); assertEquals("the current account deficit", r2.getSource().getCoveredText()); assertEquals(money, r2.getTarget()); } @Test public void test2() throws UIMAException{ createPOS(); Person person = new Person(jCas, 0, 1); //H person.addToIndexes(); Money money = new Money(jCas, 59, 71); //$1.8 billion money.addToIndexes(); Temporal date = new Temporal(jCas, 75, 84); //September date.addToIndexes(); processJCas(); assertEquals(2, JCasUtil.select(jCas, Relation.class).size()); Relation r1 = JCasUtil.selectByIndex(jCas, Relation.class, 0); assertEquals("reckons", r1.getValue()); assertEquals(person, r1.getSource()); assertEquals("uk.gov.dstl.baleen.types.semantic.Entity", r1.getTarget().getTypeName()); assertEquals("the current account deficit", r1.getTarget().getCoveredText()); Relation r2 = JCasUtil.selectByIndex(jCas, Relation.class, 1); assertEquals("will narrow to", r2.getValue()); assertEquals("uk.gov.dstl.baleen.types.semantic.Entity", r2.getSource().getTypeName()); assertEquals("the current account deficit", r2.getSource().getCoveredText()); assertEquals(money, r2.getTarget()); } @Test public void test3() throws UIMAException{ createPOS(); Person person = new Person(jCas, 0, 2); //He person.addToIndexes(); Money money = new Money(jCas, 54, 71); //only $1.8 billion money.addToIndexes(); Temporal date = new Temporal(jCas, 75, 84); //September date.addToIndexes(); processJCas(); assertEquals(2, JCasUtil.select(jCas, Relation.class).size()); Relation r1 = JCasUtil.selectByIndex(jCas, Relation.class, 0); assertEquals("reckons", r1.getValue()); assertEquals(person, r1.getSource()); assertEquals("uk.gov.dstl.baleen.types.semantic.Entity", r1.getTarget().getTypeName()); assertEquals("the current account deficit", r1.getTarget().getCoveredText()); Relation r2 = JCasUtil.selectByIndex(jCas, Relation.class, 1); assertEquals("will narrow to", r2.getValue()); assertEquals("uk.gov.dstl.baleen.types.semantic.Entity", r2.getSource().getTypeName()); assertEquals("the current account deficit", r2.getSource().getCoveredText()); assertEquals(money, r2.getTarget()); } @Test public void test4() throws UIMAException{ createPOS(); Person person = new Person(jCas, 0, 2); //He person.addToIndexes(); Money money = new Money(jCas, 59, 71); //$1.8 billion money.addToIndexes(); Temporal date = new Temporal(jCas, 75, 84); //September date.addToIndexes(); processJCas(NPVNP.PARAM_ONLY_EXISTING, true); assertEquals(0, JCasUtil.select(jCas, Relation.class).size()); } @Test public void trimPunctuation(){ assertEquals("hello", NPVNP.trimPunctuation(", hello")); assertEquals("hello", NPVNP.trimPunctuation("hello)")); assertEquals("hello", NPVNP.trimPunctuation(", hello)")); assertEquals("012abc", NPVNP.trimPunctuation("012abc")); } private void createPOS(){ jCas.setDocumentText("He reckons the current account deficit will narrow to only $1.8 billion in September."); PhraseChunk np1 = new PhraseChunk(jCas, 0, 2); //He np1.setChunkType("NP"); np1.addToIndexes(); PhraseChunk vp1 = new PhraseChunk(jCas, 3, 10); //reckons vp1.setChunkType("VP"); vp1.addToIndexes(); PhraseChunk np2 = new PhraseChunk(jCas, 11, 38); //the current account deficit np2.setChunkType("NP"); np2.addToIndexes(); PhraseChunk vp2 = new PhraseChunk(jCas, 39, 50); //will narrow vp2.setChunkType("VP"); vp2.addToIndexes(); PhraseChunk pp1 = new PhraseChunk(jCas, 51, 53); //to pp1.setChunkType("PP"); pp1.addToIndexes(); PhraseChunk np3 = new PhraseChunk(jCas, 54, 71); //only $1.8 billion np3.setChunkType("NP"); np3.addToIndexes(); PhraseChunk pp2 = new PhraseChunk(jCas, 72, 74); //in pp2.setChunkType("PP"); pp2.addToIndexes(); PhraseChunk np4 = new PhraseChunk(jCas, 75, 84); //September np4.setChunkType("NP"); np4.addToIndexes(); } }