package edu.stanford.nlp.coref.hybrid.sieve; import edu.stanford.nlp.util.logging.Redwood; import java.util.List; import java.util.Properties; import edu.stanford.nlp.coref.data.Dictionaries; import edu.stanford.nlp.coref.data.Document; import edu.stanford.nlp.coref.data.Mention; import edu.stanford.nlp.coref.data.Dictionaries.MentionType; public class OracleSieve extends Sieve { /** A logger for this class */ private static Redwood.RedwoodChannels log = Redwood.channels(OracleSieve.class); private static final long serialVersionUID = 3510248899162246138L; public OracleSieve(Properties props, String sievename) { super(props, sievename); this.classifierType = ClassifierType.ORACLE; } @Override public void findCoreferentAntecedent(Mention m, int mIdx, Document document, Dictionaries dict, Properties props, StringBuilder sbLog) throws Exception { for(int distance=0 ; distance <= m.sentNum ; distance++) { List<Mention> candidates = document.predictedMentions.get(m.sentNum-distance); for(Mention candidate : candidates) { if(!matchedMentionType(candidate, aTypeStr) || !matchedMentionType(m, mTypeStr)) continue; // if(!options.mType.contains(m.mentionType) || !options.aType.contains(candidate.mentionType)) continue; if(candidate == m) continue; if(distance==0 && m.appearEarlierThan(candidate)) continue; // ignore cataphora if(Sieve.isReallyCoref(document, m.mentionID, candidate.mentionID)) { if(m.mentionType==MentionType.LIST) { log.info("LIST MATCHING MENTION : "+m.spanToString()+"\tANT: "+candidate.spanToString()); } Sieve.merge(document, m.mentionID, candidate.mentionID); return; } } } } }