/*******************************************************************************
* Copyright 2015-2016 - CNRS (Centre National de Recherche Scientifique)
*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*
*******************************************************************************/
package eu.project.ttc.test.unit.engines;
import java.io.FileInputStream;
import org.apache.uima.analysis_engine.AnalysisEngine;
import org.apache.uima.analysis_engine.AnalysisEngineDescription;
import org.apache.uima.fit.factory.AnalysisEngineFactory;
import org.apache.uima.fit.factory.ExternalResourceFactory;
import org.apache.uima.fit.factory.JCasFactory;
import org.apache.uima.jcas.JCas;
import org.apache.uima.resource.ExternalResourceDescription;
import org.junit.Before;
import org.junit.Test;
import eu.project.ttc.engines.FixedExpressionSpotter;
import eu.project.ttc.readers.TermSuiteJsonCasDeserializer;
import eu.project.ttc.resources.FixedExpressionResource;
import eu.project.ttc.test.TermSuiteAssertions;
import eu.project.ttc.types.FixedExpression;
import eu.project.ttc.types.TermOccAnnotation;
import eu.project.ttc.types.WordAnnotation;
public class FixedExpressionSpotterSpec {
private static final String CAS_URL = "src/test/resources/org/project/ttc/test/termsuite/json/cas/french-cas1.json";
JCas cas;
@Before
public void set() throws Exception {
cas = JCasFactory.createJCas();
TermSuiteJsonCasDeserializer.deserialize(new FileInputStream(CAS_URL), cas.getCas());
}
private AnalysisEngine makeAE(boolean removeWordAnnotationFromCas, boolean removeTermOccAnnotationFromCas) throws Exception {
AnalysisEngineDescription aeDesc = AnalysisEngineFactory.createEngineDescription(
FixedExpressionSpotter.class,
FixedExpressionSpotter.FIXED_EXPRESSION_MAX_SIZE, 5,
FixedExpressionSpotter.REMOVE_WORD_ANNOTATIONS_FROM_CAS, removeWordAnnotationFromCas,
FixedExpressionSpotter.REMOVE_TERM_OCC_ANNOTATIONS_FROM_CAS, removeTermOccAnnotationFromCas
);
/*
* The term index resource
*/
ExternalResourceDescription fixedExpressionDesc = ExternalResourceFactory.createExternalResourceDescription(
FixedExpressionResource.FIXED_EXPRESSION_RESOURCE,
FixedExpressionResource.class,
"file:org/project/ttc/test/resources/french-fixed-expressions.txt"
);
ExternalResourceFactory.bindResource(aeDesc, fixedExpressionDesc);
AnalysisEngine ae = AnalysisEngineFactory.createEngine(aeDesc);
return ae;
}
@Test
public void testNoRemove() throws Exception {
AnalysisEngine ae = makeAE(false, false);
TermSuiteAssertions.assertThat(cas)
.doesNotContainAnnotation(FixedExpression.class)
.containsAnnotation(WordAnnotation.class, 0, 8)
.containsAnnotation(WordAnnotation.class, 9, 11)
.containsAnnotation(WordAnnotation.class, 12, 20)
.containsAnnotation(WordAnnotation.class, 21, 24)
.containsAnnotation(WordAnnotation.class, 25, 28)
.containsAnnotation(WordAnnotation.class, 29, 36)
.containsAnnotation(WordAnnotation.class, 37, 39)
.containsAnnotation(WordAnnotation.class, 39,42)
.containsAnnotation(TermOccAnnotation.class, 0, 20)
.containsAnnotation(TermOccAnnotation.class, 0, 8)
.containsAnnotation(TermOccAnnotation.class, 12, 20)
.containsAnnotation(TermOccAnnotation.class, 29, 42)
.containsAnnotation(TermOccAnnotation.class, 29, 36)
.containsAnnotation(TermOccAnnotation.class, 39, 42)
;
ae.process(cas);
TermSuiteAssertions.assertThat(cas)
.containsAnnotation(FixedExpression.class,29 , 42)
.containsAnnotation(WordAnnotation.class, 0, 8)
.containsAnnotation(WordAnnotation.class, 9, 11)
.containsAnnotation(WordAnnotation.class, 12, 20)
.containsAnnotation(WordAnnotation.class, 21, 24)
.containsAnnotation(WordAnnotation.class, 25, 28)
.containsAnnotation(WordAnnotation.class, 29, 36)
.containsAnnotation(WordAnnotation.class, 37, 39)
.containsAnnotation(WordAnnotation.class, 39,42)
.containsAnnotation(TermOccAnnotation.class, 0, 20)
.containsAnnotation(TermOccAnnotation.class, 0, 8)
.containsAnnotation(TermOccAnnotation.class, 12, 20)
.containsAnnotation(TermOccAnnotation.class, 29, 42)
.containsAnnotation(TermOccAnnotation.class, 29, 36)
.containsAnnotation(TermOccAnnotation.class, 39, 42)
;
}
@Test
public void testRemoveTermOcc() throws Exception {
AnalysisEngine ae = makeAE(false, true);
TermSuiteAssertions.assertThat(cas)
.doesNotContainAnnotation(FixedExpression.class)
.containsAnnotation(WordAnnotation.class, 0, 8)
.containsAnnotation(WordAnnotation.class, 9, 11)
.containsAnnotation(WordAnnotation.class, 12, 20)
.containsAnnotation(WordAnnotation.class, 21, 24)
.containsAnnotation(WordAnnotation.class, 25, 28)
.containsAnnotation(WordAnnotation.class, 29, 36)
.containsAnnotation(WordAnnotation.class, 37, 39)
.containsAnnotation(WordAnnotation.class, 39,42)
.containsAnnotation(TermOccAnnotation.class, 0, 20)
.containsAnnotation(TermOccAnnotation.class, 0, 8)
.containsAnnotation(TermOccAnnotation.class, 12, 20)
.containsAnnotation(TermOccAnnotation.class, 29, 42)
.containsAnnotation(TermOccAnnotation.class, 29, 36)
.containsAnnotation(TermOccAnnotation.class, 39, 42)
;
ae.process(cas);
TermSuiteAssertions.assertThat(cas)
.containsAnnotation(FixedExpression.class, 29, 42)
.containsAnnotation(WordAnnotation.class, 0, 8)
.containsAnnotation(WordAnnotation.class, 9, 11)
.containsAnnotation(WordAnnotation.class, 12, 20)
.containsAnnotation(WordAnnotation.class, 21, 24)
.containsAnnotation(WordAnnotation.class, 25, 28)
.containsAnnotation(WordAnnotation.class, 29, 36)
.containsAnnotation(WordAnnotation.class, 37, 39)
.containsAnnotation(WordAnnotation.class, 39,42)
.containsAnnotation(TermOccAnnotation.class, 0, 20)
.containsAnnotation(TermOccAnnotation.class, 0, 8)
.containsAnnotation(TermOccAnnotation.class, 12, 20)
.containsAnnotation(TermOccAnnotation.class, 29, 42)
.doesNotContainAnnotation(TermOccAnnotation.class, 29, 36)
.doesNotContainAnnotation(TermOccAnnotation.class, 39, 42)
;
}
@Test
public void testRemoveWord() throws Exception {
AnalysisEngine ae = makeAE(true, false);
TermSuiteAssertions.assertThat(cas)
.doesNotContainAnnotation(FixedExpression.class)
.containsAnnotation(WordAnnotation.class, 0, 8)
.containsAnnotation(WordAnnotation.class, 9, 11)
.containsAnnotation(WordAnnotation.class, 12, 20)
.containsAnnotation(WordAnnotation.class, 21, 24)
.containsAnnotation(WordAnnotation.class, 25, 28)
.containsAnnotation(WordAnnotation.class, 29, 36)
.containsAnnotation(WordAnnotation.class, 37, 39)
.containsAnnotation(WordAnnotation.class, 39,42)
.containsAnnotation(TermOccAnnotation.class, 0, 20)
.containsAnnotation(TermOccAnnotation.class, 0, 8)
.containsAnnotation(TermOccAnnotation.class, 12, 20)
.containsAnnotation(TermOccAnnotation.class, 29, 42)
.containsAnnotation(TermOccAnnotation.class, 29, 36)
.containsAnnotation(TermOccAnnotation.class, 39, 42)
;
ae.process(cas);
TermSuiteAssertions.assertThat(cas)
.containsAnnotation(FixedExpression.class, 29, 42)
.containsAnnotation(WordAnnotation.class, 0, 8)
.containsAnnotation(WordAnnotation.class, 9, 11)
.containsAnnotation(WordAnnotation.class, 12, 20)
.containsAnnotation(WordAnnotation.class, 21, 24)
.containsAnnotation(WordAnnotation.class, 25, 28)
.doesNotContainAnnotation(WordAnnotation.class, 29, 36)
.doesNotContainAnnotation(WordAnnotation.class, 37, 39)
.doesNotContainAnnotation(WordAnnotation.class, 39,42)
.containsAnnotation(TermOccAnnotation.class, 0, 20)
.containsAnnotation(TermOccAnnotation.class, 0, 8)
.containsAnnotation(TermOccAnnotation.class, 12, 20)
.containsAnnotation(TermOccAnnotation.class, 29, 42)
.containsAnnotation(TermOccAnnotation.class, 29, 36)
.containsAnnotation(TermOccAnnotation.class, 39, 42)
;
}
@Test
public void testRemoveTermOccAndWord() throws Exception {
AnalysisEngine ae = makeAE(true, true);
TermSuiteAssertions.assertThat(cas)
.doesNotContainAnnotation(FixedExpression.class)
.containsAnnotation(WordAnnotation.class, 0, 8)
.containsAnnotation(WordAnnotation.class, 9, 11)
.containsAnnotation(WordAnnotation.class, 12, 20)
.containsAnnotation(WordAnnotation.class, 21, 24)
.containsAnnotation(WordAnnotation.class, 25, 28)
.containsAnnotation(WordAnnotation.class, 29, 36)
.containsAnnotation(WordAnnotation.class, 37, 39)
.containsAnnotation(WordAnnotation.class, 39,42)
.containsAnnotation(TermOccAnnotation.class, 0, 20)
.containsAnnotation(TermOccAnnotation.class, 0, 8)
.containsAnnotation(TermOccAnnotation.class, 12, 20)
.containsAnnotation(TermOccAnnotation.class, 29, 42)
.containsAnnotation(TermOccAnnotation.class, 29, 36)
.containsAnnotation(TermOccAnnotation.class, 39, 42)
;
ae.process(cas);
TermSuiteAssertions.assertThat(cas)
.containsAnnotation(FixedExpression.class, 29, 42)
.containsAnnotation(WordAnnotation.class, 0, 8)
.containsAnnotation(WordAnnotation.class, 9, 11)
.containsAnnotation(WordAnnotation.class, 12, 20)
.containsAnnotation(WordAnnotation.class, 21, 24)
.containsAnnotation(WordAnnotation.class, 25, 28)
.doesNotContainAnnotation(WordAnnotation.class, 29, 36)
.doesNotContainAnnotation(WordAnnotation.class, 37, 39)
.doesNotContainAnnotation(WordAnnotation.class, 39,42)
.containsAnnotation(TermOccAnnotation.class, 0, 20)
.containsAnnotation(TermOccAnnotation.class, 0, 8)
.containsAnnotation(TermOccAnnotation.class, 12, 20)
.containsAnnotation(TermOccAnnotation.class, 29, 42)
.doesNotContainAnnotation(TermOccAnnotation.class, 29, 36)
.doesNotContainAnnotation(TermOccAnnotation.class, 39, 42)
;
}
}