public double minScore() { return (numDocs == 0) ? 0.0 : this.results[numDocs-1].getScore(); }
/** * Returns the score of the specified index. * @param i * @return */ public double getScore(int i) { assert(i < numDocs); return results[i].getScore(); }
/** * Returns an array of scores in this list as float values. * @return */ public float[] getScoresAsFloat() { if (scores == null) { scores = new float[numDocs]; for (int i = 0; i < numDocs; i++) { scores[i] = (float) results[i].getScore(); } } return scores; }
public double maxScore() { return (numDocs == 0) ? 0.0 : this.results[0].getScore(); }
@Override public int compareTo(SRResult result) { return ((Double)this.score).compareTo(result.getScore()); }
public synchronized void record(KnownSim ks, SRResult estimate) throws IOException { if (estimate == null || Double.isNaN(estimate.getScore()) || Double.isInfinite(estimate.getScore())) { missing++; } else { actual.add(ks.similarity); estimates.add(estimate.getScore()); sucessful++; } write(ks, estimate == null ? "null" : String.valueOf(estimate.getScore())); }
/** * Returns the score for the specified ID, or Double.NaN if not found. * @param id * @return */ public double getScoreForId(int id) { for (int i = 0; i < numDocs(); i++) { if (results[i].id == id) { return results[i].getScore(); } } return Double.NaN; }
@Override public void observe(SRResultList sims, int rank, double y) { for (SRResult sr : sims) { observe(sr.getScore()); } }
public String toString() { StringBuilder builder = new StringBuilder(); for (int i = 0; i < numDocs(); i++) { if (i > 0) builder.append(" "); builder.append( String.format("%d. %d=%.3f", (i+1), results[i].getId(), results[i].getScore()) ); } return builder.toString(); }
@Override public double[][] cosimilarity(String[] rowPhrases, String[] colPhrases) throws DaoException { double[][] cos = new double[rowPhrases.length][colPhrases.length]; for (int i=0; i<rowPhrases.length; i++){ for (int j=0; j<colPhrases.length; j++){ if (rowPhrases[i].equals(colPhrases[j])){ cos[i][j]=normalize(1.0); } else{ cos[i][j]=similarity(rowPhrases[i],colPhrases[j],false).getScore(); } } } return cos; }
/** * Returns this list as a TIntFloatMap. * Note that this does not maintain any order. * @return */ public TIntFloatMap asTroveMap() { TIntFloatHashMap map = new TIntFloatHashMap(); for (int i = 0; i < numDocs; i++) { map.put(results[i].id, (float) results[i].getScore()); } return map; }
@Override public SRResult predictSimilarity(List<SRResult> scores) { double result=0.0; List<Explanation> explanationList = new ArrayList<Explanation>(); for (SRResult score : scores){ result+=score.getScore(); if (score.getExplanations()!=null&&!score.getExplanations().isEmpty()){ explanationList.addAll(score.getExplanations()); } } result/=scores.size(); return new SRResult(-2,result,explanationList); }
@Override public SRResult predictSimilarity(List<SRResult> scores) { if (scores.size()+1!= simlarityCoefficients.size()){ throw new IllegalStateException(); } double weightedScore = simlarityCoefficients.get(0); for (int i=0; i<scores.size(); i++){ double s = scores.get(i) == null ? Double.NaN : scores.get(i).getScore(); if (Double.isNaN(s) || Double.isInfinite(s)) { s = similarityInterpolator.getInterpolatedScore(i); } weightedScore+=(s * simlarityCoefficients.get(i+1)); } return new SRResult(weightedScore); }
@Override public SRResult predictSimilarity(List<SRResult> scores) { if (scores.size()+1!= simlarityCoefficients.size()){ throw new IllegalStateException(); } double weightedScore = simlarityCoefficients.get(0); for (int i=0; i<scores.size(); i++){ double s = scores.get(i) == null ? Double.NaN : scores.get(i).getScore(); if (Double.isNaN(s) || Double.isInfinite(s)) { s = similarityInterpolator.getInterpolatedScore(i); } weightedScore+=(s * simlarityCoefficients.get(i+1)); } return new SRResult(weightedScore); }
@Override public double[][] cosimilarity(int[] wpRowIds, int[] wpColIds) throws DaoException { double[][] cos = new double[wpRowIds.length][wpColIds.length]; for (int i=0; i<wpRowIds.length; i++){ for (int j=0; j<wpColIds.length; j++){ if (wpRowIds[i]==wpColIds[j]){ cos[i][j]=normalize(1.0); } else{ cos[i][j]=similarity(wpRowIds[i], wpColIds[j], false).getScore(); } } } return cos; }
@Override public double[][] cosimilarity(int[] ids) throws DaoException { double[][] cos = new double[ids.length][ids.length]; for (int i=0; i<ids.length; i++){ cos[i][i]=normalize(1.0); } for (int i=0; i<ids.length; i++){ for (int j=i+1; j<ids.length; j++){ cos[i][j]=similarity(ids[i], ids[j], false).getScore(); cos[j][i]=cos[i][j]; } } return cos; }
@Override public void observe(SRResultList sims, int rank, double y) { if (rank >= 0) { observe(sims.get(rank).getScore(), y); } else { observe(Double.NaN, y); } }
public void call(KnownSim ks) throws IOException, DaoException { ks.maybeSwap(); SRResult sim = metric.similarity(ks.phrase1, ks.phrase2, false); trainee.observe(sim == null ? Double.NaN : sim.getScore(), ks.similarity); } }, 100);
@Override public SRResult similarity(String phrase1, String phrase2, boolean explanations) throws DaoException { double sum = 0.0; double divisor = 0.0; for (SubMetric m : metrics) { SRResult r = m.metric.similarity(phrase1, phrase2, false); if (r != null && r.isValid()) { sum += m.coefficient * r.getScore(); divisor += m.coefficient; } } return new SRResult((divisor > 0) ? (sum / divisor) : Double.NaN); }
@Override public SRResult similarity(int pageId1, int pageId2, boolean explanations) throws DaoException { // TODO: Handle explanations double sum = 0.0; double divisor = 0.0; for (SubMetric m : metrics) { SRResult r = m.metric.similarity(pageId1, pageId2, false); if (r != null && r.isValid()) { sum += m.coefficient * r.getScore(); divisor += m.coefficient; } } return new SRResult((divisor > 0) ? (sum / divisor) : Double.NaN); }