public double getScore(PhraseTableEntry entry) { double totalscore = 0; for(Feature feat:entry.getFeatures()) totalscore=totalscore+feat.score; return totalscore; }
public double getScore(PhraseTableEntry entry) { double totalscore = 0; for(Feature feat:entry.getFeatures()) totalscore=totalscore+feat.score; return totalscore; }
@Override public Object next() { final PhraseTableEntry next = baseIter.next(); Feature[] scores = next.getFeatures(); //for (TranslationRanker ranker : rankers) { // double factor = ranker.score(next, entity); // scores = rescore(scores, factor, ranker.getName()); // } return new PhraseTableEntryImpl(next.getForeign(), next.getTranslation(), scores,entity); }
private PhraseTableEntry concatPhraseTableEntries(PhraseTableEntry e1, PhraseTableEntry e2, String srcLabel) { // sum values of features double[] newScores = new double[e1.getFeatures().length]; Feature[] f1 = e1.getFeatures(); Feature[] f2 = e2.getFeatures(); for (int i = 0; i < e1.getFeatures().length; i++) { newScores[i] = f1[i].score + f2[i].score; } Feature[] newFeatures = toFeatures(newScores); // combine foreign and translation labels //Label newForeign = new StringLabel(e1.getForeign().asString() + "" + e2.getForeign().asString(), srcLang); Label newTranslation = new StringLabel(e1.getTranslation().asString() + " " + e2.getTranslation().asString(), trgLang); return new PhraseTableEntryImpl(new StringLabel(srcLabel, srcLang), newTranslation, newFeatures, null); }
private IntArrayTranslationOption convert(PhraseTableEntry pte) { Sequence<IString> foreignSequence = new SimpleSequence<IString>(IStrings.toIStringArray(getTokens(pte.getForeign()))); Sequence<IString> translationSequence = new SimpleSequence<IString>(IStrings.toIStringArray(getTokens(pte.getTranslation()))); float[] scores = new float[scoreNames.size()]; if(scores.length != scoreNames.size()) { Messages.warning("Number of elements in phrase table not equal to feature name count"); } for (int i = 0; i < scores.length; i++) { if(i < scoreNames.size() && pte.getFeatures()[i].name.equals(scoreNames.get(i))) { scores[i] = (float) pte.getFeatures()[i].score; } else { for(int j = 0; j < scoreNames.size(); j++) { if(pte.getFeatures()[i].name.equals(scoreNames.get(j))) { scores[j] = (float) pte.getFeatures()[i].score; } } } } PhraseAlignment alignment = null; if (pte instanceof AlignedPhraseTableEntry && ((AlignedPhraseTableEntry) pte).getAlignments() instanceof PhraseAlignment) { alignment = (PhraseAlignment) ((AlignedPhraseTableEntry) pte).getAlignments(); } return convert(foreignSequence, translationSequence, alignment, scores); }
@Override public List<TranslationOption<IString>> getTranslationOptions(Sequence<IString> sequence) { if (ptMap == null) { throw new IllegalArgumentException("phrase table is not set"); } RawSequence<IString> rawForeign = new RawSequence<IString>(sequence); List<TranslationOption<IString>> transOpts = new ArrayList<TranslationOption<IString>>(); final String foreignStr = sequence.toString(" "); final List<PhraseTableEntry> ptSection = ptMap.get(foreignStr); if(ptSection == null) { return transOpts; } for (PhraseTableEntry pte : ptSection) { final Feature[] f = pte.getFeatures(); for(int i = 0; i < f.length; i++) { if(Double.isInfinite(f[i].score) || Double.isNaN(f[i].score)) { Messages.warning("Bad feature value score: " + f[i].name); } } // System.err.println(pte.getForeign().asString() + " -> " + pte.getTranslation().asString() + " " + Arrays.toString(pte.getFeatures())); final IntArrayTranslationOption intTransOpt = convert(pte); RawSequence<IString> translation = new RawSequence<IString>( intTransOpt.translation, IString.identityIndex()); transOpts.add(new TranslationOption<IString>(intTransOpt.id, intTransOpt.scores, getScoreNames(pte), translation, rawForeign, intTransOpt.alignment)); } return transOpts; }
public double aveTranslationCount(Translation translation, double minProb) { final TranslationSource source = getSource(translation.getSourceLabel().getLanguage(), translation.getTargetLabel().getLanguage()); if (source == null) { return 0.0; } final double p = Math.log(minProb); final List<String> tokens = getTokens(translation.getSourceLabel()); int transCt = 0; for (String token : tokens) { final PhraseTable candidates = source.candidates(new ChunkImpl(token)); for (PhraseTableEntry entry : candidates) { if (entry.getFeatures()[2].score >= p) { transCt++; } } } return (double) transCt / tokens.size(); }
final double[] wts = convertWeights(pte.getFeatures(), featureNames); final PhraseTranslation translation = new PhraseTranslation(trg.p, wts); if (!pt.containsKey(src)) {