package ruc.irm.similarity.word.cilin;
import java.util.Set;
import ruc.irm.similarity.Similaritable;
public class Cilin implements Similaritable {
private static Cilin instance = null;
public static Cilin getInstance(){
if(instance == null){
instance = new Cilin();
}
return instance;
}
private Cilin(){
}
@Override
public double getSimilarity(String item1, String item2) {
double sim = 0.0;
if(item1==null && item2==null){
return 1.0;
}else if(item1==null || item2==null){
return 0.0;
}else if(item1.equalsIgnoreCase(item2)){
return 1.0;
}
Set<String> codeSet1 = CilinDb.getInstance().getCilinCoding(item1);
Set<String> codeSet2 = CilinDb.getInstance().getCilinCoding(item2);
if(codeSet1==null || codeSet2==null){
return 0.0;
}
for(String code1:codeSet1){
for(String code2:codeSet2){
double s = getSimilarityByCode(code1, code2);
System.out.println(code1 + "-" + code2 + "-" +CilinCoding.calculateCommonWeight(code1, code2));
if(sim<s) sim = s;
}
}
return sim;
}
public double getSimilarityByCode(String code1, String code2){
return CilinCoding.calculateCommonWeight(code1, code2)/CilinCoding.TOTAL_WEIGHT;
}
}