All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.nlp2rdf.bean.NIFBean Maven / Gradle / Ivy

There is a newer version: 0.4.1
Show newest version
package org.nlp2rdf.bean;

import com.google.common.hash.Hashing;
import org.nlp2rdf.validator.NIFBeanContextValidator;
import org.nlp2rdf.validator.NIFBeanNumbersValidator;
import org.nlp2rdf.validator.NIFMessagesException;

import java.util.*;

public class NIFBean implements NIFMessagesException {

    private NIFContext context;

    private String annotator;

    private String mention;

    private Integer beginIndex;

    private Integer endIndex;

    private NIFType nifType = NIFType.ENTITY;

    private List types;

    private Double score;

    private String taIdentRef;

    private List taClassRef;

    private String referenceContext;

    private String referenceContextId;

    public String getReferenceContextId() {
        return referenceContextId;
    }

    private Map entityTypes = new HashMap(8);

    public NIFBean(List builders) {

        List nifBeans = new ArrayList<>();

        builders.forEach(builder -> nifBeans.add(new NIFBean(builder)));
    }

    public List getTaClassRef() {
        return taClassRef;
    }

    public NIFBean(NIFBeanBuilder builder) {
        init();
        setNifType(builder.nifType);
        setContext(builder.context);
        setMention(builder.mention);
        setBeginIndex(builder.beginIndex);
        setEndIndex(builder.endIndex);
        setTypes(builder.types);
        setScore(builder.score);
        setTaIdentRef(builder.taIdentRef);
        setReferenceContext(builder.referenceContext);
        setAnnotator(builder.annotator);
        setTaClassRef(builder.taClassRef);
    }

    public static void validate(List beans) {

        NIFBeanNumbersValidator.checkIfEndIndexIsGreaterThanBeginIndex(beans);
        NIFBeanContextValidator.checkIfContextExists(beans);
        NIFBeanContextValidator.checkIfHasDuplicatedContext(beans);

    }

    public static void fillBeansWithContext(List beans, String CONTEXT_FORMAT) {

        Optional context = beans.stream().filter(bean -> NIFType.CONTEXT.equals(bean.getNifType())).findFirst();

        if (context.isPresent()) {
            beans.forEach(bean -> bean.setReferenceContext(context.get().getContext().context(CONTEXT_FORMAT)));
        }
    }

    public Double getScore() {
        return score;
    }

    public void setScore(Double score) {
        this.score = score;
    }

    private void init() {
        entityTypes.put("PERSON", "http://nerd.eurecom.fr/ontology#Person");
        entityTypes.put("ORGANIZATION", "http://nerd.eurecom.fr/ontology#Organization");
        entityTypes.put("LOCATION", "http://nerd.eurecom.fr/ontology#Location");
        entityTypes.put("MISC", "http://www.w3.org/2002/07/owl#Thing");
        entityTypes.put("I-PER", "http://nerd.eurecom.fr/ontology#Person");
        entityTypes.put("I-ORG", "http://nerd.eurecom.fr/ontology#Organization");
        entityTypes.put("I-LOC", "http://nerd.eurecom.fr/ontology#Location");
        entityTypes.put("I-MISC", "http://www.w3.org/2002/07/owl#Thing");
    }

    public Boolean hasTypes() {
        return types != null && !types.isEmpty();
    }

    public Boolean hasTaClassRef() {
        return taClassRef != null && !taClassRef.isEmpty();
    }

    public Boolean hasTaIdentRef() {
        return taIdentRef != null;
    }

    public Boolean hasScore() {
        return score != null;
    }

    public String getMention() {
        return mention;
    }

    public void setMention(String mention) {
        Objects.requireNonNull(mention, String.format(NIF_DATA_VALUE_NOT_NULL, NIF_DATA_MENTION));
        this.mention = mention;
    }

    public Integer getBeginIndex() {
        return beginIndex;
    }

    public void setBeginIndex(Integer beginIndex) {
        if (isMention()) {
            Objects.requireNonNull(beginIndex, String.format(NIF_DATA_VALUE_NOT_NULL, NIF_DATA_BEGIN_INDEX));
        }
        this.beginIndex = beginIndex;
    }

    public Integer getEndIndex() {
        return endIndex;
    }

    public void setEndIndex(Integer endIndex) {
        if (isMention()) {
            Objects.requireNonNull(beginIndex, String.format(NIF_DATA_VALUE_NOT_NULL, NIF_DATA_END_INDEX));
        }
        this.endIndex = endIndex;
    }

    public Boolean isMention() {
        return NIFType.ENTITY.equals(nifType);
    }

    public Boolean isContext() {
        return NIFType.CONTEXT.equals(nifType);
    }

    public NIFType getNifType() {
        return nifType;
    }

    public void setNifType(NIFType nifType) {
        this.nifType = nifType;
    }

    public String getTaIdentRef() {
        return taIdentRef;
    }

    public void setTaIdentRef(String taIdentRef) {
        this.taIdentRef = taIdentRef;
    }

    public String getReferenceContext() {
        return referenceContext;
    }

    public void setReferenceContext(String referenceContext) {
        if (referenceContext != null) {
            this.referenceContext = referenceContext;
            this.referenceContextId = Hashing.md5().hashBytes(referenceContext.getBytes()).toString();
        }
    }

    public List getTypes() {
        return types;
    }

