//Dstl (c) Crown Copyright 2017
package uk.gov.dstl.baleen.annotators.relations.helpers;
import java.util.Collection;
import java.util.List;
import java.util.stream.Stream;
import org.apache.uima.jcas.JCas;
import uk.gov.dstl.baleen.types.language.Interaction;
import uk.gov.dstl.baleen.types.semantic.Entity;
import uk.gov.dstl.baleen.types.semantic.Relation;
/**
* A base class for relationship extractors which use interaction words as a
* trigger.
*
* Implementations should override {@link #extract(JCas) extract}, and
* potentially {@link #preExtract(JCas) preExtract} and
* {@link #postExtract(JCas) postExtract}, which both allow for creation and
* clean up of objects related to extraction.
*
*/
public abstract class AbstractInteractionBasedRelationshipAnnotator extends AbstractRelationshipAnnotator {
/**
* Creates the relation.
*
* @param jCas
* the jcas
* @param interaction
* the interaction
* @param source
* the source the source entity
* @param target
* the target the target entity
* @param confidence
* the confidence
* @return the relation
*/
protected Relation createRelation(final JCas jCas, final Interaction interaction, final Entity source,
final Entity target, Float confidence) {
return createRelation(jCas, source, target, interaction.getBegin(), interaction.getEnd(),
interaction.getRelationshipType(), interaction.getRelationSubType(), interaction.getValue(),
confidence);
}
/**
* Creates the relations of the same type between from all the entities on
* the source list to all the entities on the target list.
*
* @param jCas
* the j cas
* @param interaction
* the interaction
* @param sources
* the sources
* @param targets
* the targets
* @param confidence
* the confidence
* @return the stream of relations
*/
protected Stream<Relation> createPairwiseRelations(final JCas jCas, final Interaction interaction,
final List<Entity> sources, final List<Entity> targets, Float confidence) {
return createPairwiseRelations(jCas, sources, targets, interaction.getBegin(), interaction.getEnd(),
interaction.getRelationshipType(), interaction.getRelationSubType(), interaction.getValue(),
confidence);
}
/**
* Creates the relations between all the entities provided (but not between
* an entity and itself).
*
* @param jCas
* the j cas
* @param interaction
* the interaction
* @param collection
* the collection of entities to related
* @param confidence
* the confidence
* @return the stream of relations
*/
protected Stream<Relation> createMeshedRelations(final JCas jCas, final Interaction interaction,
final Collection<Entity> collection, Float confidence) {
return createMeshedRelations(jCas, collection, interaction.getBegin(), interaction.getEnd(),
interaction.getRelationshipType(), interaction.getRelationSubType(), interaction.getValue(),
confidence);
}
}