package FOM;
import java.util.ArrayList;
import CFM.CorrelationFunction;
import java.util.Iterator;
import Util.DTMatrix;
public class ContextVectors<E> extends DTMatrix<E> implements Iterable<E>{
/**
* Costruttore
* @param terms lista di termini di interesse
*/
public ContextVectors(ArrayList<E> terms){
super(terms.size());
this.terms = terms;
for(E term: this.terms)
setValue(term,1);
}
public void setMembership(E term, E context, double membership){
setValue(term, context, membership);
}
/**
* @brief iteratore sui termini
*
* @return
*/
public ArrayList<E> getConcepts(){
ArrayList<E> filteredConcepts = new ArrayList<E>();
for(E concept: terms)
if(getValue(concept) >= 0)
filteredConcepts.add(concept);
return filteredConcepts;
}
public ArrayList<E> getTerms(){
return terms;
}
public Iterator<E> iterator(){
return getConcepts().iterator();
}
/**
* @brief restituisce la correlazione fra due termini dati
*
* @param classTerm
* @param term
*
* @return
*/
public double getMembership(E classTerm, E term){
return getValue(classTerm, term);
}
/**
* Elimina un concetto candidato, settando a -1 la sua membership
* @param concept
*/
public void deleteConcept(E concept){
setValue(concept, -1);
}
public void normalizeMemberships(){
int i;
ArrayList<E> concepts = getConcepts();
double min = 100000, max = -100000;
for(E concept: concepts){
i = terms.indexOf(concept);
for(int j = 0; j < this.values[i].length - 1; j++){
if(values[i][j] < min) min = values[i][j];
if(values[i][j] > max) max = values[i][j];
}
}
for(E concept: concepts){
i = terms.indexOf(concept);
for(int j = 0; j < this.values[i].length - 1; j++){
values[i][j] = (values[i][j]- min)/(max - min);
}
}
}
public String toString(){
String toRet = "";
for(E t1: terms){
toRet += (t1 + ": ");
for(E t2: terms)
toRet += (getValue(t1, t2) + "\t");
toRet += "\n";
}
return toRet;
}
}