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 2014/12/08 23:54:45 UTC

svn commit: r1643953 - in /ctakes/trunk/ctakes-dictionary-lookup-fast/src/main/java/org/apache/ctakes/dictionary/lookup2/consumer: DefaultTermConsumer.java PrecisionTermConsumer.java SemanticCleanupTermConsumer.java TermConsumer.java

Author: seanfinan
Date: Mon Dec  8 22:54:44 2014
New Revision: 1643953

URL: http://svn.apache.org/r1643953
Log:
Implemented possible use of secondary coding schemes to add entries to the ontology array.  For instance, without snomedct the ontology array holds 2 "cancer" entries.  With snomedct it holds 16, add icd9 and you get 17.

Modified:
    ctakes/trunk/ctakes-dictionary-lookup-fast/src/main/java/org/apache/ctakes/dictionary/lookup2/consumer/DefaultTermConsumer.java
    ctakes/trunk/ctakes-dictionary-lookup-fast/src/main/java/org/apache/ctakes/dictionary/lookup2/consumer/PrecisionTermConsumer.java
    ctakes/trunk/ctakes-dictionary-lookup-fast/src/main/java/org/apache/ctakes/dictionary/lookup2/consumer/SemanticCleanupTermConsumer.java
    ctakes/trunk/ctakes-dictionary-lookup-fast/src/main/java/org/apache/ctakes/dictionary/lookup2/consumer/TermConsumer.java

Modified: ctakes/trunk/ctakes-dictionary-lookup-fast/src/main/java/org/apache/ctakes/dictionary/lookup2/consumer/DefaultTermConsumer.java
URL: http://svn.apache.org/viewvc/ctakes/trunk/ctakes-dictionary-lookup-fast/src/main/java/org/apache/ctakes/dictionary/lookup2/consumer/DefaultTermConsumer.java?rev=1643953&r1=1643952&r2=1643953&view=diff
==============================================================================
--- ctakes/trunk/ctakes-dictionary-lookup-fast/src/main/java/org/apache/ctakes/dictionary/lookup2/consumer/DefaultTermConsumer.java (original)
+++ ctakes/trunk/ctakes-dictionary-lookup-fast/src/main/java/org/apache/ctakes/dictionary/lookup2/consumer/DefaultTermConsumer.java Mon Dec  8 22:54:44 2014
@@ -54,7 +54,7 @@ final public class DefaultTermConsumer e
     * {@inheritDoc}
     */
    @Override
