@Override public int compare(Markable m1, Markable m2) { // look at the start first if(m1.getBegin() < m2.getBegin()){ return -1; }else if(m2.getBegin() < m1.getBegin()){ return 1; }else if(m1.getEnd() < m2.getEnd()){ return -1; }else if(m2.getEnd() < m1.getEnd()){ return 1; }else{ // m1 and m2 have the exact same span return 0; } } }
public static boolean mapGoldMarkable(JCas jcas, Markable goldMarkable, Map<Markable,Markable> gold2sys, Map<ConllDependencyNode, Collection<Markable>> depIndex){ if(!(goldMarkable.getBegin() < 0 || goldMarkable.getEnd() >= jcas.getDocumentText().length())){ ConllDependencyNode headNode = DependencyUtility.getNominalHeadNode(jcas, goldMarkable); for(Markable sysMarkable : depIndex.get(headNode)){ ConllDependencyNode markNode = DependencyUtility.getNominalHeadNode(jcas, sysMarkable); if(markNode == headNode){ gold2sys.put(goldMarkable, sysMarkable); return true; } } }else{ // Have seen some instances where anafora writes a span that is not possible, log them // so they can be found and fixed: logger.warn(String.format("There is a markable with span [%d, %d] in a document with length %d\n", goldMarkable.getBegin(), goldMarkable.getEnd(), jcas.getDocumentText().length())); return false; } return false; } }
private static boolean mapGoldMarkable(JCas jcas, Markable goldMarkable, Map<Markable,Markable> gold2sys, Map<ConllDependencyNode, Collection<Markable>> depIndex){ if(!(goldMarkable.getBegin() < 0 || goldMarkable.getEnd() >= jcas.getDocumentText().length())){ ConllDependencyNode headNode = DependencyUtility.getNominalHeadNode(jcas, goldMarkable); for(Markable sysMarkable : depIndex.get(headNode)){ ConllDependencyNode markNode = DependencyUtility.getNominalHeadNode(jcas, sysMarkable); if(markNode == headNode){ gold2sys.put(goldMarkable, sysMarkable); return true; } } }else{ // Have seen some instances where anafora writes a span that is not possible, log them // so they can be found and fixed: logger.warn(String.format("There is a markable with span [%d, %d] in a document with length %d\n", goldMarkable.getBegin(), goldMarkable.getEnd(), jcas.getDocumentText().length())); return false; } return false; } }
public List<IdentifiedAnnotationPair> getHeadwordMatchingPairs(JCas jcas, Annotation segment){ List<IdentifiedAnnotationPair> pairs = new ArrayList<>(); List<Markable> segMarkables = new ArrayList<>(JCasUtil.selectCovered(jcas, Markable.class, segment)); for(int i = 0; i < segMarkables.size(); i++){ Markable ana = segMarkables.get(i); ConllDependencyNode headNode = DependencyUtility.getNominalHeadNode(jcas, ana); String headword = null; if(headNode != null){ headword = headNode.getCoveredText().toLowerCase(); }else{ continue; } List<Markable> previousMarkables = JCasUtil.selectCovered(jcas, Markable.class, 0, ana.getBegin()); for(int j = 0; j < previousMarkables.size(); j++){ Markable ante = previousMarkables.get(j); ConllDependencyNode anteNode = DependencyUtility.getNominalHeadNode(jcas, ante); if(anteNode != null){ String anteHeadword = anteNode.getCoveredText().toLowerCase(); if(headword.equals(anteHeadword)){ pairs.add(new IdentifiedAnnotationPair(ante, ana)); } } } } return pairs; }
public List<IdentifiedAnnotationPair> getHeadwordMatchingPairs(JCas jcas, Annotation segment){ List<IdentifiedAnnotationPair> pairs = new ArrayList<>(); List<Markable> segMarkables = new ArrayList<>(JCasUtil.selectCovered(jcas, Markable.class, segment)); for(int i = 0; i < segMarkables.size(); i++){ Markable ana = segMarkables.get(i); ConllDependencyNode headNode = DependencyUtility.getNominalHeadNode(jcas, ana); String headword = null; if(headNode != null){ headword = headNode.getCoveredText().toLowerCase(); }else{ continue; } List<Markable> previousMarkables = JCasUtil.selectCovered(jcas, Markable.class, 0, ana.getBegin()); for(int j = 0; j < previousMarkables.size(); j++){ Markable ante = previousMarkables.get(j); ConllDependencyNode anteNode = DependencyUtility.getNominalHeadNode(jcas, ante); if(anteNode != null){ String anteHeadword = anteNode.getCoveredText().toLowerCase(); if(headword.equals(anteHeadword)){ pairs.add(new IdentifiedAnnotationPair(ante, ana)); } } } } return pairs; }
if(member.getBegin() > mention.getEnd()) break; ConllDependencyNode memberHead = cache.get(member); if(memberHead != null){
@Override public List<Feature> extract(JCas jcas, Markable mention) throws CleartkExtractorException { List<Feature> feats = new ArrayList<>(); boolean anaInHeader = false; int anaPar = -1; // Find section headers -- paragraphs List<Paragraph> pars = new ArrayList<>(JCasUtil.select(jcas, Paragraph.class)); for(int i = 0; i < pars.size(); i++){ Paragraph par = pars.get(i); if(par.getBegin() > mention.getEnd()){ break; } // find the paragraph with the anaphor if(mention.getBegin() >= par.getBegin() && mention.getEnd() <= par.getEnd()){ anaPar = i; } List<Sentence> coveredSents = JCasUtil.selectCovered(jcas, Sentence.class, par); if(coveredSents != null && coveredSents.size() == 1){ if(anaPar == i){ anaInHeader = true; break; } } } feats.add(new Feature("AnaInHeader", anaInHeader)); return feats; }
NonEmptyFSList members = ((NonEmptyFSList)cluster.getMembers()); Annotation first = (Annotation) members.getHead(); if(first == null || mention.getBegin() <= first.getEnd()) continue;
@Override public List<Feature> extract(JCas jcas, Markable mention) throws CleartkExtractorException { List<Feature> feats = new ArrayList<>(); boolean anaInHeader = false; int anaPar = -1; // Find section headers -- paragraphs List<Paragraph> pars = new ArrayList<>(JCasUtil.select(jcas, Paragraph.class)); for(int i = 0; i < pars.size(); i++){ Paragraph par = pars.get(i); if(par.getBegin() > mention.getEnd()){ break; } // find the paragraph with the anaphor if(mention.getBegin() >= par.getBegin() && mention.getEnd() <= par.getEnd()){ anaPar = i; } List<Sentence> coveredSents = JCasUtil.selectCovered(jcas, Sentence.class, par); if(coveredSents != null && coveredSents.size() == 1){ if(anaPar == i){ anaInHeader = true; break; } } } feats.add(new Feature("AnaInHeader", anaInHeader)); return feats; }
NonEmptyFSList members = ((NonEmptyFSList)cluster.getMembers()); Annotation first = (Annotation) members.getHead(); if(first == null || mention.getBegin() <= first.getEnd()) continue;
@Override public List<CollectionTextRelationIdentifiedAnnotationPair> getPairs(JCas jcas, Markable mention) { List<CollectionTextRelationIdentifiedAnnotationPair> pairs = new ArrayList<>(); for(CollectionTextRelation cluster : JCasUtil.select(jcas, CollectionTextRelation.class)){ NonEmptyFSList members = ((NonEmptyFSList)cluster.getMembers()); Annotation first = (Annotation) members.getHead(); if(first == null || mention.getBegin() <= first.getEnd()){ continue; } IdentifiedAnnotation mostRecent = (IdentifiedAnnotation) ClusterUtils.getMostRecent((NonEmptyFSList)cluster.getMembers(), mention); if(mostRecent == null || EventCoreferenceAnnotator.sentDist(jcas, mostRecent, mention) > sentDist){ continue; } int numMembers=0; for(Markable m : JCasUtil.select(cluster.getMembers(), Markable.class)){ numMembers++; if(m == mostRecent) break; } if(numMembers > 1){ pairs.add(new CollectionTextRelationIdentifiedAnnotationPair(cluster, mention)); } } return pairs; }
@Override public List<CollectionTextRelationIdentifiedAnnotationPair> getPairs(JCas jcas, Markable mention) { List<CollectionTextRelationIdentifiedAnnotationPair> pairs = new ArrayList<>(); for(CollectionTextRelation cluster : JCasUtil.select(jcas, CollectionTextRelation.class)){ NonEmptyFSList members = ((NonEmptyFSList)cluster.getMembers()); Annotation first = (Annotation) members.getHead(); if(first == null || mention.getBegin() <= first.getEnd()){ continue; } IdentifiedAnnotation mostRecent = (IdentifiedAnnotation) ClusterUtils.getMostRecent((NonEmptyFSList)cluster.getMembers(), mention); if(mostRecent == null || EventCoreferenceAnnotator.sentDist(jcas, mostRecent, mention) > sentDist){ continue; } int numMembers=0; for(Markable m : JCasUtil.select(cluster.getMembers(), Markable.class)){ numMembers++; if(m == mostRecent) break; } if(numMembers > 1){ pairs.add(new CollectionTextRelationIdentifiedAnnotationPair(cluster, mention)); } } return pairs; }
if(member.getBegin() > mention.getEnd()) break; ConllDependencyNode memberHead = MapFactory.get(getKey(jCas), member); if(memberHead != null){
NonEmptyFSList element = (NonEmptyFSList) head; Markable goldMarkable = (Markable) element.getHead(); if(!(goldMarkable.getBegin() < 0 || goldMarkable.getEnd() >= jcas.getDocumentText().length())){
@Override public void process(JCas jCas) throws AnalysisEngineProcessException { // createMarkablesUsingConstituencyTrees(jCas); createMarkablesUsingDependencyTrees(jCas); for(TimeMention timex : JCasUtil.select(jCas, TimeMention.class)){ boolean collision = false; for(Markable other : JCasUtil.selectCovered(jCas, Markable.class, timex.getBegin(), timex.getEnd())){ if(other.getBegin() == timex.getBegin() && other.getEnd() == timex.getEnd()){ collision = true; break; } } if(!collision){ Markable m = new Markable(jCas, timex.getBegin(), timex.getEnd()); m.addToIndexes(jCas); } } }
@Override public void process(JCas jCas) throws AnalysisEngineProcessException { // createMarkablesUsingConstituencyTrees(jCas); createMarkablesUsingDependencyTrees(jCas); for(TimeMention timex : JCasUtil.select(jCas, TimeMention.class)){ boolean collision = false; for(Markable other : JCasUtil.selectCovered(jCas, Markable.class, timex.getBegin(), timex.getEnd())){ if(other.getBegin() == timex.getBegin() && other.getEnd() == timex.getEnd()){ collision = true; break; } } if(!collision){ Markable m = new Markable(jCas, timex.getBegin(), timex.getEnd()); m.addToIndexes(jCas); } } }