You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ctakes.apache.org by se...@apache.org on 2017/09/11 20:02:20 UTC

svn commit: r1808061 - in /ctakes/trunk: ctakes-constituency-parser/src/main/java/org/apache/ctakes/constituency/parser/ae/ ctakes-core/src/main/java/org/apache/ctakes/core/pipeline/ ctakes-coreference/src/main/java/org/apache/ctakes/coreference/ae/ ct...

Author: seanfinan
Date: Mon Sep 11 20:02:19 2017
New Revision: 1808061

URL: http://svn.apache.org/viewvc?rev=1808061&view=rev
Log:
Add hints that ConstituencyParser is 'needed' for coref

Modified:
    ctakes/trunk/ctakes-constituency-parser/src/main/java/org/apache/ctakes/constituency/parser/ae/ConstituencyParser.java
    ctakes/trunk/ctakes-core/src/main/java/org/apache/ctakes/core/pipeline/PipeBitInfo.java
    ctakes/trunk/ctakes-coreference/src/main/java/org/apache/ctakes/coreference/ae/DeterministicMarkableAnnotator.java
    ctakes/trunk/ctakes-coreference/src/main/java/org/apache/ctakes/coreference/ae/MarkableSalienceAnnotator.java
    ctakes/trunk/ctakes-coreference/src/main/java/org/apache/ctakes/coreference/ae/MentionClusterCoreferenceAnnotator.java
    ctakes/trunk/ctakes-coreference/src/main/java/org/apache/ctakes/coreference/factory/CoreferenceAnnotatorFactory.java