-   public void consumeTypeIdHits( final JCas jcas, final String codingScheme, final int cTakesSemantic,
+   public void consumeTypeIdHits( final JCas jcas, final String defaultScheme, final int cTakesSemantic,
                                   final CollectionMap<TextSpan, Long, ? extends Collection<Long>> textSpanCuis,
                                   final CollectionMap<Long, Concept, ? extends Collection<Concept>> cuiConcepts )
          throws AnalysisEngineProcessException {
@@ -64,7 +64,7 @@ final public class DefaultTermConsumer e
          for ( Map.Entry<TextSpan, ? extends Collection<Long>> spanCuis : textSpanCuis ) {
             umlsConceptList.clear();
             for ( Long cuiCode : spanCuis.getValue() ) {
-               umlsConceptList.addAll( createUmlsConcepts( jcas, codingScheme, cTakesSemantic, cuiCode, cuiConcepts ) );
+               umlsConceptList.addAll( createUmlsConcepts( jcas, defaultScheme, cTakesSemantic, cuiCode, cuiConcepts ) );
             }
             final FSArray conceptArr = new FSArray( jcas, umlsConceptList.size() );
             int arrIdx = 0;
@@ -111,48 +111,61 @@ final public class DefaultTermConsumer e
       return new EntityMention( jcas );
    }
 
-
    static private Collection<UmlsConcept> createUmlsConcepts( final JCas jcas,
-                                                              final String codingScheme,
+                                                              final String defaultScheme,
                                                               final int cTakesSemantic,
-                                                              final Long cui,
+                                                              final Long cuiCode,
                                                               final CollectionMap<Long, Concept, ? extends Collection<Concept>> conceptMap ) {
-      final Collection<Concept> concepts = conceptMap.getCollection( cui );
+      final Collection<Concept> concepts = conceptMap.getCollection( cuiCode );
       if ( concepts == null || concepts.isEmpty() ) {
-         return Arrays.asList( createUmlsConcept( jcas, codingScheme, cui, null, null, null ) );
+         return Arrays.asList( createUmlsConcept( jcas, defaultScheme,
+               CuiCodeUtil.getAsCui( cuiCode ), null, null, null ) );
       }
       final Collection<UmlsConcept> umlsConcepts = new HashSet<>();
       for ( Concept concept : concepts ) {
-         final String preferredText = concept.getPreferredText();
-         // The cTakes Type System for UmlsConcepts is inadequate.
-         // A single Cui can have multiple Tuis, Snomed and RxNorm and icd codes.
-         // Adding -disconnected- Ontology concepts is not correct, as an ontology concept such as snomed
-         // is actually connected to a cui, semantic type, preferredTerm - and cannot be stored alone just for a span
          final Collection<String> tuis = concept.getCodes( ConceptCode.TUI );
          if ( !tuis.isEmpty() ) {
             for ( String tui : tuis ) {
                // the concept could have tuis outside this cTakes semantic group
                if ( SemanticUtil.getTuiSemanticGroupId( tui ) == cTakesSemantic ) {
-                  umlsConcepts.add( createUmlsConcept( jcas, codingScheme, cui, tui, preferredText, null ) );
+                  umlsConcepts.addAll( createUmlsConcepts( jcas, defaultScheme, tui, concept ) );
                }
             }
          } else {
-            umlsConcepts.add( createUmlsConcept( jcas, codingScheme, cui, null, preferredText, null ) );
+            umlsConcepts.addAll( createUmlsConcepts( jcas, defaultScheme, null, concept ) );
          }
       }
       return umlsConcepts;
    }
 
+   static private Collection<UmlsConcept> createUmlsConcepts( final JCas jcas, final String defaultScheme,
+                                                              final String tui, final Concept concept ) {
+      final Collection<UmlsConcept> concepts = new ArrayList<>();
+      for ( ConceptCode secondaryScheme : ConceptCode.values() ) {
+         if ( secondaryScheme == ConceptCode.TUI ) {
+            continue;
+         }
+         final Collection<String> codes = concept.getCodes( secondaryScheme );
+         if ( codes == null || codes.isEmpty() ) {
+            continue;
+         }
+         for ( String code : codes ) {
+            concepts.add( createUmlsConcept( jcas, secondaryScheme.name(), concept.getCui(), tui,
+                  concept.getPreferredText(), code ) );
+         }
+      }
+      if ( concepts.isEmpty() ) {
+         concepts.add( createUmlsConcept( jcas, defaultScheme, concept.getCui(), tui, concept.getPreferredText(), null ) );
+      }
+      return concepts;
+   }
 
-   // The cTakes Type System UmlsConcepts is inadequate.
-   // A single Cui can have multiple Tuis, Snomed and RxNorm and icd codes.
-   // Propagating a handful of UmlsConcepts for a single Cui with multiple Snomeds creates bloat
    static private UmlsConcept createUmlsConcept( final JCas jcas, final String codingScheme,
-                                                 final Long cuiCode, final String tui,
+                                                 final String cui, final String tui,
                                                  final String preferredText, final String code ) {
       final UmlsConcept umlsConcept = new UmlsConcept( jcas );
       umlsConcept.setCodingScheme( codingScheme );
-      umlsConcept.setCui( CuiCodeUtil.getAsCui( cuiCode ) );
+      umlsConcept.setCui( cui );
       if ( tui != null ) {
          umlsConcept.setTui( tui );
       }
@@ -165,5 +178,4 @@ final public class DefaultTermConsumer e
       return umlsConcept;
    }
 
-
 }

Modified: ctakes/trunk/ctakes-dictionary-lookup-fast/src/main/java/org/apache/ctakes/dictionary/lookup2/consumer/PrecisionTermConsumer.java
URL: http://svn.apache.org/viewvc/ctakes/trunk/ctakes-dictionary-lookup-fast/src/main/java/org/apache/ctakes/dictionary/lookup2/consumer/PrecisionTermConsumer.java?rev=1643953&r1=1643952&r2=1643953&view=diff
==============================================================================
--- ctakes/trunk/ctakes-dictionary-lookup-fast/src/main/java/org/apache/ctakes/dictionary/lookup2/consumer/PrecisionTermConsumer.java (original)
+++ ctakes/trunk/ctakes-dictionary-lookup-fast/src/main/java/org/apache/ctakes/dictionary/lookup2/consumer/PrecisionTermConsumer.java Mon Dec  8 22:54:44 2014
@@ -52,13 +52,13 @@ final public class PrecisionTermConsumer
     * {@inheritDoc}
     */
    @Override
-   public void consumeTypeIdHits( final JCas jcas, final String codingScheme, final int cTakesSemantic,
+   public void consumeTypeIdHits( final JCas jcas, final String defaultScheme, final int cTakesSemantic,
                                   final CollectionMap<TextSpan, Long, ? extends Collection<Long>> semanticTerms,
                                   final CollectionMap<Long, Concept, ? extends Collection<Concept>> conceptMap )
          throws AnalysisEngineProcessException {
       final CollectionMap<TextSpan, Long, ? extends Collection<Long>> preciseTerms
             = createPreciseTerms( semanticTerms );
-      _idHitConsumer.consumeTypeIdHits( jcas, codingScheme, cTakesSemantic, preciseTerms, conceptMap );
+      _idHitConsumer.consumeTypeIdHits( jcas, defaultScheme, cTakesSemantic, preciseTerms, conceptMap );
    }
 
 

Modified: ctakes/trunk/ctakes-dictionary-lookup-fast/src/main/java/org/apache/ctakes/dictionary/lookup2/consumer/SemanticCleanupTermConsumer.java
URL: http://svn.apache.org/viewvc/ctakes/trunk/ctakes-dictionary-lookup-fast/src/main/java/org/apache/ctakes/dictionary/lookup2/consumer/SemanticCleanupTermConsumer.java?rev=1643953&r1=1643952&r2=1643953&view=diff
==============================================================================
--- ctakes/trunk/ctakes-dictionary-lookup-fast/src/main/java/org/apache/ctakes/dictionary/lookup2/consumer/SemanticCleanupTermConsumer.java (original)
+++ ctakes/trunk/ctakes-dictionary-lookup-fast/src/main/java/org/apache/ctakes/dictionary/lookup2/consumer/SemanticCleanupTermConsumer.java Mon Dec  8 22:54:44 2014
@@ -120,11 +120,11 @@ public class SemanticCleanupTermConsumer
     * {@inheritDoc}
     */
    @Override
-   public void consumeTypeIdHits( final JCas jcas, final String codingScheme, final int cTakesSemantic,
+   public void consumeTypeIdHits( final JCas jcas, final String defaultScheme, final int cTakesSemantic,
                                   final CollectionMap<TextSpan, Long, ? extends Collection<Long>> semanticTerms,
                                   final CollectionMap<Long, Concept, ? extends Collection<Concept>> conceptMap )
          throws AnalysisEngineProcessException {
-      _idHitConsumer.consumeTypeIdHits( jcas, codingScheme, cTakesSemantic, semanticTerms, conceptMap );
+      _idHitConsumer.consumeTypeIdHits( jcas, defaultScheme, cTakesSemantic, semanticTerms, conceptMap );
    }
 
 

Modified: ctakes/trunk/ctakes-dictionary-lookup-fast/src/main/java/org/apache/ctakes/dictionary/lookup2/consumer/TermConsumer.java
URL: http://svn.apache.org/viewvc/ctakes/trunk/ctakes-dictionary-lookup-fast/src/main/java/org/apache/ctakes/dictionary/lookup2/consumer/TermConsumer.java?rev=1643953&r1=1643952&r2=1643953&view=diff
==============================================================================
--- ctakes/trunk/ctakes-dictionary-lookup-fast/src/main/java/org/apache/ctakes/dictionary/lookup2/consumer/TermConsumer.java (original)
+++ ctakes/trunk/ctakes-dictionary-lookup-fast/src/main/java/org/apache/ctakes/dictionary/lookup2/consumer/TermConsumer.java Mon Dec  8 22:54:44 2014
@@ -51,11 +51,11 @@ public interface TermConsumer {
 
    /**
     * @param jcas           -
-    * @param codingScheme   -
+    * @param defaultScheme  - name of the coding scheme to use if no secondary (snomed, rxnorm) schemes exist
     * @param cTakesSemantic cTakes IdentifiedAnnotation only accepts an integer as a cTakesSemantic
     * @throws org.apache.uima.analysis_engine.AnalysisEngineProcessException
     */
-   void consumeTypeIdHits( final JCas jcas, final String codingScheme, final int cTakesSemantic,
+   void consumeTypeIdHits( final JCas jcas, final String defaultScheme, final int cTakesSemantic,
                            final CollectionMap<TextSpan, Long, ? extends Collection<Long>> textSpanCuis,
                            final CollectionMap<Long, Concept, ? extends Collection<Concept>> cuiConcepts )
          throws AnalysisEngineProcessException;