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

ixa.kaflib.Opinion Maven / Gradle / Ivy

package ixa.kaflib;

import java.util.List;
import java.util.ArrayList;
import java.util.HashMap;
import java.io.Serializable;

/** Class for representing opinions. */
public class Opinion implements Serializable {

    public static class OpinionHolder implements Serializable {
	private String type;
	private Span span;

	OpinionHolder(Span span) {
	    this.span = span;
	}

	OpinionHolder(OpinionHolder oh, HashMap terms) {
	    /* Copy span */
	    Span span = oh.span;
	    List targets = span.getTargets();
	    List copiedTargets = new ArrayList();
	    for (Term term : targets) {
		Term copiedTerm = terms.get(term.getId());
		if (copiedTerm == null) {
		    throw new IllegalStateException("Term not found when copying opinion_holder");
		}
		copiedTargets.add(copiedTerm);
	    }
	    if (span.hasHead()) {
		Term copiedHead = terms.get(span.getHead().getId());
		this.span = new Span(copiedTargets, copiedHead);
	    }
	    else {
		this.span = new Span(copiedTargets);
	    }	    
	}

	public boolean hasType() {
	    return type != null;
	}

	public String getType() {
	    return type;
	}

	public void setType(String type) {
	    this.type = type;
	}

	public List getTerms() {
	    return this.span.getTargets();
	}

	public void addTerm(Term term) {
	    this.span.addTarget(term);
	}

	public void addTerm(Term term, boolean isHead) {
	    this.span.addTarget(term, isHead);
	}

	public Span getSpan() {
	    return this.span;
	}

	public void setSpan(Span span) {
	    this.span = span;
	}
    }

    public static class OpinionTarget implements Serializable {
	private Span span;

	OpinionTarget(Span span) {
	    this.span = span;
	}

	OpinionTarget(OpinionTarget ot, HashMap terms) {
	    /* Copy span */
	    Span span = ot.span;
	    List targets = span.getTargets();
	    List copiedTargets = new ArrayList();
	    for (Term term : targets) {
		Term copiedTerm = terms.get(term.getId());
		if (copiedTerm == null) {
		    throw new IllegalStateException("Term not found when copying opinion_target");
		}
		copiedTargets.add(copiedTerm);
	    }
	    if (span.hasHead()) {
		Term copiedHead = terms.get(span.getHead().getId());
		this.span = new Span(copiedTargets, copiedHead);
	    }
	    else {
		this.span = new Span(copiedTargets);
	    }
	}

	public List getTerms() {
	    return this.span.getTargets();
	}

	public void addTerm(Term term) {
	    this.span.addTarget(term);
	}

	public void addTerm(Term term, boolean isHead) {
	    this.span.addTarget(term, isHead);
	}

	public Span getSpan() {
	    return this.span;
	}

	public void setSpan(Span span) {
	    this.span = span;
	}
    }

    public static class OpinionExpression implements Serializable {
	
	/* Polarity (optional) */
	private String polarity;

	/* Strength (optional) */
	private String strength;

	/* Subjectivity (optional) */
	private String subjectivity;

	/* Sentiment semantic type (optional) */
	private String sentimentSemanticType;
	
	/* Sentiment product feature (optional) */
	private String sentimentProductFeature;

	private Span span;

	OpinionExpression(Span span) {
	    this.span = span;
	}

	OpinionExpression(OpinionExpression oe, HashMap terms) {
	    this.polarity = oe.polarity;
	    this.strength = oe.strength;
	    this.subjectivity = oe.subjectivity;
	    this.sentimentSemanticType = oe.sentimentSemanticType;
	    this.sentimentProductFeature = oe.sentimentProductFeature;
	    /* Copy span */
	    Span span = oe.span;
	    List targets = span.getTargets();
	    List copiedTargets = new ArrayList();
	    for (Term term : targets) {
		Term copiedTerm = terms.get(term.getId());
		if (copiedTerm == null) {
		    throw new IllegalStateException("Term not found when copying opinion_expression");
		}
		copiedTargets.add(copiedTerm);
	    }
	    if (span.hasHead()) {
		Term copiedHead = terms.get(span.getHead().getId());
		this.span = new Span(copiedTargets, copiedHead);
	    }
	    else {
		this.span = new Span(copiedTargets);
	    }
	}

