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 2021/02/12 19:08:44 UTC

svn commit: r1886471 - /ctakes/trunk/ctakes-core/src/main/java/org/apache/ctakes/core/cc/MedicationTableFileWriter.java

Author: seanfinan
Date: Fri Feb 12 19:08:44 2021
New Revision: 1886471

URL: http://svn.apache.org/viewvc?rev=1886471&view=rev
Log:
Writes medications and their modifiers to a table in a file.

Added:
    ctakes/trunk/ctakes-core/src/main/java/org/apache/ctakes/core/cc/MedicationTableFileWriter.java

Added: ctakes/trunk/ctakes-core/src/main/java/org/apache/ctakes/core/cc/MedicationTableFileWriter.java
URL: http://svn.apache.org/viewvc/ctakes/trunk/ctakes-core/src/main/java/org/apache/ctakes/core/cc/MedicationTableFileWriter.java?rev=1886471&view=auto
==============================================================================
--- ctakes/trunk/ctakes-core/src/main/java/org/apache/ctakes/core/cc/MedicationTableFileWriter.java (added)
+++ ctakes/trunk/ctakes-core/src/main/java/org/apache/ctakes/core/cc/MedicationTableFileWriter.java Fri Feb 12 19:08:44 2021
@@ -0,0 +1,152 @@
+package org.apache.ctakes.core.cc;
+
+import org.apache.ctakes.core.pipeline.PipeBitInfo;
+import org.apache.ctakes.core.util.annotation.IdentifiedAnnotationUtil;
+import org.apache.ctakes.typesystem.type.refsem.*;
+import org.apache.ctakes.typesystem.type.textsem.*;
+import org.apache.uima.fit.util.JCasUtil;
+import org.apache.uima.jcas.JCas;
+import org.apache.uima.jcas.tcas.Annotation;
+
+import java.util.Arrays;
+import java.util.Comparator;
+import java.util.List;
+import java.util.stream.Collectors;
+
+import static org.apache.ctakes.core.pipeline.PipeBitInfo.TypeProduct.*;
+
+@PipeBitInfo(
+      name = "Medication Table Writer",
+      description = "Writes a table of Medication information to file, sorted by character index.",
+      role = PipeBitInfo.Role.WRITER,
+      dependencies = { DOCUMENT_ID, IDENTIFIED_ANNOTATION },
+      usables = { DOCUMENT_ID_PREFIX }
+)
+public class MedicationTableFileWriter extends AbstractTableFileWriter {
+
+
+   /**
+    * {@inheritDoc}
+    */
+   @Override
+   protected List<String> createHeaderRow( final JCas jCas ) {
+      return Arrays.asList(
+            " Preferred Text ",
+            " Document Text ",
+            " Strength ",
+            " Dose ",
+            " Form ",
+            " Route ",
+            " Frequency ",
+            " Duration " );
+   }
+
+   /**
+    * {@inheritDoc}
+    */
+   @Override
+   protected List<List<String>> createDataRows( final JCas jCas ) {
+      return JCasUtil.select( jCas, MedicationMention.class )
+                     .stream()
+                     .sorted( Comparator.comparingInt( Annotation::getBegin ) )
+                     .map( ModifierRow::new )
+                     .map( ModifierRow::getColumns )
+                     .collect( Collectors.toList() );
+   }
+
+
+   /**
+    * Simple container for annotation information.
+    */
+   static private class ModifierRow {
+
+      private final String _prefText;
+      private final String _docText;
+      private final String _strength;
+      private final String _dose;
+      private final String _form;
+      private final String _route;
+      private final String _frequency;
+      private final String _duration;
+
+      private ModifierRow( final MedicationMention med ) {
+         _prefText = IdentifiedAnnotationUtil.getPreferredTexts( med )
+                                             .stream()
+                                             .sorted()
+                                             .collect( Collectors.joining( ";" ) );
+         _docText = med.getCoveredText();
+         final MedicationStrengthModifier strengthMod = med.getMedicationStrength();
+         if ( strengthMod == null ) {
+            _strength = "";
+         } else {
+            final Attribute strength = strengthMod.getNormalizedForm();
+            _strength = strength instanceof MedicationStrength
+                        ?
+                        ( (MedicationStrength) strength ).getNumber() + " " + ( (MedicationStrength) strength ).getUnit()
+                        : "";
+         }
+         final MedicationDosageModifier doseMod = med.getMedicationDosage();
+         if ( doseMod == null ) {
+            _dose = "";
+         } else {
+            final Attribute dose = doseMod.getNormalizedForm();
+            _dose = dose instanceof MedicationDosage
+                    ? ( (MedicationDosage) dose ).getValue()
+                    : "";
+         }
+         final MedicationFormModifier formMod = med.getMedicationForm();
+         if ( formMod == null ) {
+            _form = "";
+         } else {
+            final Attribute form = formMod.getNormalizedForm();
+            _form = form instanceof MedicationForm
+                    ? ( (MedicationForm) form ).getValue()
+                    : "";
+         }
+         final MedicationRouteModifier routeMod = med.getMedicationRoute();
+         if ( routeMod == null ) {
+            _route = "";
+         } else {
+            final Attribute route = routeMod.getNormalizedForm();
+            _route = route instanceof MedicationRoute
+                     ? ( (MedicationRoute) route ).getValue()
+                     : "";
+         }
+         final MedicationFrequencyModifier freqMod = med.getMedicationFrequency();
+         if ( freqMod == null ) {
+            _frequency = "";
+         } else {
+            final Attribute frequency = freqMod.getNormalizedForm();
+            _frequency = frequency instanceof MedicationFrequency
+                         ? ( (MedicationFrequency) frequency ).getNumber() + " "
+                           + ( (MedicationFrequency) frequency ).getUnit()
+                         : "";
+         }
+         final MedicationDurationModifier durationMod = med.getMedicationDuration();
+         if ( durationMod == null ) {
+            _duration = "";
+         } else {
+            final Attribute duration = durationMod.getNormalizedForm();
+            _duration = duration instanceof MedicationDuration
+                        ? ( (MedicationDuration) duration ).getValue()
+                        : "";
+         }
+      }
+
+      public List<String> getColumns() {
+         return Arrays.asList(
+               _prefText,
+               _docText,
+               _strength,
+               _dose,
+               _form,
+               _route,
+               _frequency.replace( " null", "" ),
+               _duration );
+      }
+
+   }
+
+
+}
+