Modified: ctakes/trunk/ctakes-constituency-parser/src/main/java/org/apache/ctakes/constituency/parser/ae/ConstituencyParser.java
URL: http://svn.apache.org/viewvc/ctakes/trunk/ctakes-constituency-parser/src/main/java/org/apache/ctakes/constituency/parser/ae/ConstituencyParser.java?rev=1808061&r1=1808060&r2=1808061&view=diff
==============================================================================
--- ctakes/trunk/ctakes-constituency-parser/src/main/java/org/apache/ctakes/constituency/parser/ae/ConstituencyParser.java (original)
+++ ctakes/trunk/ctakes-constituency-parser/src/main/java/org/apache/ctakes/constituency/parser/ae/ConstituencyParser.java Mon Sep 11 20:02:19 2017
@@ -38,7 +38,8 @@ import java.io.FileNotFoundException;
 @PipeBitInfo(
       name = "Constituency Parser",
       description = ".",
-      dependencies = { PipeBitInfo.TypeProduct.DOCUMENT_ID, PipeBitInfo.TypeProduct.SENTENCE }
+      dependencies = { PipeBitInfo.TypeProduct.DOCUMENT_ID, PipeBitInfo.TypeProduct.SENTENCE },
+      products = { PipeBitInfo.TypeProduct.TREE_NODE }
 )
 public class ConstituencyParser extends JCasAnnotator_ImplBase {
 	public static final String PARAM_MODEL_FILENAME = "MODEL_FILENAME";

Modified: ctakes/trunk/ctakes-core/src/main/java/org/apache/ctakes/core/pipeline/PipeBitInfo.java
URL: http://svn.apache.org/viewvc/ctakes/trunk/ctakes-core/src/main/java/org/apache/ctakes/core/pipeline/PipeBitInfo.java?rev=1808061&r1=1808060&r2=1808061&view=diff
==============================================================================
--- ctakes/trunk/ctakes-core/src/main/java/org/apache/ctakes/core/pipeline/PipeBitInfo.java (original)
+++ ctakes/trunk/ctakes-core/src/main/java/org/apache/ctakes/core/pipeline/PipeBitInfo.java Mon Sep 11 20:02:19 2017
@@ -8,6 +8,7 @@ import org.apache.ctakes.typesystem.type
 import org.apache.ctakes.typesystem.type.syntax.BaseToken;
 import org.apache.ctakes.typesystem.type.syntax.Chunk;
 import org.apache.ctakes.typesystem.type.syntax.ConllDependencyNode;
+import org.apache.ctakes.typesystem.type.syntax.TerminalTreebankNode;
 import org.apache.ctakes.typesystem.type.textsem.IdentifiedAnnotation;
 import org.apache.ctakes.typesystem.type.textsem.Markable;
 import org.apache.ctakes.typesystem.type.textsem.SemanticRoleRelation;
@@ -62,6 +63,7 @@ public @interface PipeBitInfo {
       DEGREE_RELATION( DegreeOfTextRelation.class ),
       TEMPORAL_RELATION( TemporalTextRelation.class ),
       DEPENDENCY_NODE( ConllDependencyNode.class ),
+      TREE_NODE( TerminalTreebankNode.class ),
       MARKABLE( Markable.class ),
       COREFERENCE_RELATION( CoreferenceRelation.class );
 

Modified: ctakes/trunk/ctakes-coreference/src/main/java/org/apache/ctakes/coreference/ae/DeterministicMarkableAnnotator.java
URL: http://svn.apache.org/viewvc/ctakes/trunk/ctakes-coreference/src/main/java/org/apache/ctakes/coreference/ae/DeterministicMarkableAnnotator.java?rev=1808061&r1=1808060&r2=1808061&view=diff
==============================================================================
--- ctakes/trunk/ctakes-coreference/src/main/java/org/apache/ctakes/coreference/ae/DeterministicMarkableAnnotator.java (original)
+++ ctakes/trunk/ctakes-coreference/src/main/java/org/apache/ctakes/coreference/ae/DeterministicMarkableAnnotator.java Mon Sep 11 20:02:19 2017
@@ -1,14 +1,5 @@
 package org.apache.ctakes.coreference.ae;
 
-import static org.apache.ctakes.dependency.parser.util.DependencyUtility.getDependencyNodes;
-import static org.apache.ctakes.dependency.parser.util.DependencyUtility.getProgeny;
-import static org.apache.ctakes.dependency.parser.util.DependencyUtility.getSentence;
-
-import java.util.ArrayList;
-import java.util.List;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-
 import org.apache.ctakes.core.pipeline.PipeBitInfo;
 import org.apache.ctakes.dependency.parser.util.DependencyUtility;
 import org.apache.ctakes.typesystem.type.syntax.BaseToken;
@@ -25,14 +16,22 @@ import org.apache.uima.fit.util.JCasUtil
 import org.apache.uima.jcas.JCas;
 import org.apache.uima.resource.ResourceInitializationException;
 
+import java.util.ArrayList;
+import java.util.List;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+import static org.apache.ctakes.core.pipeline.PipeBitInfo.TypeProduct.*;
+import static org.apache.ctakes.dependency.parser.util.DependencyUtility.*;
+
 @PipeBitInfo(
       name = "Markable Annotator (Deterministic)",
       description = "Annotates Markables for use by Coreference Annotators." +
             " degree_of type and a single modifier.",
-      dependencies = { PipeBitInfo.TypeProduct.SECTION, PipeBitInfo.TypeProduct.SENTENCE,
-            PipeBitInfo.TypeProduct.IDENTIFIED_ANNOTATION, PipeBitInfo.TypeProduct.DEPENDENCY_NODE,
-            PipeBitInfo.TypeProduct.TIMEX },
-      products = { PipeBitInfo.TypeProduct.MARKABLE }
+      dependencies = { SECTION, SENTENCE,
+            IDENTIFIED_ANNOTATION, DEPENDENCY_NODE,
+            TREE_NODE, TIMEX },
+      products = { MARKABLE }
 )
 public class DeterministicMarkableAnnotator extends JCasAnnotator_ImplBase {
 

Modified: ctakes/trunk/ctakes-coreference/src/main/java/org/apache/ctakes/coreference/ae/MarkableSalienceAnnotator.java
URL: http://svn.apache.org/viewvc/ctakes/trunk/ctakes-coreference/src/main/java/org/apache/ctakes/coreference/ae/MarkableSalienceAnnotator.java?rev=1808061&r1=1808060&r2=1808061&view=diff
==============================================================================
--- ctakes/trunk/ctakes-coreference/src/main/java/org/apache/ctakes/coreference/ae/MarkableSalienceAnnotator.java (original)
+++ ctakes/trunk/ctakes-coreference/src/main/java/org/apache/ctakes/coreference/ae/MarkableSalienceAnnotator.java Mon Sep 11 20:02:19 2017
@@ -1,10 +1,5 @@
 package org.apache.ctakes.coreference.ae;
 
-import java.io.File;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Map;
-
 import org.apache.ctakes.core.pipeline.PipeBitInfo;
 import org.apache.ctakes.coreference.ae.features.salience.ClinicalFeatureExtractor;
 import org.apache.ctakes.coreference.ae.features.salience.GrammaticalRoleFeatureExtractor;
@@ -27,6 +22,11 @@ import org.cleartk.ml.jar.DefaultDataWri
 import org.cleartk.ml.jar.DirectoryDataWriterFactory;
 import org.cleartk.ml.jar.GenericJarClassifierFactory;
 
+import java.io.File;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
 @PipeBitInfo(
       name = "Markable Salience Annotator",
       description = "Annotates Markable Salience.",
@@ -90,7 +90,7 @@ public class MarkableSalienceAnnotator e
       }else{
         Map<Boolean,Double> outcomes = this.classifier.score(features);
         markable.setConfidence(outcomes.get(true).floatValue());
-      }      
+      }
     }
   }
 }

