List of usage examples for edu.stanford.nlp.util IntTuple get
public int get(int num)
From source file:knu.univ.lingvo.coref.Document.java
License:Open Source License
/** Extract gold coref link information */ protected void extractGoldLinks() { // List<List<Mention>> orderedMentionsBySentence = this.getOrderedMentions(); List<Pair<IntTuple, IntTuple>> links = new ArrayList<Pair<IntTuple, IntTuple>>(); // position of each mention in the input matrix, by id Map<Integer, IntTuple> positions = Generics.newHashMap(); // positions of antecedents Map<Integer, List<IntTuple>> antecedents = Generics.newHashMap(); for (int i = 0; i < goldOrderedMentionsBySentence.size(); i++) { for (int j = 0; j < goldOrderedMentionsBySentence.get(i).size(); j++) { Mention m = goldOrderedMentionsBySentence.get(i).get(j); int id = m.mentionID; IntTuple pos = new IntTuple(2); pos.set(0, i);/* w w w . j av a 2 s .co m*/ pos.set(1, j); positions.put(id, pos); antecedents.put(id, new ArrayList<IntTuple>()); } } // SieveCoreferenceSystem.debugPrintMentions(System.err, "", goldOrderedMentionsBySentence); for (List<Mention> mentions : goldOrderedMentionsBySentence) { for (Mention m : mentions) { int id = m.mentionID; IntTuple src = positions.get(id); assert (src != null); if (m.originalRef >= 0) { IntTuple dst = positions.get(m.originalRef); if (dst == null) { throw new RuntimeException("Cannot find gold mention with ID=" + m.originalRef); } // to deal with cataphoric annotation while (dst.get(0) > src.get(0) || (dst.get(0) == src.get(0) && dst.get(1) > src.get(1))) { Mention dstMention = goldOrderedMentionsBySentence.get(dst.get(0)).get(dst.get(1)); m.originalRef = dstMention.originalRef; dstMention.originalRef = id; if (m.originalRef < 0) break; dst = positions.get(m.originalRef); } if (m.originalRef < 0) continue; // A B C: if A<-B, A<-C => make a link B<-C for (int k = dst.get(0); k <= src.get(0); k++) { for (int l = 0; l < goldOrderedMentionsBySentence.get(k).size(); l++) { if (k == dst.get(0) && l < dst.get(1)) continue; if (k == src.get(0) && l > src.get(1)) break; IntTuple missed = new IntTuple(2); missed.set(0, k); missed.set(1, l); if (links.contains(new Pair<IntTuple, IntTuple>(missed, dst))) { antecedents.get(id).add(missed); links.add(new Pair<IntTuple, IntTuple>(src, missed)); } } } links.add(new Pair<IntTuple, IntTuple>(src, dst)); assert (antecedents.get(id) != null); antecedents.get(id).add(dst); List<IntTuple> ants = antecedents.get(m.originalRef); assert (ants != null); for (IntTuple ant : ants) { antecedents.get(id).add(ant); links.add(new Pair<IntTuple, IntTuple>(src, ant)); } } } } goldLinks = links; }
From source file:knu.univ.lingvo.coref.SieveCoreferenceSystem.java
License:Open Source License
/** * Print coref link info/*from ww w . j av a 2 s . c om*/ */ private static void printLink(Logger logger, String header, IntTuple src, IntTuple dst, List<List<Mention>> orderedMentionsBySentence) { Mention srcMention = orderedMentionsBySentence.get(src.get(0)).get(src.get(1)); Mention dstMention = orderedMentionsBySentence.get(dst.get(0)).get(dst.get(1)); if (src.get(0) == dst.get(0)) { logger.fine(header + ": [" + srcMention.spanToString() + "](id=" + srcMention.mentionID + ") in sent #" + src.get(0) + " => [" + dstMention.spanToString() + "](id=" + dstMention.mentionID + ") in sent #" + dst.get(0) + " Same Sentence"); } else { logger.fine(header + ": [" + srcMention.spanToString() + "](id=" + srcMention.mentionID + ") in sent #" + src.get(0) + " => [" + dstMention.spanToString() + "](id=" + dstMention.mentionID + ") in sent #" + dst.get(0)); } }
From source file:knu.univ.lingvo.coref.SieveCoreferenceSystem.java
License:Open Source License
/** * print a coref link information including context and parse tree *///from ww w . ja v a 2 s .com private static void printLinkWithContext(Logger logger, String header, IntTuple src, IntTuple dst, Document document, Semantics semantics) { List<List<Mention>> orderedMentionsBySentence = document.getOrderedMentions(); List<List<Mention>> goldOrderedMentionsBySentence = document.goldOrderedMentionsBySentence; Mention srcMention = orderedMentionsBySentence.get(src.get(0)).get(src.get(1)); Mention dstMention = orderedMentionsBySentence.get(dst.get(0)).get(dst.get(1)); List<CoreLabel> srcSentence = srcMention.sentenceWords; List<CoreLabel> dstSentence = dstMention.sentenceWords; printLink(logger, header, src, dst, orderedMentionsBySentence); printList(logger, "Mention:" + srcMention.spanToString(), "Gender:" + srcMention.gender.toString(), "Number:" + srcMention.number.toString(), "Animacy:" + srcMention.animacy.toString(), "Person:" + srcMention.person.toString(), "NER:" + srcMention.nerString, "Head:" + srcMention.headString, "Type:" + srcMention.mentionType.toString(), "utter: " + srcMention.headWord.get(CoreAnnotations.UtteranceAnnotation.class), "speakerID: " + srcMention.headWord.get(CoreAnnotations.SpeakerAnnotation.class), "twinless:" + srcMention.twinless); logger.fine("Context:"); String p = ""; for (int i = 0; i < srcSentence.size(); i++) { if (i == srcMention.startIndex) { p += "["; } if (i == srcMention.endIndex) { p += "]"; } p += srcSentence.get(i).word() + " "; } logger.fine(p); StringBuilder golds = new StringBuilder(); golds.append("Gold mentions in the sentence:\n"); Counter<Integer> mBegin = new ClassicCounter<Integer>(); Counter<Integer> mEnd = new ClassicCounter<Integer>(); for (Mention m : goldOrderedMentionsBySentence.get(src.get(0))) { mBegin.incrementCount(m.startIndex); mEnd.incrementCount(m.endIndex); } List<CoreLabel> l = document.annotation.get(CoreAnnotations.SentencesAnnotation.class).get(src.get(0)) .get(CoreAnnotations.TokensAnnotation.class); for (int i = 0; i < l.size(); i++) { for (int j = 0; j < mEnd.getCount(i); j++) { golds.append("]"); } for (int j = 0; j < mBegin.getCount(i); j++) { golds.append("["); } golds.append(l.get(i).get(CoreAnnotations.TextAnnotation.class)); golds.append(" "); } logger.fine(golds.toString()); printList(logger, "\nAntecedent:" + dstMention.spanToString(), "Gender:" + dstMention.gender.toString(), "Number:" + dstMention.number.toString(), "Animacy:" + dstMention.animacy.toString(), "Person:" + dstMention.person.toString(), "NER:" + dstMention.nerString, "Head:" + dstMention.headString, "Type:" + dstMention.mentionType.toString(), "utter: " + dstMention.headWord.get(CoreAnnotations.UtteranceAnnotation.class), "speakerID: " + dstMention.headWord.get(CoreAnnotations.SpeakerAnnotation.class), "twinless:" + dstMention.twinless); logger.fine("Context:"); p = ""; for (int i = 0; i < dstSentence.size(); i++) { if (i == dstMention.startIndex) { p += "["; } if (i == dstMention.endIndex) { p += "]"; } p += dstSentence.get(i).word() + " "; } logger.fine(p); golds = new StringBuilder(); golds.append("Gold mentions in the sentence:\n"); mBegin = new ClassicCounter<Integer>(); mEnd = new ClassicCounter<Integer>(); for (Mention m : goldOrderedMentionsBySentence.get(dst.get(0))) { mBegin.incrementCount(m.startIndex); mEnd.incrementCount(m.endIndex); } l = document.annotation.get(CoreAnnotations.SentencesAnnotation.class).get(dst.get(0)) .get(CoreAnnotations.TokensAnnotation.class); for (int i = 0; i < l.size(); i++) { for (int j = 0; j < mEnd.getCount(i); j++) { golds.append("]"); } for (int j = 0; j < mBegin.getCount(i); j++) { golds.append("["); } golds.append(l.get(i).get(CoreAnnotations.TextAnnotation.class)); golds.append(" "); } logger.fine(golds.toString()); logger.finer("\nMention:: --------------------------------------------------------"); try { logger.finer(srcMention.dependency.toString()); } catch (Exception e) { } //throw new RuntimeException(e);} logger.finer("Parse:"); logger.finer(formatPennTree(srcMention.contextParseTree)); logger.finer("\nAntecedent:: -----------------------------------------------------"); try { logger.finer(dstMention.dependency.toString()); } catch (Exception e) { } //throw new RuntimeException(e);} logger.finer("Parse:"); logger.finer(formatPennTree(dstMention.contextParseTree)); }
From source file:knu.univ.lingvo.coref.SieveCoreferenceSystem.java
License:Open Source License
/** * Print pass results//from ww w .j av a2 s . c o m */ private static void printLogs(CorefCluster c1, CorefCluster c2, Mention m1, Mention m2, Document document, int sieveIndex) { Map<Mention, IntTuple> positions = document.positions; List<List<Mention>> orderedMentionsBySentence = document.getOrderedMentions(); List<Pair<IntTuple, IntTuple>> goldLinks = document.getGoldLinks(); IntTuple p1 = positions.get(m1); assert (p1 != null); IntTuple p2 = positions.get(m2); assert (p2 != null); int menDist = 0; for (int i = p2.get(0); i <= p1.get(0); i++) { if (p1.get(0) == p2.get(0)) { menDist = p1.get(1) - p2.get(1); break; } if (i == p2.get(0)) { menDist += orderedMentionsBySentence.get(p2.get(0)).size() - p2.get(1); continue; } if (i == p1.get(0)) { menDist += p1.get(1); continue; } if (p2.get(0) < i && i < p1.get(0)) { menDist += orderedMentionsBySentence.get(i).size(); } } String correct = (goldLinks.contains(new Pair<IntTuple, IntTuple>(p1, p2))) ? "\tCorrect" : "\tIncorrect"; logger.finest( "\nsentence distance: " + (p1.get(0) - p2.get(0)) + "\tmention distance: " + menDist + correct); if (!goldLinks.contains(new Pair<IntTuple, IntTuple>(p1, p2))) { logger.finer("-------Incorrect merge in pass" + sieveIndex + "::--------------------"); c1.printCorefCluster(logger); logger.finer("--------------------------------------------"); c2.printCorefCluster(logger); logger.finer("--------------------------------------------"); } logger.finer("antecedent: " + m2.spanToString() + "(" + m2.mentionID + ")\tmention: " + m1.spanToString() + "(" + m1.mentionID + ")\tsentDistance: " + Math.abs(m1.sentNum - m2.sentNum) + "\t" + correct + " Pass" + sieveIndex + ":"); }