//Dstl (c) Crown Copyright 2017
package uk.gov.dstl.baleen.annotators.misc;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import org.apache.uima.UIMAException;
import org.apache.uima.jcas.JCas;
import org.junit.Test;
import uk.gov.dstl.baleen.annotators.misc.GenericWeapon;
import uk.gov.dstl.baleen.annotators.testing.AbstractAnnotatorTest;
import uk.gov.dstl.baleen.annotators.testing.types.TestWeapon;
import uk.gov.dstl.baleen.types.language.Sentence;
import uk.gov.dstl.baleen.types.language.WordToken;
import uk.gov.dstl.baleen.types.military.Weapon;
public class GenericWeaponTest extends AbstractAnnotatorTest {
public GenericWeaponTest(){
super(GenericWeapon.class);
}
@Test
public void testSingleWeapon() throws UIMAException{
jCas.setDocumentText("Natalie had a tactical assault rifle hidden in her cupboard.");
createSentences(jCas);
createWordTokens(jCas);
processJCas();
assertAnnotations(1, Weapon.class, new TestWeapon(0, "tactical assault rifle", "FIREARM"));
}
@Test
public void testMultipleWeapon() throws UIMAException{
jCas.setDocumentText("Jose had a combat knife and chemical weapons.");
createSentences(jCas);
createWordTokens(jCas);
processJCas();
assertAnnotations(2, Weapon.class,
new TestWeapon(0, "combat knife", "BLADED"),
new TestWeapon(1, "chemical weapons", "OTHER"));
}
@Test
public void testPlural() throws UIMAException{
jCas.setDocumentText("He was found with six flamethrowers and 47 bullets.");
createSentences(jCas);
createWordTokens(jCas);
processJCas();
assertAnnotations(2, Weapon.class,
new TestWeapon(0, "flamethrowers", "OTHER"),
new TestWeapon(1, "bullets", "AMMUNITION"));
}
@Test
public void testNoDescriptor() throws UIMAException{
jCas.setDocumentText("Sam owned a gun.");
createSentences(jCas);
createWordTokens(jCas);
processJCas();
assertAnnotations(1, Weapon.class, new TestWeapon(0, "gun", "FIREARM"));
}
@Test
public void testMultipleSentences() throws UIMAException{
jCas.setDocumentText("It was combat. Rifles everywhere. A silenced pistol in his hand.");
createSentences(jCas);
createWordTokens(jCas);
processJCas();
assertAnnotations(2, Weapon.class, new TestWeapon(0, "Rifles", "FIREARM"), new TestWeapon(1, "silenced pistol", "FIREARM"));
}
private void createSentences(JCas jCas){
Pattern p = Pattern.compile("[^ ].*?\\.");
Matcher m = p.matcher(jCas.getDocumentText());
while(m.find()){
new Sentence(jCas, m.start(), m.end()).addToIndexes();
}
}
private void createWordTokens(JCas jCas){
Pattern p = Pattern.compile("[A-Za-z]+");
Matcher m = p.matcher(jCas.getDocumentText());
while(m.find()){
new WordToken(jCas, m.start(), m.end()).addToIndexes();
}
}
}