Modified: ctakes/trunk/ctakes-coreference/src/main/java/org/apache/ctakes/coreference/ae/MentionClusterCoreferenceAnnotator.java
URL: http://svn.apache.org/viewvc/ctakes/trunk/ctakes-coreference/src/main/java/org/apache/ctakes/coreference/ae/MentionClusterCoreferenceAnnotator.java?rev=1808061&r1=1808060&r2=1808061&view=diff
==============================================================================
--- ctakes/trunk/ctakes-coreference/src/main/java/org/apache/ctakes/coreference/ae/MentionClusterCoreferenceAnnotator.java (original)
+++ ctakes/trunk/ctakes-coreference/src/main/java/org/apache/ctakes/coreference/ae/MentionClusterCoreferenceAnnotator.java Mon Sep 11 20:02:19 2017
@@ -249,9 +249,10 @@ public class MentionClusterCoreferenceAn
       relationLookup = new HashMap<>();
     }
 
-
-    for ( Segment segment : JCasUtil.select( jCas, Segment.class ) ) {
-      for ( Markable mention : JCasUtil.selectCovered( jCas, Markable.class, segment ) ) {
+     final Map<Segment, Collection<Markable>> segmentMarkables = JCasUtil.indexCovered( jCas, Segment.class, Markable.class );
+     for ( Collection<Markable> markables : segmentMarkables.values() ) {
+        for ( Markable mention : markables ) {
+//System.out.println( "MCCA Markable: " + mention.getCoveredText() + " :" + mention.getBegin() + "," + mention.getEnd() );
         //        ConllDependencyNode headNode = DependencyUtility.getNominalHeadNode(jCas, mention);
         boolean singleton = true;
         double maxScore = 0.0;
@@ -259,6 +260,7 @@ public class MentionClusterCoreferenceAn
 
         for ( CollectionTextRelationIdentifiedAnnotationPair pair : this.getCandidateRelationArgumentPairs( jCas, mention ) ) {
           CollectionTextRelation cluster = pair.getCluster();
+//System.out.println( "   MCCA Pair Cluster: " + pair.getCluster().getCategory() );
           // apply all the feature extractors to extract the list of features
           List<Feature> features = new ArrayList<>();
           for ( RelationFeaturesExtractor<CollectionTextRelation, IdentifiedAnnotation> extractor : this.relationExtractors ) {
@@ -266,6 +268,8 @@ public class MentionClusterCoreferenceAn
             if ( feats != null ) {
               //              Logger.getRootLogger().info(String.format("For cluster with %d mentions, %d %s features", JCasUtil.select(cluster.getMembers(), Markable.class).size(), feats.size(), extractor.getClass().getSimpleName()));
               features.addAll( feats );
+//System.out.println( "      MCCA Extract: " + extractor.getClass().getSimpleName() + "   Features:");
+//feats.forEach( f -> System.out.println( "         " + f.toString() ) );
             }
           }
 
@@ -305,9 +309,10 @@ public class MentionClusterCoreferenceAn
           // annotations
           else {
             String predictedCategory = this.classify( features );
+//System.out.println( "      MCCA Predicted Category: " + predictedCategory + "    Scores:" );
             // TODO look at scores in classifier and try best-pair rather than first-pair?
             Map<String, Double> scores = this.classifier.score( features );
-
+//scores.forEach( (k,v) -> System.out.println( "         " + k + " = " + v ) );
             // add a relation annotation if a true relation was predicted
             if ( !predictedCategory.equals( NO_RELATION_CATEGORY ) ) {
               //              Logger.getLogger("MCAnnotator").info(String.format("Making a pair with score %f", scores.get(predictedCategory)));
@@ -438,7 +443,6 @@ public class MentionClusterCoreferenceAn
     // do that by finding the head of the markable, then finding the identifiedannotations that cover it:
     
     Map<Markable, List<IdentifiedAnnotation>> markable2annotations = MarkableUtilities.indexCoveringUmlsAnnotations(jCas);
-
     for(CollectionTextRelation cluster : JCasUtil.select(jCas, CollectionTextRelation.class)){
       CounterMap<Class<? extends IdentifiedAnnotation>> headCounts = new CounterMap<>();
       List<Markable> memberList = new ArrayList<>(JCasUtil.select(cluster.getMembers(), Markable.class));

Modified: ctakes/trunk/ctakes-coreference/src/main/java/org/apache/ctakes/coreference/factory/CoreferenceAnnotatorFactory.java
URL: http://svn.apache.org/viewvc/ctakes/trunk/ctakes-coreference/src/main/java/org/apache/ctakes/coreference/factory/CoreferenceAnnotatorFactory.java?rev=1808061&r1=1808060&r2=1808061&view=diff
==============================================================================
--- ctakes/trunk/ctakes-coreference/src/main/java/org/apache/ctakes/coreference/factory/CoreferenceAnnotatorFactory.java (original)
+++ ctakes/trunk/ctakes-coreference/src/main/java/org/apache/ctakes/coreference/factory/CoreferenceAnnotatorFactory.java Mon Sep 11 20:02:19 2017
@@ -18,14 +18,7 @@
  */
 package org.apache.ctakes.coreference.factory;
 
-import org.apache.ctakes.coreference.ae.DeterministicMarkableAnnotator;
-import org.apache.ctakes.coreference.ae.MarkableHeadTreeCreator;
-import org.apache.ctakes.coreference.ae.MarkableSalienceAnnotator;
-import org.apache.ctakes.coreference.ae.MentionClusterCoreferenceAnnotator;
-import org.apache.ctakes.coreference.ae.MipacqMarkableCreator;
-import org.apache.ctakes.coreference.ae.MipacqMarkableExpander;
-import org.apache.ctakes.coreference.ae.MipacqMarkablePairGenerator;
-import org.apache.ctakes.coreference.ae.MipacqSvmChainCreator;
+import org.apache.ctakes.coreference.ae.*;
 import org.apache.uima.analysis_engine.AnalysisEngineDescription;
 import org.apache.uima.fit.factory.AggregateBuilder;
 import org.apache.uima.fit.factory.AnalysisEngineFactory;
@@ -54,7 +47,7 @@ public class CoreferenceAnnotatorFactory
   public static AnalysisEngineDescription getMentionClusterCoreferenceDescription() throws ResourceInitializationException {
     AggregateBuilder builder = new AggregateBuilder();
 
-    // Add markables using syntax: (nouns and pronouns)
+     // Add markables using syntax: (nouns and pronouns)   ; requires TerminalTreeBankNodes (from ConstituencyParser)
     builder.add(AnalysisEngineFactory.createEngineDescription(DeterministicMarkableAnnotator.class));
 
     builder.add(getMentionClusterResolverDescription());