	public boolean hasPolarity() {
	    return (this.polarity != null);
	}

	public String getPolarity() {
	    return polarity;
	}

	public void setPolarity(String polarity) {
	    this.polarity = polarity;
	}

	public boolean hasStrength() {
	    return (this.strength != null);
	}

	public String getStrength() {
	    return strength;
	}

	public void setStrength(String strength) {
	    this.strength = strength;
	}

	public boolean hasSubjectivity() {
	    return (this.subjectivity != null);
	}

	public String getSubjectivity() {
	    return subjectivity;
	}

	public void setSubjectivity(String subjectivity) {
	    this.subjectivity = subjectivity;
	}

	public boolean hasSentimentSemanticType() {
	    return (this.sentimentSemanticType != null);
	}

	public String getSentimentSemanticType() {
	    return sentimentSemanticType;
	}

	public void setSentimentSemanticType(String sentimentSemanticType) {
	    this.sentimentSemanticType = sentimentSemanticType;
	}

	public boolean hasSentimentProductFeature() {
	    return (this.sentimentProductFeature != null);
	}

	public String getSentimentProductFeature() {
	    return sentimentProductFeature;
	}

	public void setSentimentProductFeature(String sentimentProductFeature) {
	    this.sentimentProductFeature = sentimentProductFeature;
	}

	public List getTerms() {
	    return this.span.getTargets();
	}

	public void addTerm(Term term) {
	    this.span.addTarget(term);
	}

	public void addTerm(Term term, boolean isHead) {
	    this.span.addTarget(term, isHead);
	}

	public Span getSpan() {
	    return this.span;
	}

	public void setSpan(Span span) {
	    this.span = span;
	}
    }
    
    private String id;

    private OpinionHolder opinionHolder;

    private OpinionTarget opinionTarget;

    private OpinionExpression opinionExpression;


    Opinion(String id) {
	this.id = id;
    }

    Opinion(Opinion opinion, HashMap terms) {
	this.id = opinion.id;
	if (opinion.opinionHolder != null) {
	    this.opinionHolder = new OpinionHolder(opinion.opinionHolder, terms);
	}
	if (opinion.opinionTarget != null) {
	    this.opinionTarget = new OpinionTarget(opinion.opinionTarget, terms);
	}
	if (opinion.opinionExpression != null) {
	    this.opinionExpression = new OpinionExpression(opinion.opinionExpression, terms);
	}
    }

    public String getId() {
	return this.id;
    }

    void setId(String id) {
	this.id = id;
    }

    public boolean hasOpinionHolder() {
	return opinionHolder != null;
    }

    public boolean hasOpinionTarget() {
	return opinionTarget != null;
    }

    public boolean hasOpinionExpression() {
	return opinionExpression != null;
    }

    public OpinionHolder getOpinionHolder() {
	return opinionHolder;
    }

    public OpinionTarget getOpinionTarget() {
	return opinionTarget;
    }

    public OpinionExpression getOpinionExpression() {
	return opinionExpression;
    }

    public OpinionHolder createOpinionHolder(Span span) {
	this.opinionHolder = new Opinion.OpinionHolder(span);
	return this.opinionHolder;
    }

    public OpinionTarget createOpinionTarget(Span span) {
	this.opinionTarget = new Opinion.OpinionTarget(span);
	return this.opinionTarget;
    }

    public OpinionExpression createOpinionExpression(Span span) {
	this.opinionExpression = new Opinion.OpinionExpression(span);
	return this.opinionExpression;
    }

    public String getSpanStr(Span span) {
	String str = "";
	for (Term term : span.getTargets()) {
	    if (!str.isEmpty()) {
		str += " ";
	    }
	    str += term.getStr();
	}
	return str;
    }

    public String getStr() {
	return getSpanStr(this.getOpinionExpression().getSpan());
    }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy