//Dstl (c) Crown Copyright 2017
package uk.gov.dstl.baleen.annotators.coreference.impl.enhanchers;
import static org.junit.Assert.assertEquals;
import java.util.Collections;
import org.apache.uima.fit.factory.ExternalResourceFactory;
import org.apache.uima.jcas.JCas;
import org.apache.uima.resource.ExternalResourceDescription;
import org.junit.BeforeClass;
import org.junit.Test;
import uk.gov.dstl.baleen.annotators.coreference.impl.data.Mention;
import uk.gov.dstl.baleen.annotators.coreference.impl.enhancers.GenderEnhancer;
import uk.gov.dstl.baleen.resources.SharedGenderMultiplicityResource;
import uk.gov.dstl.baleen.resources.data.Gender;
import uk.gov.dstl.baleen.types.common.Nationality;
import uk.gov.dstl.baleen.types.common.Organisation;
import uk.gov.dstl.baleen.types.common.Person;
import uk.gov.dstl.baleen.types.language.WordToken;
import uk.gov.dstl.baleen.uima.testing.JCasSingleton;
public class GenderEnhancerTest {
static SharedGenderMultiplicityResource genderResource;
static GenderEnhancer genderEnhancer;
static JCas jCas;
@BeforeClass
public static void setup() throws Exception{
ExternalResourceDescription erd = ExternalResourceFactory.createExternalResourceDescription("gender", SharedGenderMultiplicityResource.class);
genderResource = new SharedGenderMultiplicityResource();
genderResource.initialize(erd.getResourceSpecifier(), Collections.emptyMap());
genderEnhancer = new GenderEnhancer(genderResource);
jCas = JCasSingleton.getJCasInstance();
}
@Test
public void testGenderFromTitle(){
assertEquals(Gender.M, GenderEnhancer.getGenderFromTitle("MR"));
assertEquals(Gender.M, GenderEnhancer.getGenderFromTitle("Sir"));
assertEquals(Gender.M, GenderEnhancer.getGenderFromTitle("lOrD"));
assertEquals(Gender.M, GenderEnhancer.getGenderFromTitle("king"));
assertEquals(Gender.M, GenderEnhancer.getGenderFromTitle("Colonel Sir"));
assertEquals(Gender.F, GenderEnhancer.getGenderFromTitle("MRS"));
assertEquals(Gender.F, GenderEnhancer.getGenderFromTitle("Dame"));
assertEquals(Gender.F, GenderEnhancer.getGenderFromTitle("lAdY"));
assertEquals(Gender.F, GenderEnhancer.getGenderFromTitle("queen"));
assertEquals(Gender.F, GenderEnhancer.getGenderFromTitle("Dr Revd Dame"));
assertEquals(Gender.UNKNOWN, GenderEnhancer.getGenderFromTitle("Dr"));
assertEquals(Gender.UNKNOWN, GenderEnhancer.getGenderFromTitle(""));
assertEquals(Gender.UNKNOWN, GenderEnhancer.getGenderFromTitle("Dr Revd"));
assertEquals(Gender.UNKNOWN, GenderEnhancer.getGenderFromTitle(null));
}
@Test
public void testEnhancePerson(){
Person p = new Person(jCas);
p.setValue("Sir Lancelot");
p.setTitle("Sir");
Mention m = new Mention(p);
genderEnhancer.enhance(m);
assertEquals(Gender.M, m.getGender());
}
@Test
public void testEnhanceNationality(){
Nationality n = new Nationality(jCas);
n.setValue("British");
Mention m = new Mention(n);
genderEnhancer.enhance(m);
assertEquals(Gender.UNKNOWN, m.getGender());
}
@Test
public void testEnhanceOrganisation(){
Organisation o = new Organisation(jCas);
o.setValue("British Government");
Mention m = new Mention(o);
genderEnhancer.enhance(m);
assertEquals(Gender.N, m.getGender());
}
@Test
public void testEnhancePronoun(){
jCas.setDocumentText("He went to London");
WordToken wt = new WordToken(jCas, 0, 2);
Mention m = new Mention(wt);
genderEnhancer.enhance(m);
assertEquals(Gender.M, m.getGender());
}
}