You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ctakes.apache.org by dl...@apache.org on 2013/07/22 19:37:17 UTC

svn commit: r1505739 - /ctakes/trunk/ctakes-relation-extractor/src/main/java/org/apache/ctakes/relationextractor/ae/IdentifiedAnnotationExpander.java

Author: dligach
Date: Mon Jul 22 17:37:17 2013
New Revision: 1505739

URL: http://svn.apache.org/r1505739
Log:
added a version of NP expander that simply returns the text of the enclosing NP

Modified:
    ctakes/trunk/ctakes-relation-extractor/src/main/java/org/apache/ctakes/relationextractor/ae/IdentifiedAnnotationExpander.java

Modified: ctakes/trunk/ctakes-relation-extractor/src/main/java/org/apache/ctakes/relationextractor/ae/IdentifiedAnnotationExpander.java
URL: http://svn.apache.org/viewvc/ctakes/trunk/ctakes-relation-extractor/src/main/java/org/apache/ctakes/relationextractor/ae/IdentifiedAnnotationExpander.java?rev=1505739&r1=1505738&r2=1505739&view=diff
==============================================================================
--- ctakes/trunk/ctakes-relation-extractor/src/main/java/org/apache/ctakes/relationextractor/ae/IdentifiedAnnotationExpander.java (original)
+++ ctakes/trunk/ctakes-relation-extractor/src/main/java/org/apache/ctakes/relationextractor/ae/IdentifiedAnnotationExpander.java Mon Jul 22 17:37:17 2013
@@ -68,4 +68,39 @@ public class IdentifiedAnnotationExpande
 
     return originalSpan;
   }
+  
+  public static String getEnclosingNP(JCas jCas, IdentifiedAnnotation identifiedAnnotation) {
+
+    // map each covering treebank node to its character length
+    Map<TreebankNode, Integer> treebankNodeSizes = new HashMap<TreebankNode, Integer>();
+    for(TreebankNode treebankNode : JCasUtil.selectCovering(
+        jCas, 
+        TreebankNode.class, 
+        identifiedAnnotation.getBegin(), 
+        identifiedAnnotation.getEnd())) {
+
+      // only expand nouns (and not verbs or adjectives)
+      if(treebankNode instanceof TerminalTreebankNode) {
+        if(! treebankNode.getNodeType().startsWith("N")) {
+          return identifiedAnnotation.getCoveredText();
+        }
+      }
+
+      // because only nouns are expanded, look for covering NPs
+      if(treebankNode.getNodeType().equals("NP")) {
+        treebankNodeSizes.put(treebankNode, treebankNode.getCoveredText().length());
+      }
+    }
+
+    // find the shortest covering treebank node
+    List<TreebankNode> sortedTreebankNodes = new ArrayList<TreebankNode>(treebankNodeSizes.keySet());
+    Function<TreebankNode, Integer> getValue = Functions.forMap(treebankNodeSizes);
+    Collections.sort(sortedTreebankNodes, Ordering.natural().onResultOf(getValue));
+
+    if(sortedTreebankNodes.size() > 0) {
+      return sortedTreebankNodes.get(0).getCoveredText();
+    } 
+
+    return identifiedAnnotation.getCoveredText();
+  }
 }