/* * Copyright (C) 2015 Adrien Guille <adrien.guille@univ-lyon2.fr> * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ package main.java.fr.ericlab.sondy.algo.eventdetection.mabed; import java.io.Serializable; import java.util.ArrayList; import java.util.HashMap; import java.util.Map; /** * * @author Adrien GUILLE, ERIC Lab, University of Lyon 2 * @email adrien.guille@univ-lyon2.fr */ public class MABEDEvent implements Comparable<MABEDEvent>, Serializable { public String mainTerm; public MABEDWeightedTermList relatedTerms; public MABEDTimeInterval I; public double score; public ArrayList<Double> anomaly; public MABEDEvent(){ mainTerm = "noMainTerm"; score = 0; relatedTerms = new MABEDWeightedTermList(); anomaly = new ArrayList<>(); } public MABEDEvent(String t, MABEDTimeInterval tI, double s){ mainTerm = t; I = tI; score = s; relatedTerms = new MABEDWeightedTermList(); anomaly = new ArrayList<>(); } public MABEDEvent(String t, MABEDTimeInterval tI, double s, ArrayList a){ mainTerm = t; I = tI; score = s; relatedTerms = new MABEDWeightedTermList(); anomaly = a; } public void setMainTerm(String t){ mainTerm = t; } public Map<String,Object> getMainTermAttributes(){ HashMap<String,Object> map = new HashMap<>(); map.put("ui.class","mainTerm"); map.put("ui.color",1); map.put("ui.color",1); map.put("I", I.timeSliceA+":"+I.timeSliceB); map.put("score",score); return map; } public MABEDEvent merge(MABEDEvent t){ MABEDEvent t1 = new MABEDEvent(this.mainTerm+", "+t.mainTerm, this.I, this.score); for(MABEDWeightedTerm wt : this.relatedTerms.list){ if(!t1.contains(wt.term)){ t1.relatedTerms.add(wt); } } for(MABEDWeightedTerm wt : t.relatedTerms.list){ if(!t1.contains(wt.term)){ t1.relatedTerms.add(wt); } } return t1; } public MABEDEvent merge(MABEDEventList tl){ MABEDEvent t1 = new MABEDEvent("",this.I,this.score,this.anomaly); String mT = this.mainTerm; for(MABEDEvent t : tl.list){ mT += ", "+t.mainTerm; } t1.setMainTerm(mT); for(MABEDEvent t : tl.list){ for(MABEDWeightedTerm wt : t.relatedTerms.list){ if(!t1.contains(wt.term)){ t1.relatedTerms.add(wt); } } } for(MABEDWeightedTerm wt : this.relatedTerms.list){ if(!t1.contains(wt.term)){ t1.relatedTerms.add(wt); } } return t1; } public String toString(boolean printI){ String str = ""; if(printI){ str = "["+I.toString()+"] "; } str += mainTerm+"("+score+"): "; for(MABEDWeightedTerm wt : relatedTerms.list){ str += wt.term+"("+wt.weight+") "; } return str; } public String intervalAsString(String lang){ return ""; } public boolean contains(String term){ return this.mainTerm.contains(term) || containsrelatedTerm(term); } public boolean containsrelatedTerm(String term){ for(MABEDWeightedTerm wt : relatedTerms.list){ if(wt.term.equals(term)){ return true; } } return false; } public String relatedTermAsList(){ String st = ""; for(MABEDWeightedTerm wt : relatedTerms.list){ st += wt.term+" "; } return st; } public String anomalyToString(){ String string = "["; for(double d : anomaly){ string += d+","; } string = string.substring(0,string.length()); return string+"]"; } @Override public int compareTo(MABEDEvent o) { if((o.score - this.score) == 0){ return 0; }else{ if(this.score > o.score){ return -1; }else{ return 1; } } } }