package edu.stanford.nlp.parser.lexparser; import java.util.Collections; import java.util.List; import edu.stanford.nlp.ling.HasWord; import edu.stanford.nlp.ling.TaggedWord; import edu.stanford.nlp.parser.metrics.Eval; import edu.stanford.nlp.tagger.maxent.MaxentTagger; import edu.stanford.nlp.trees.Tree; /** * Gives a score to a Tree based on how well it matches the output of * a tagger. * * @author John Bauer */ public class TaggerReranker implements Reranker { MaxentTagger tagger; Options op; double weight = -1.0; public TaggerReranker(MaxentTagger tagger, Options op) { this.tagger = tagger; this.op = op; } public RerankerQuery process(List<? extends HasWord> sentence) { return new Query(tagger.tagSentence(sentence)); } public List<Eval> getEvals() { return Collections.emptyList(); } public class Query implements RerankerQuery { final List<TaggedWord> tagged; public Query(List<TaggedWord> tagged) { this.tagged = tagged; } public double score(Tree tree) { List<TaggedWord> yield = tree.taggedYield(); int wrong = 0; int len = Math.min(yield.size(), tagged.size()); for (int i = 0; i < len; ++i) { String yieldTag = op.langpack().basicCategory(yield.get(i).tag()); if (!yieldTag.equals(tagged.get(i).tag())) { wrong++; } } return wrong * weight; } } private static final long serialVersionUID = 1; }