package edu.isi.karma.cleaning; import java.util.Vector; public class Program implements GrammarTreeNode { public Vector<Partition> partitions = new Vector<Partition>(); public String cls = ""; public double score = 0.0; public PartitionClassifierType classifier; public Program(Vector<Partition> pars) { this.partitions = pars; for(int i=0;i<this.partitions.size();i++) { this.partitions.get(i).setLabel("attr_"+i); if(ConfigParameters.debug == 1) System.out.println(this.partitions.get(i).toString()); } if(partitions.size()>1) this.learnClassifier(); } public void learnClassifier() { PartitionClassifier pcf = new PartitionClassifier(); //PartitionClassifierType classifier= pcf.create(this.partitions); PartitionClassifierType classifier= pcf.create2(this.partitions); this.classifier = classifier; // this.cls = pcf.clssettingString; //this.cls = "x"; // for(Partition p:this.partitions) // { // p.cls = this.cls; // } } public double getScore() { double r = score; this.score = 0.0; return r; } public String toProgram() { if(this.partitions.size()>1) { String res = "switch(["; for(Partition p:this.partitions) { String r = String.format("(getClass(\"%s\",value)[1:7]==%s,%s)",p.cls,p.label,p.toProgram()); res += r+","; score += p.getScore(); } score = score/this.partitions.size(); res = res.substring(0,res.length()-1); res += "])"; return res; } else { String s = partitions.get(0).toProgram(); score = this.partitions.get(0).getScore(); return s; } } public ProgramRule toProgram1() { ProgramRule pr = new ProgramRule(this); if(this.partitions.size()>1) { for(Partition p:this.partitions) { if(p.tarNodes.get(0).size() == 0) { pr.addRule(p.label, "substr(value,0,0)"); continue; } String rule = p.toProgram(); if(rule.contains("null")) return null; pr.addRule(p.label, rule); if(ConfigParameters.debug == 1) System.out.println(pr.getStringRule(p.label)); score += p.getScore(); } score = score/this.partitions.size(); return pr; } else { if(partitions.size() <= 0) { return null; } if(partitions.get(0).tarNodes.get(0).size() ==0) { pr.addRule(partitions.get(0).label, "substr(value,0,0)"); return pr; } String s = partitions.get(0).toProgram(); if(s.contains("null")) return null; if(ConfigParameters.debug == 1) System.out.println(""+s); score = this.partitions.get(0).getScore(); pr.addRule(partitions.get(0).label, s); return pr; } } public String toString() { String resString = ""; for(Partition p:this.partitions) { resString = p.toString()+"\n"; } return resString; } public GrammarTreeNode mergewith(GrammarTreeNode a) { // TODO Auto-generated method stub return null; } public String getNodeType() { return "program"; } public String getrepString() { return "Program"; } @Override public void createTotalOrderVector() { // TODO Auto-generated method stub } @Override public void emptyState() { // TODO Auto-generated method stub } public long size() { long size = 0; for(Partition p:partitions) { size += p.size(); } return size; } }