@Override public SRResult similarity(String phrase1, String phrase2, boolean explanations) throws DaoException { if (resolvePhrases) { return super.similarity(phrase1, phrase2, explanations); } List<SRResult> scores = new ArrayList<SRResult>(); for (SRMetric metric : metrics){ scores.add(metric.similarity(phrase1,phrase2,explanations)); } return normalize(ensemble.predictSimilarity(scores)); }
@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; }
@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 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 SRResult similarity(String phrase1, String phrase2, boolean explanations) throws DaoException { Language language = getLanguage(); List<LocalString> phrases = Arrays.asList( new LocalString(language, phrase1), new LocalString(language, phrase2)); // debugSimilarityDisambiguator(phrases); List<LocalId> resolutions = disambiguator.disambiguateTop(phrases, null); if (resolutions.get(0) == null || resolutions.get(1) == null) { return new SRResult(); } // LocalPage lp1 = localPageDao.getById(language, resolutions.get(0).getId()); // LocalPage lp2 = localPageDao.getById(language, resolutions.get(1).getId()); // System.out.println("resolved " + phrase1 + ", " + phrase2 + " to " + lp1 + ", " + lp2); return similarity(resolutions.get(0).getId(), resolutions.get(1).getId(), explanations); }
@Override public SRResult similarity(String phrase1, String phrase2, boolean explanations) throws DaoException { if (featureFilter != null) { throw new UnsupportedOperationException(); } TIntFloatMap vector1 = null; TIntFloatMap vector2 = null; // try using phrases directly try { vector1 = generator.getVector(phrase1); vector2 = generator.getVector(phrase2); } catch (UnsupportedOperationException e) { // try using other methods } if (vector1 == null || vector2 == null) { return super.similarity(phrase1, phrase2, explanations); } else { SRResult result= new SRResult(similarity.similarity(vector1, vector2)); if(explanations) { result.setExplanations(generator.getExplanations(phrase1, phrase2, vector1, vector2, result)); } return normalize(result); } }
@Override public SRResult similarity(String phrase1, String phrase2, boolean explanations) throws DaoException { float [] vector1 = null; float [] vector2 = null; // try using phrases directly try { vector1 = generator.getVector(phrase1); vector2 = generator.getVector(phrase2); } catch (UnsupportedOperationException e) { // try using other methods } if (vector1 == null || vector2 == null) { return super.similarity(phrase1, phrase2, explanations); } else { SRResult result= new SRResult(SimUtils.cosineSimilarity(vector1, vector2)); if(explanations) { result.setExplanations(generator.getExplanations(phrase1, phrase2, vector1, vector2, result)); } return normalize(result); } }