//Dstl (c) Crown Copyright 2017
package uk.gov.dstl.baleen.annotators.interaction;
import static org.junit.Assert.assertEquals;
import java.util.ArrayList;
import org.apache.uima.analysis_engine.AnalysisEngineProcessException;
import org.apache.uima.fit.factory.ExternalResourceFactory;
import org.apache.uima.fit.util.JCasUtil;
import org.apache.uima.resource.ExternalResourceDescription;
import org.apache.uima.resource.ResourceInitializationException;
import org.junit.BeforeClass;
import org.junit.Test;
import uk.gov.dstl.baleen.annotators.interactions.AssignTypeToInteraction;
import uk.gov.dstl.baleen.annotators.testing.AbstractAnnotatorTest;
import uk.gov.dstl.baleen.resources.SharedFongoResource;
import uk.gov.dstl.baleen.types.language.Interaction;
import uk.gov.dstl.baleen.types.language.WordToken;
public class AssignTypeToInteractionTest extends AbstractAnnotatorTest {
private static ExternalResourceDescription fongoErd;
public AssignTypeToInteractionTest() {
super(AssignTypeToInteraction.class);
}
@BeforeClass
public static void before() {
fongoErd = ExternalResourceFactory.createExternalResourceDescription("mongo", SharedFongoResource.class,
"fongo.collection", "relationTypes", "fongo.data",
"[ { \"source\": \"uk.gov.dstl.baleen.types.common.Person\", \"target\": \"uk.gov.dstl.baleen.types.semantic.Location\", \"type\": \"noun\", \"subType\": \"attack\", \"pos\": \"NOUN\", \"value\":[ \"attack\", \"attacking\", \"attacked\" ] },"
+ "{ \"source\": \"uk.gov.dstl.baleen.types.common.Person\", \"target\": \"uk.gov.dstl.baleen.types.semantic.Location\", \"type\": \"verb\", \"subType\": \"attack\", \"pos\": \"VERB\", \"value\":[ \"attack\" ] } ]");
}
@Test
public void test() throws AnalysisEngineProcessException, ResourceInitializationException {
configureJCas();
processJCas("mongo", fongoErd);
ArrayList<Interaction> interactions = new ArrayList<>(JCasUtil.select(jCas, Interaction.class));
assertEquals(2, interactions.size());
assertEquals("verb", interactions.get(0).getRelationshipType());
assertEquals("attack", interactions.get(0).getRelationSubType());
assertEquals("noun", interactions.get(1).getRelationshipType());
assertEquals("attack", interactions.get(1).getRelationSubType());
}
@Test
public void testBadAlgo() throws AnalysisEngineProcessException, ResourceInitializationException {
configureJCas();
processJCas("mongo", fongoErd, AssignTypeToInteraction.PARAM_ALGORITHM, "foobar");
ArrayList<Interaction> interactions = new ArrayList<>(JCasUtil.select(jCas, Interaction.class));
assertEquals(2, interactions.size());
assertEquals("verb", interactions.get(0).getRelationshipType());
assertEquals("attack", interactions.get(0).getRelationSubType());
assertEquals("noun", interactions.get(1).getRelationshipType());
assertEquals("attack", interactions.get(1).getRelationSubType());
}
private void configureJCas(){
// THe first attack is a verb, the second is a noun, the third is adjective
String text = "Jim attacked the attack in an attackly manner";
jCas.setDocumentText(text);
Interaction attacked = new Interaction(jCas);
attacked.setBegin(text.indexOf("attacked"));
attacked.setEnd(attacked.getBegin() + "attack".length());
attacked.addToIndexes();
Interaction attack = new Interaction(jCas);
attack.setBegin(text.indexOf("attack", attacked.getEnd()));
attack.setEnd(attack.getBegin() + "attack".length());
attack.addToIndexes();
Interaction attackly = new Interaction(jCas);
attackly.setBegin(text.indexOf("attackly", attacked.getEnd()));
attackly.setEnd(attackly.getBegin() + "attackly".length());
attackly.addToIndexes();
WordToken attackedVerb = new WordToken(jCas);
attackedVerb.setBegin(attacked.getBegin());
attackedVerb.setEnd(attacked.getEnd());
attackedVerb.setPartOfSpeech("VBZ");
attackedVerb.addToIndexes();
WordToken attackNoun = new WordToken(jCas);
attackNoun.setBegin(attack.getBegin());
attackNoun.setEnd(attack.getEnd());
attackNoun.setPartOfSpeech("NNS");
attackNoun.addToIndexes();
WordToken attackAdj = new WordToken(jCas);
attackAdj.setBegin(attackAdj.getBegin());
attackAdj.setEnd(attackAdj.getEnd());
attackAdj.setPartOfSpeech("ADJ");
attackAdj.addToIndexes();
}
}