//Los comentarios se refieren a cambios respecto lo visto en clase
//Para dar por buena la clase habria que sustituirlos por los comentarios de documentación,
//y quizás alguno de explicación de código.
//Además de someterla a toda clase de test para descubrir debilidades y corregirlas.
package edu.ehu.gtts.gbg.babel;
import java.io.*;
import java.util.*;
public class Language {
private String id;
private String descriptor;
private Map<Character, Double> histogram=new TreeMap<>();
public String getId() {return id;}
public String getDescriptor() {return descriptor;}
public Language(String id, String descriptor, String fileName) throws FileNotFoundException, IOException {
this.id = id;
this.descriptor = descriptor;
int NumCharacters=0;
BufferedReader br=new BufferedReader(new FileReader(fileName));
String line;
while ((line=br.readLine())!=null) {
line=line.trim();
if (line.length()==0) continue;
//Aquí hacíamos un filtrado que pensándolo mejor es inadecuado,
//porque el uso de espacios y signos de puntuación aporta información sobre el idioma
//ponía: linea=linea.replaceAll("[^a-zA-Z]", "");
//Los resultados ahora coinciden con el enunciado.
for (int i=0; i<line.length();i++) {
char c=line.charAt(i);
Character oc=new Character(c);
histogram.put(oc,new Double(histogram.get(oc)==null?1:histogram.get(oc)+1));
NumCharacters++;
}
}
for ( Character key : histogram.keySet() )
histogram.put(key, new Double(histogram.get(key)/NumCharacters));
br.close();
}
@Override //me limito a devolver el descriptor
public String toString() {
return descriptor;
}
public static double similarity(Language a, Language b){
if (a==null || b==null) throw new IllegalArgumentException();
double similarity=0;
for ( Character key : a.histogram.keySet() )
similarity+=Math.min(a.histogram.get(key),b.histogram.get(key)==null?0:b.histogram.get(key));
return similarity;
}
// public static void main(String[] args) throws IOException{
// Language spn=new Language("spn","spn","udhr/txt/spn.txt");
// Language gln=new Language("gln","gln","udhr/txt/gln.txt");
// Language cln=new Language("cln","cln","udhr/txt/cln.txt");
// Language bsq=new Language("bsq","bsq","udhr/txt/bsq.txt");
// System.out.println("spn gln "+Language.similarity(spn, gln));
// System.out.println("spn cln "+Language.similarity(spn, cln));
// System.out.println("spn bsq "+Language.similarity(spn, bsq));
// }
}