Package org.apache.ctakes.coreference.type

Examples of org.apache.ctakes.coreference.type.Markable


    //    int ind = 0;
    iter = jcas.getJFSIndexRepository().getAllIndexedFS(MarkablePairSet.type);
    while(iter.hasNext()){
      //      VecInstance vec = (VecInstance) iter.next();
      MarkablePairSet pair = (MarkablePairSet) iter.next();
      Markable anaphor = pair.getAnaphor();
      String corefType = (anaphor instanceof NEMarkable ? CorefConsts.NE : (anaphor instanceof DemMarkable ? CorefConsts.DEM : CorefConsts.PRON));
      //      String nodeStr = vec.getVector();
      //      int label = getLabel(nodeStr);
      FSList pairList = pair.getAntecedentList();
      while(pairList instanceof NonEmptyFSList){
        NonEmptyFSList node = (NonEmptyFSList) pairList;
        BooleanLabeledFS labeledProb = (BooleanLabeledFS) node.getHead();
        int label = labeledProb.getLabel() ? 1 : 0;
        if(anaphora){
          if(label == 1) posAnaphInst++;
          else negAnaphInst++;
          anaphLabels.add(label);
          svm_node[] nodes = vecCreator.createAnaphoricityVector(anaphor, jcas);
          anaphNodes.add(nodes);
        }
        Markable antecedent = (Markable) labeledProb.getFeature();
        label = (labeler.isGoldPair(anaphor, antecedent) ? 1 : 0);
        if(label == 1){
          numPos++;
          if(corefType.equals(CorefConsts.NE)){
            posNeInst++;
            //          neInds.add(ind);
          }else if(corefType.equals(CorefConsts.DEM)){
            posDemInst++;
          }else if(corefType.equals(CorefConsts.PRON)){
            posPronInst++;
          }
        }
        else if(label == 0){
          if(corefType.equals(CorefConsts.NE)){
            negNeInst++;
            //          neInds.add(ind);
          }else if(corefType.equals(CorefConsts.DEM)){
            negDemInst++;
          }else if(corefType.equals(CorefConsts.PRON)){
            negPronInst++;
          }
        }
//        corefLabels.add(label);
//        corefTypes.add(corefType);        // need to add it every time so the indices match...
        //      corefPathTrees.add(pathTree);

        if(printVectors){
          svm_node[] nodes = vecCreator.getNodeFeatures(anaphor, antecedent, jcas); //getNodes(nodeStr);
//          corefNodes.add(nodes);
          PrintWriter writer = null;
          if(corefType.equals(CorefConsts.NE)){
            writer = neOut;
          }else if(corefType.equals(CorefConsts.PRON)){
            writer = pronOut;
          }else if(corefType.equals(CorefConsts.DEM)){
            writer = demOut;
          }
          writer.print(label);
          for(svm_node inst : nodes){
            writer.print(" ");
            writer.print(inst.index);
            writer.print(":");
            writer.print(inst.value);
          }
          writer.println();
          writer.flush();
        }

        if(printTrees){
          //          Markable anaphor = vec.getAnaphor();
          //          Markable antecedent = vec.getAntecedent();
          TreebankNode antecedentNode = MarkableTreeUtils.markableNode(jcas, antecedent.getBegin(), antecedent.getEnd());
          TreebankNode anaphorNode = MarkableTreeUtils.markableNode(jcas, anaphor.getBegin(), anaphor.getEnd());
          debug.println(TreeUtils.tree2str(antecedentNode));
          debug.println(TreeUtils.tree2str(anaphorNode));
//          TopTreebankNode pathTree = TreeExtractor.extractPathTree(antecedentNode, anaphorNode, jcas);
          SimpleTree pathTree = TreeExtractor.extractPathTree(antecedentNode, anaphorNode);
View Full Code Here


    }
   
    FSIterator<Annotation> iter = jcas.getAnnotationIndex(MarkablePairSet.type).iterator();
    while(iter.hasNext()){
      MarkablePairSet set = (MarkablePairSet) iter.next();
      Markable anaphor = set.getAnaphor();
      FSList fs = (FSList) set.getAntecedentList();
      MarkableProb bestAnte = null;
      LinkedList<Markable> ll = fs2ll(fs);
      if(anaphor instanceof PronounMarkable){
        bestAnte = processPronoun(anaphor, ll, jcas);
      }else if(anaphor instanceof NEMarkable){
        bestAnte = processNE(anaphor, ll, jcas);
      }else if(anaphor instanceof DemMarkable){
        bestAnte = processDem(anaphor, ll, jcas);
      }

      if(bestAnte.prob > CorefConsts.COREF_THRESHOLD){
        CoreferenceRelation cr = new CoreferenceRelation(jcas);
        RelationArgument ra1 = new RelationArgument(jcas);
        ra1.setId(bestAnte.m.getId());
        ra1.setArgument(bestAnte.m.getContent());
        ra1.setRole("antecedent");
        RelationArgument ra2 = new RelationArgument(jcas);
        ra2.setId(anaphor.getId());
        ra2.setArgument(anaphor.getContent());
        ra2.setRole("anaphor");
        cr.setArg1(ra1);
        cr.setArg2(ra2);
        cr.setConfidence(bestAnte.prob);
        ra1.addToIndexes();
View Full Code Here

  private LinkedList<Markable> fs2ll(FSList fs) {
    LinkedList<Markable> ll = new LinkedList<Markable>();
    while(fs instanceof NonEmptyFSList){
      NonEmptyFSList node = (NonEmptyFSList) fs;
      BooleanLabeledFS feat = (BooleanLabeledFS) node.getHead();
      Markable antecedent = (Markable) feat.getFeature();
      ll.add(antecedent);
      fs = node.getTail();
    }
    return ll;
  }
View Full Code Here

    }
    return ll;
  }
 
  private MarkableProb processPronoun(Markable anaphor, LinkedList<Markable> anteList, JCas jcas){
    Markable ante = null;
    double bestProb = 0.0;
    List<Markable> resortedList = anteList;
    for(Markable antecedent : resortedList){
      svm_node[] nodes = vecCreator.getNodeFeatures(anaphor, antecedent, jcas);
     
View Full Code Here

    }
    return new MarkableProb(ante, bestProb);
  }

  private MarkableProb processNE(Markable anaphor, List<Markable> anteList, JCas jcas){
    Markable ante = null;
    double bestProb = 0.0;
    for(Markable antecedent : anteList){
      svm_node[] nodes = vecCreator.getNodeFeatures(anaphor, antecedent, jcas, true);
      double prob = 0.0;
      prob = mod_coref.predict(nodes);
View Full Code Here

  private MarkableProb processDem(Markable anaphor, List<Markable> anteList, JCas jcas){
    double bestProb = 0.0;
    TreebankNode n = MarkableTreeUtils.markableNode(jcas, anaphor.getBegin(), anaphor.getEnd());
    TreebankNode parent = (n != null ? n.getParent() : null);
    TreebankNode gparent = (parent != null ? parent.getParent() : null);
    Markable ante = null;
    for(Markable antecedent: anteList){
      if(n!=null && parent != null && gparent != null && n.getNodeType().equals("WHNP") && parent.getNodeType().equals("SBAR")
          && gparent.getNodeType().equals("NP") && gparent.getChildren(1) == parent && gparent.getChildren(0).getNodeType().equals("NP")){
        TreebankNode anteNode = gparent.getChildren(0);
        Markable trueAnte = MarkableTreeUtils.nodeMarkable(jcas, anteNode.getBegin(), anteNode.getEnd());
        if(trueAnte == antecedent){
          bestProb = 1.0;
          ante = antecedent;
          break;
        }
View Full Code Here

    // TODO test this
    return lowestDom;
  }
 
  public static Markable nodeMarkable(JCas jcas, int a, int b){
    Markable mark = null;
    Markable best = null;
    Iterator<Annotation> iter = jcas.getAnnotationIndex(Markable.type).iterator();
    while(iter.hasNext()){
      Markable temp = (Markable) iter.next();
      if(temp.getBegin() == a && temp.getEnd() == b){
        mark = temp;
        break;
      }else if(temp.getEnd() == b && temp.getBegin() > a){
        // keep track of a best markable in case there is not an exact match - the biggest markable that ends in the same spot
        // and begins after the node.
        if(best == null || temp.getBegin() < best.getBegin()){
          best = temp;
        }
      }
    }
    return (mark == null ? best : mark);
View Full Code Here

    //    int ind = 0;
    iter = jcas.getJFSIndexRepository().getAllIndexedFS(MarkablePairSet.type);
    while(iter.hasNext()){
      //      VecInstance vec = (VecInstance) iter.next();
      MarkablePairSet pair = (MarkablePairSet) iter.next();
      Markable anaphor = pair.getAnaphor();
      String corefType = (anaphor instanceof NEMarkable ? CorefConsts.NE : (anaphor instanceof DemMarkable ? CorefConsts.DEM : CorefConsts.PRON));
      //      String nodeStr = vec.getVector();
      //      int label = getLabel(nodeStr);
      FSList pairList = pair.getAntecedentList();
      while(pairList instanceof NonEmptyFSList){
        NonEmptyFSList node = (NonEmptyFSList) pairList;
        BooleanLabeledFS labeledProb = (BooleanLabeledFS) node.getHead();
        int label = labeledProb.getLabel() ? 1 : 0;
//        if(anaphora){
//          if(label == 1) posAnaphInst++;
//          else negAnaphInst++;
//          anaphLabels.add(label);
//          svm_node[] nodes = vecCreator.createAnaphoricityVector(anaphor, jcas);
//          anaphNodes.add(nodes);
//        }
        Markable antecedent = (Markable) labeledProb.getFeature();
        label = (labeler.isGoldPair(anaphor, antecedent) ? 1 : 0);
        if(label == 1){
          numPos++;
          if(corefType.equals(CorefConsts.NE)){
            posNeInst++;
            //          neInds.add(ind);
          }else if(corefType.equals(CorefConsts.DEM)){
            posDemInst++;
          }else if(corefType.equals(CorefConsts.PRON)){
            posPronInst++;
          }
        }
        else if(label == 0){
          if(corefType.equals(CorefConsts.NE)){
            negNeInst++;
            //          neInds.add(ind);
          }else if(corefType.equals(CorefConsts.DEM)){
            negDemInst++;
          }else if(corefType.equals(CorefConsts.PRON)){
            negPronInst++;
          }
        }
//        corefLabels.add(label);
//        corefTypes.add(corefType);        // need to add it every time so the indices match...
        //      corefPathTrees.add(pathTree);

        if(printVectors){
          svm_node[] nodes = vecCreator.getNodeFeatures(anaphor, antecedent, jcas); //getNodes(nodeStr);
//          corefNodes.add(nodes);
          PrintWriter writer = null;
          if(corefType.equals(CorefConsts.NE)){
            writer = neOut;
          }else if(corefType.equals(CorefConsts.PRON)){
            writer = pronOut;
          }else if(corefType.equals(CorefConsts.DEM)){
            writer = demOut;
          }
          writer.print(label);
          for(svm_node inst : nodes){
            writer.print(" ");
            writer.print(inst.index);
            writer.print(":");
            writer.print(inst.value);
          }
          writer.println();
          writer.flush();
        }

        if(printTrees){
          //          Markable anaphor = vec.getAnaphor();
          //          Markable antecedent = vec.getAntecedent();
          TreebankNode antecedentNode = MarkableTreeUtils.markableNode(jcas, antecedent.getBegin(), antecedent.getEnd());
          TreebankNode anaphorNode = MarkableTreeUtils.markableNode(jcas, anaphor.getBegin(), anaphor.getEnd());
          debug.println(TreeUtils.tree2str(antecedentNode));
          debug.println(TreeUtils.tree2str(anaphorNode));
//          TopTreebankNode pathTree = TreeExtractor.extractPathTree(antecedentNode, anaphorNode, jcas);
          SimpleTree pathTree = TreeExtractor.extractPathTree(antecedentNode, anaphorNode);
View Full Code Here

    }
     
    FSIterator<Annotation> iter = jcas.getAnnotationIndex(MarkablePairSet.type).iterator();
    while(iter.hasNext()){
      MarkablePairSet set = (MarkablePairSet) iter.next();
      Markable anaphor = set.getAnaphor();
      FSList fs = (FSList) set.getAntecedentList();
      MarkableProb bestAnte = null;
      LinkedList<Markable> ll = fs2ll(fs);
      if(anaphor instanceof PronounMarkable){
        // There is not enough training data to do this reliably... the
        // classifier for this type will decrease scores
//        bestAnte = processPronoun(anaphor, ll, jcas);
        bestAnte = new MarkableProb(null, 0.0);
      }else if(anaphor instanceof NEMarkable){
        bestAnte = processNE(anaphor, ll, jcas);
      }else if(anaphor instanceof DemMarkable){
        bestAnte = processDem(anaphor, ll, jcas);
      }else{
        // should not happenn...
        continue;
      }

      if(bestAnte.prob > CorefConsts.COREF_THRESHOLD){
        // create the coref relation type
        CoreferenceRelation cr = new CoreferenceRelation(jcas);
        cr.setCategory("Coreference");
        RelationArgument ra1 = new RelationArgument(jcas);
        ra1.setId(bestAnte.m.getId());
        ra1.setArgument(bestAnte.m.getContent());
        ra1.setRole("antecedent");
        RelationArgument ra2 = new RelationArgument(jcas);
        ra2.setId(anaphor.getId());
        ra2.setArgument(anaphor.getContent());
        ra2.setRole("anaphor");
        cr.setArg1(ra1);
        cr.setArg2(ra2);
        cr.setConfidence(bestAnte.prob);
        ra1.addToIndexes();
        ra2.addToIndexes();
        cr.addToIndexes();
       
        // propagate the collection relation type
        RelationArgument anaRa = new RelationArgument(jcas);
        anaRa.setId(anaphor.getId());
        anaRa.setArgument(anaphor.getContent());
        anaRa.setRole("mention");
        NonEmptyFSList node = new NonEmptyFSList(jcas);
        node.setHead(anaRa);
        node.setTail(emptyList);
        collectionRas.put(anaphor, node);
View Full Code Here

  private LinkedList<Markable> fs2ll(FSList fs) {
    LinkedList<Markable> ll = new LinkedList<Markable>();
    while(fs instanceof NonEmptyFSList){
      NonEmptyFSList node = (NonEmptyFSList) fs;
      BooleanLabeledFS feat = (BooleanLabeledFS) node.getHead();
      Markable antecedent = (Markable) feat.getFeature();
      ll.add(antecedent);
      fs = node.getTail();
    }
    return ll;
  }
View Full Code Here

TOP

Related Classes of org.apache.ctakes.coreference.type.Markable

Copyright © 2018 www.massapicom. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.