@Override public TIntFloatMap getVector(int pageId) throws DaoException { SRResultList mostSimilar = baseMetric.mostSimilar(pageId, numConcepts, conceptIds); if (mostSimilar == null) { return null; } else { return mostSimilar.asTroveMap(); } }
@Override public synchronized void trainMostSimilar(Dataset dataset, int numResults, TIntSet validIds){ if(trainSubmetrics){ inlink.trainMostSimilar(dataset, numResults, validIds); outlink.trainMostSimilar(dataset, numResults, validIds); } super.trainMostSimilar(dataset, numResults, validIds); }
@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 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(int pageId1, int pageId2, boolean explanations) throws DaoException { int count = 0; int links1[] = getLinks(pageId1, true); int links2[] = getLinks(pageId2, true); count += hasLink(links1, pageId2); count += hasLink(links2, pageId1); return new SRResult(normalize(1.0 * count / 2.0)); }
/** * Returns the score of the specified index. * @param i * @return */ public double getScore(int i) { assert(i < numDocs); return results[i].getScore(); }
@Override public synchronized void trainSimilarity(Dataset dataset) throws DaoException { if(trainSubmetrics) { inlink.trainSimilarity(dataset); outlink.trainSimilarity(dataset); } super.trainSimilarity(dataset); }
@Override public SRConfig getConfig() { SRConfig config = new SRConfig(); config.maxScore = 1.1f; config.minScore = 0; return config; }
public SimilarityDisambiguator(PhraseAnalyzer phraseAnalyzer, SRMetric metric) { this.phraseAnalyzer = phraseAnalyzer; this.metric = metric; this.language = metric.getLanguage(); }
@Override public boolean mostSimilarIsTrained() { if (trainSubmetrics) { for (SubMetric m : metrics) if (!m.metric.mostSimilarIsTrained()) return false; } return true; }
/** * Use the language-specific similarity normalizer to normalize a similarity if it exists. * Otherwise use the default similarity normalizer if it's available. * @param sr * @return */ protected SRResult normalize(SRResult sr) { sr.score=normalize(sr.score); return sr; }
@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); }
@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 SRConfig getConfig() { SRConfig config = new SRConfig(); config.maxScore = 1.1f; config.minScore = 0; return config; }