    public void setTypes(List types) {
        List convertedTypes = new ArrayList<>();
        if (types != null) {
            types.stream().forEach(type -> {
                if (type != null) {
                    convertedTypes.add(entityTypes.getOrDefault(type, type));
                }
            });
        }
        this.types = convertedTypes;
    }

    public NIFContext getContext() {
        return context;
    }

    public void setContext(NIFContext context) {
        Objects.requireNonNull(context, String.format(NIF_DATA_VALUE_NOT_NULL, NIF_DATA_CONTEXT));
        this.context = context;
    }

    public String getAnnotator() {
        return annotator;
    }

    public void setAnnotator(String annotator) {
        this.annotator = annotator;
    }

    public void setTaClassRef(List taClassRef) {
        this.taClassRef = taClassRef;
    }

    public static class NIFBeanBuilder {

        private String mention;

        private Integer beginIndex;

        private Integer endIndex;

        private NIFType nifType;

        private List types;

        private Double score;

        private String taIdentRef;

        private String referenceContext;

        private String annotator;

        private NIFContext context;

        private List taClassRef;

        public NIFBeanBuilder() {
            init();
        }

        public NIFBeanBuilder init() {

            this.mention = null;
            this.beginIndex = null;
            this.endIndex = null;
            this.nifType = NIFType.ENTITY;
            this.types = null;
            this.score = null;
            this.taIdentRef = null;
            this.context = null;
            this.annotator = null;
            this.taClassRef = null;
            return this;
        }


        public NIFBeanBuilder context(String baseURI, int beginIndex, int endIndex) {
            Objects.requireNonNull(baseURI, String.format(NIF_DATA_VALUE_NOT_NULL, NIF_DATA_BASE_URI));

            assert beginIndex >= 0 : String.format(NIF_DATA_VALUE_NON_NEGATIVE, NIF_DATA_BEGIN_INDEX);
            assert endIndex >= 0 : String.format(NIF_DATA_VALUE_NON_NEGATIVE, NIF_DATA_END_INDEX);
            assert endIndex > beginIndex : String.format(NIF_DATA_VALUE_MUST_BE_GREATER, NIF_DATA_BEGIN_INDEX,
                    NIF_DATA_END_INDEX, NIF_DATA_CONTEXT);

            this.context = new NIFContext(baseURI, beginIndex, endIndex);
            return this;
        }

        public NIFBeanBuilder context(String baseURI) {
            Objects.requireNonNull(baseURI, String.format(NIF_DATA_VALUE_NOT_NULL, NIF_DATA_BASE_URI));

            this.context = new NIFContext(baseURI);
            return this;
        }

        public NIFBeanBuilder taIdentRef(String taIdentRef) {
            Objects.requireNonNull(taIdentRef, String.format(NIF_DATA_VALUE_NOT_NULL, NIF_DATA_TA_REFERENCE));
            this.taIdentRef = taIdentRef;
            return this;
        }

        public NIFBeanBuilder mention(String mention) {
            Objects.requireNonNull(mention, String.format(NIF_DATA_VALUE_NOT_NULL, NIF_DATA_MENTION));
            this.mention = mention;
            return this;
        }

        public NIFBeanBuilder beginIndex(Integer beginIndex) {
            Objects.requireNonNull(beginIndex, String.format(NIF_DATA_VALUE_NOT_NULL, NIF_DATA_BEGIN_INDEX));
            assert beginIndex >= 0 : String.format(NIF_DATA_VALUE_NON_NEGATIVE, NIF_DATA_BEGIN_INDEX);

            this.beginIndex = beginIndex;
            return this;
        }

        public NIFBeanBuilder endIndex(Integer endIndex) {

            Objects.requireNonNull(beginIndex, String.format(NIF_DATA_VALUE_NOT_NULL, NIF_DATA_END_INDEX));
            assert endIndex >= 0 : String.format(NIF_DATA_VALUE_NON_NEGATIVE, NIF_DATA_END_INDEX);

            this.endIndex = endIndex;
            return this;
        }

        public NIFBeanBuilder nifType(NIFType nifType) {

            Objects.requireNonNull(nifType, String.format(NIF_DATA_VALUE_NOT_NULL, NIF_DATA_TYPE));
            this.nifType = nifType;
            return this;
        }

        public NIFBeanBuilder types(List types) {
            this.types = types == null ? new ArrayList<>(1) : types;
            return this;
        }

        public NIFBeanBuilder taClassRef(List taClassRef) {
            this.taClassRef = taClassRef;
            return this;
        }

        public NIFBeanBuilder score(Double score) {
            Objects.requireNonNull(score, String.format(NIF_DATA_VALUE_NOT_NULL, NIF_DATA_SCORE));
            this.score = score;
            return this;
        }

        public NIFBeanBuilder referenceContext(String referenceContext) {
            Objects.requireNonNull(referenceContext, String.format(NIF_DATA_VALUE_NOT_NULL, NIF_DATA_REFERENCE_CONTEXT));
            this.referenceContext = referenceContext;
            return this;
        }

        public NIFBeanBuilder annotator(String annotator) {
            Objects.requireNonNull(annotator, String.format(NIF_DATA_VALUE_NOT_NULL, NIF_DATA_REFERENCE_ANNOTATOR));
            this.annotator = annotator;
            return this;
        }

        public NIFBean build() {
            return new NIFBean(this);
        }

    }

}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy