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 2018/11/13 17:05:11 UTC
svn commit: r1846527 - in /ctakes/trunk:
ctakes-core/src/main/java/org/apache/ctakes/core/cc/
ctakes-core/src/main/java/org/apache/ctakes/core/cc/html/
ctakes-fhir/src/main/java/org/apache/ctakes/fhir/cc/
ctakes-fhir/src/main/java/org/apache/ctakes/fhi...
Author: seanfinan
Date: Tue Nov 13 17:05:11 2018
New Revision: 1846527
URL: http://svn.apache.org/viewvc?rev=1846527&view=rev
Log:
HtmlTextWriter : null check for section id
CuiListFileWriter : change from simple write to bsv table
Fhir : add basetoken, sentence, paragraph, file writer, refactoring
Added:
ctakes/trunk/ctakes-fhir/src/main/java/org/apache/ctakes/fhir/cc/FhirJsonFileWriter.java
ctakes/trunk/ctakes-fhir/src/main/java/org/apache/ctakes/fhir/cr/FhirJsonFileReader.java
ctakes/trunk/ctakes-fhir/src/main/java/org/apache/ctakes/fhir/resource/AnnotationCreator.java
- copied, changed from r1846526, ctakes/trunk/ctakes-fhir/src/main/java/org/apache/ctakes/fhir/resource/AnnotationBasicCreator.java
ctakes/trunk/ctakes-fhir/src/main/java/org/apache/ctakes/fhir/resource/AnnotationParser.java
- copied, changed from r1846526, ctakes/trunk/ctakes-fhir/src/main/java/org/apache/ctakes/fhir/resource/AnnotationBasicParser.java
ctakes/trunk/ctakes-fhir/src/main/java/org/apache/ctakes/fhir/resource/BaseTokenCreator.java
ctakes/trunk/ctakes-fhir/src/main/java/org/apache/ctakes/fhir/resource/BaseTokenParser.java
ctakes/trunk/ctakes-fhir/src/main/java/org/apache/ctakes/fhir/resource/CompositionParser.java
ctakes/trunk/ctakes-fhir/src/main/java/org/apache/ctakes/fhir/resource/FhirBasicCreator.java
ctakes/trunk/ctakes-fhir/src/main/java/org/apache/ctakes/fhir/resource/FhirBasicParser.java
ctakes/trunk/ctakes-fhir/src/main/java/org/apache/ctakes/fhir/resource/IdentifiedAnnotationCreator.java
- copied, changed from r1846526, ctakes/trunk/ctakes-fhir/src/main/java/org/apache/ctakes/fhir/resource/IdentifiedAnnotationBasicCreator.java
ctakes/trunk/ctakes-fhir/src/main/java/org/apache/ctakes/fhir/resource/IdentifiedAnnotationParser.java
- copied, changed from r1846526, ctakes/trunk/ctakes-fhir/src/main/java/org/apache/ctakes/fhir/resource/IdentifiedAnnotationBasicParser.java
ctakes/trunk/ctakes-fhir/src/main/java/org/apache/ctakes/fhir/resource/ParagraphCreator.java
ctakes/trunk/ctakes-fhir/src/main/java/org/apache/ctakes/fhir/resource/ParagraphParser.java
ctakes/trunk/ctakes-fhir/src/main/java/org/apache/ctakes/fhir/resource/SectionCreator.java
- copied, changed from r1846526, ctakes/trunk/ctakes-fhir/src/main/java/org/apache/ctakes/fhir/resource/SectionBasicCreator.java
ctakes/trunk/ctakes-fhir/src/main/java/org/apache/ctakes/fhir/resource/SectionParser.java
- copied, changed from r1846526, ctakes/trunk/ctakes-fhir/src/main/java/org/apache/ctakes/fhir/resource/SectionBasicParser.java
ctakes/trunk/ctakes-fhir/src/main/java/org/apache/ctakes/fhir/resource/SentenceCreator.java
ctakes/trunk/ctakes-fhir/src/main/java/org/apache/ctakes/fhir/resource/SentenceParser.java
Removed:
ctakes/trunk/ctakes-fhir/src/main/java/org/apache/ctakes/fhir/resource/AnnotationBasicCreator.java
ctakes/trunk/ctakes-fhir/src/main/java/org/apache/ctakes/fhir/resource/AnnotationBasicParser.java
ctakes/trunk/ctakes-fhir/src/main/java/org/apache/ctakes/fhir/resource/IdentifiedAnnotationBasicCreator.java
ctakes/trunk/ctakes-fhir/src/main/java/org/apache/ctakes/fhir/resource/IdentifiedAnnotationBasicParser.java
ctakes/trunk/ctakes-fhir/src/main/java/org/apache/ctakes/fhir/resource/SectionBasicCreator.java
ctakes/trunk/ctakes-fhir/src/main/java/org/apache/ctakes/fhir/resource/SectionBasicParser.java
Modified:
ctakes/trunk/ctakes-core/src/main/java/org/apache/ctakes/core/cc/CuiListFileWriter.java
ctakes/trunk/ctakes-core/src/main/java/org/apache/ctakes/core/cc/html/HtmlTextWriter.java
ctakes/trunk/ctakes-fhir/src/main/java/org/apache/ctakes/fhir/cc/FhirDocComposer.java
ctakes/trunk/ctakes-fhir/src/main/java/org/apache/ctakes/fhir/cc/FhirJsonWriter.java
ctakes/trunk/ctakes-fhir/src/main/java/org/apache/ctakes/fhir/cr/FhirXmlFileReader.java
ctakes/trunk/ctakes-fhir/src/main/java/org/apache/ctakes/fhir/element/FhirElementFactory.java
Modified: ctakes/trunk/ctakes-core/src/main/java/org/apache/ctakes/core/cc/CuiListFileWriter.java
URL: http://svn.apache.org/viewvc/ctakes/trunk/ctakes-core/src/main/java/org/apache/ctakes/core/cc/CuiListFileWriter.java?rev=1846527&r1=1846526&r2=1846527&view=diff
==============================================================================
--- ctakes/trunk/ctakes-core/src/main/java/org/apache/ctakes/core/cc/CuiListFileWriter.java (original)
+++ ctakes/trunk/ctakes-core/src/main/java/org/apache/ctakes/core/cc/CuiListFileWriter.java Tue Nov 13 17:05:11 2018
@@ -2,7 +2,12 @@ package org.apache.ctakes.core.cc;
import org.apache.ctakes.core.pipeline.PipeBitInfo;
+import org.apache.ctakes.core.semantic.SemanticTui;
import org.apache.ctakes.core.util.OntologyConceptUtil;
+import org.apache.ctakes.core.util.RelationArgumentUtil;
+import org.apache.ctakes.typesystem.type.constants.CONST;
+import org.apache.ctakes.typesystem.type.refsem.UmlsConcept;
+import org.apache.ctakes.typesystem.type.relation.LocationOfTextRelation;
import org.apache.ctakes.typesystem.type.textsem.IdentifiedAnnotation;
import org.apache.log4j.Logger;
import org.apache.uima.fit.util.JCasUtil;
@@ -10,6 +15,7 @@ import org.apache.uima.jcas.JCas;
import java.io.*;
import java.util.Collection;
+import java.util.stream.Collectors;
import static org.apache.ctakes.core.pipeline.PipeBitInfo.TypeProduct.*;
@@ -32,8 +38,8 @@ public class CuiListFileWriter extends A
/**
* {@inheritDoc}
*/
- @Override
- public void writeFile( final JCas jCas,
+// @Override
+ public void writeFile1( final JCas jCas,
final String outputDir,
final String documentId,
final String fileName ) throws IOException {
@@ -55,4 +61,52 @@ public class CuiListFileWriter extends A
LOGGER.info( "Finished Writing" );
}
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public void writeFile( final JCas jCas,
+ final String outputDir,
+ final String documentId,
+ final String fileName ) throws IOException {
+ final File file = new File( outputDir, fileName + "_annotationInfo.bsv" );
+ LOGGER.info( "Writing Annotation Information to " + file.getPath() + " ..." );
+ final Collection<IdentifiedAnnotation> annotations = JCasUtil.select( jCas, IdentifiedAnnotation.class );
+ final Collection<LocationOfTextRelation> locations = JCasUtil.select( jCas, LocationOfTextRelation.class );
+ try ( Writer writer = new BufferedWriter( new FileWriter( file ) ) ) {
+ writer.write( "CUI | Concept | Semantic Group | Negated | Family History | Location | Document Text\n" );
+ for ( IdentifiedAnnotation annotation : annotations ) {
+ writer.write( createBsvLines( annotation, locations ) );
+ }
+ }
+ LOGGER.info( "Finished Writing" );
+ }
+
+ static private String createBsvLines( final IdentifiedAnnotation annotation,
+ final Collection<LocationOfTextRelation> locationRelations ) {
+ final String locationCuis
+ = RelationArgumentUtil.getAllRelated( locationRelations, annotation ).stream()
+ .map( OntologyConceptUtil::getCuis )
+ .flatMap( Collection::stream )
+ .collect( Collectors.joining( ";" ) );
+ return OntologyConceptUtil.getUmlsConceptStream( annotation )
+ .map( c -> createBsvLine( annotation, c, locationCuis ) )
+ .collect( Collectors.joining( "\n" ) );
+ }
+
+ static private String createBsvLine( final IdentifiedAnnotation annotation,
+ final UmlsConcept concept,
+ final String locationCuis ) {
+ final StringBuilder sb = new StringBuilder();
+ sb.append( concept.getCode() ).append( '|' )
+ .append( concept.getPreferredText() ).append( '|' )
+ .append( SemanticTui.getTuiFromCode( concept.getTui() ).getGroupName() ).append( '|' )
+ .append( annotation.getPolarity() == CONST.NE_POLARITY_NEGATION_PRESENT ? "true" : "false" ).append( '|' )
+ .append( annotation.getSubject().equals( CONST.ATTR_SUBJECT_FAMILY_MEMBER ) ? "true" : "false" ).append( '|' )
+ .append( locationCuis ).append( '|' )
+ .append( annotation.getCoveredText() );
+ return sb.toString();
+ }
+
}
+
Modified: ctakes/trunk/ctakes-core/src/main/java/org/apache/ctakes/core/cc/html/HtmlTextWriter.java
URL: http://svn.apache.org/viewvc/ctakes/trunk/ctakes-core/src/main/java/org/apache/ctakes/core/cc/html/HtmlTextWriter.java?rev=1846527&r1=1846526&r2=1846527&view=diff
==============================================================================
--- ctakes/trunk/ctakes-core/src/main/java/org/apache/ctakes/core/cc/html/HtmlTextWriter.java (original)
+++ ctakes/trunk/ctakes-core/src/main/java/org/apache/ctakes/core/cc/html/HtmlTextWriter.java Tue Nov 13 17:05:11 2018
@@ -721,7 +721,7 @@ final public class HtmlTextWriter extend
*/
static private void writeSectionHeader( final Segment section, final BufferedWriter writer ) throws IOException {
String sectionId = section.getId();
- if ( sectionId.equals( "SIMPLE_SEGMENT" ) ) {
+ if ( sectionId == null || sectionId.equals( "SIMPLE_SEGMENT" ) ) {
return;
}
final StringBuilder sb = new StringBuilder();
Modified: ctakes/trunk/ctakes-fhir/src/main/java/org/apache/ctakes/fhir/cc/FhirDocComposer.java
URL: http://svn.apache.org/viewvc/ctakes/trunk/ctakes-fhir/src/main/java/org/apache/ctakes/fhir/cc/FhirDocComposer.java?rev=1846527&r1=1846526&r2=1846527&view=diff
==============================================================================
--- ctakes/trunk/ctakes-fhir/src/main/java/org/apache/ctakes/fhir/cc/FhirDocComposer.java (original)
+++ ctakes/trunk/ctakes-fhir/src/main/java/org/apache/ctakes/fhir/cc/FhirDocComposer.java Tue Nov 13 17:05:11 2018
@@ -7,8 +7,11 @@ import org.apache.ctakes.fhir.resource.*
import org.apache.ctakes.fhir.util.FhirNoteSpecs;
import org.apache.ctakes.typesystem.type.relation.BinaryTextRelation;
import org.apache.ctakes.typesystem.type.relation.RelationArgument;
+import org.apache.ctakes.typesystem.type.syntax.BaseToken;
import org.apache.ctakes.typesystem.type.textsem.IdentifiedAnnotation;
+import org.apache.ctakes.typesystem.type.textspan.Paragraph;
import org.apache.ctakes.typesystem.type.textspan.Segment;
+import org.apache.ctakes.typesystem.type.textspan.Sentence;
import org.apache.log4j.Logger;
import org.apache.uima.fit.util.JCasUtil;
import org.apache.uima.jcas.JCas;
@@ -19,6 +22,7 @@ import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
+import java.util.stream.Collectors;
/**
* Creates a complete fhir bundle for a note.
@@ -38,15 +42,17 @@ final public class FhirDocComposer {
/**
* @param jCas ye olde ...
* @param practitioner fhir practitioner. Usually the default "ctakes" practitioner.
+ * @param writeNlpFhir write all nlp information (paragraph, sentence, base annotations) to fhir.
* @return a complete fhir bundle for a note.
*/
- static public Bundle composeDocFhir( final JCas jCas, final FhirPractitioner practitioner ) {
+ static public Bundle composeDocFhir( final JCas jCas, final FhirPractitioner practitioner,
+ final boolean writeNlpFhir ) {
final FhirNoteSpecs noteSpecs = new FhirNoteSpecs( jCas );
// creators
final CompositionCreator compositionCreator = new CompositionCreator();
- final FhirResourceCreator<Segment, Basic> sectionCreator = new SectionBasicCreator();
- final FhirResourceCreator<IdentifiedAnnotation, Basic> iaCreator = new IdentifiedAnnotationBasicCreator();
- final FhirResourceCreator<Annotation, Basic> aCreator = new AnnotationBasicCreator();
+ final FhirResourceCreator<Segment, Basic> sectionCreator = new SectionCreator();
+ final FhirResourceCreator<IdentifiedAnnotation, Basic> iaCreator = new IdentifiedAnnotationCreator();
+ final FhirResourceCreator<Annotation, Basic> aCreator = new AnnotationCreator();
// essential types
final Map<Segment, Collection<IdentifiedAnnotation>> sectionAnnotationMap
= JCasUtil.indexCovered( jCas, Segment.class, IdentifiedAnnotation.class );
@@ -62,7 +68,7 @@ final public class FhirDocComposer {
final String segmentId = segment.getId();
final Basic section = sectionCreator.createResource( jCas, sectionAnnotations.getKey(), practitioner,
noteSpecs );
- if ( !segmentId.isEmpty() && !segmentId.equals( SIMPLE_SECTION ) ) {
+ if ( writeNlpFhir || (!segmentId.isEmpty() && !segmentId.equals( SIMPLE_SECTION )) ) {
sections.add( section );
}
final Reference sectionRef = new Reference( section );
@@ -85,6 +91,14 @@ final public class FhirDocComposer {
}
// Add relations as reference extensions.
final Map<Annotation, Basic> simpleAnnotationBasics = new HashMap<>();
+
+ if ( writeNlpFhir ) {
+ final BaseTokenCreator baseTokenCreator = new BaseTokenCreator();
+ JCasUtil.select( jCas, BaseToken.class )
+ .forEach( b -> simpleAnnotationBasics.put( b,
+ baseTokenCreator.createResource( jCas, b, practitioner, noteSpecs ) ) );
+ }
+
addRelations( jCas, practitioner, noteSpecs, aCreator, annotationBasics, simpleAnnotationBasics );
// Create a Bundle
final Composition composition = compositionCreator.createResource( jCas, null, practitioner, noteSpecs );
@@ -95,6 +109,23 @@ final public class FhirDocComposer {
addBundleResources( bundle, sections );
addBundleResources( bundle, annotationBasics.values() );
addBundleResources( bundle, simpleAnnotationBasics.values() );
+
+ if ( writeNlpFhir ) {
+ final ParagraphCreator paragraphCreator = new ParagraphCreator();
+ final Collection<Basic> paragraphs
+ = JCasUtil.select( jCas, Paragraph.class ).stream()
+ .map( p -> paragraphCreator.createResource( jCas, p, practitioner, noteSpecs ) )
+ .collect( Collectors.toList() );
+ addBundleResources( bundle, paragraphs );
+
+ final SentenceCreator sentenceCreator = new SentenceCreator();
+ final Collection<Basic> sentences
+ = JCasUtil.select( jCas, Sentence.class ).stream()
+ .map( s -> sentenceCreator.createResource( jCas, s, practitioner, noteSpecs ) )
+ .collect( Collectors.toList() );
+ addBundleResources( bundle, sentences );
+ }
+
return bundle;
}
Added: ctakes/trunk/ctakes-fhir/src/main/java/org/apache/ctakes/fhir/cc/FhirJsonFileWriter.java
URL: http://svn.apache.org/viewvc/ctakes/trunk/ctakes-fhir/src/main/java/org/apache/ctakes/fhir/cc/FhirJsonFileWriter.java?rev=1846527&view=auto
==============================================================================
--- ctakes/trunk/ctakes-fhir/src/main/java/org/apache/ctakes/fhir/cc/FhirJsonFileWriter.java (added)
+++ ctakes/trunk/ctakes-fhir/src/main/java/org/apache/ctakes/fhir/cc/FhirJsonFileWriter.java Tue Nov 13 17:05:11 2018
@@ -0,0 +1,76 @@
+package org.apache.ctakes.fhir.cc;
+
+import ca.uhn.fhir.context.FhirContext;
+import ca.uhn.fhir.parser.IParser;
+import org.apache.ctakes.core.cc.AbstractJCasFileWriter;
+import org.apache.ctakes.core.config.ConfigParameterConstants;
+import org.apache.ctakes.core.pipeline.PipeBitInfo;
+import org.apache.ctakes.fhir.resource.PractitionerCtakes;
+import org.apache.log4j.Logger;
+import org.apache.uima.analysis_engine.AnalysisEngine;
+import org.apache.uima.fit.descriptor.ConfigurationParameter;
+import org.apache.uima.fit.factory.AnalysisEngineFactory;
+import org.apache.uima.jcas.JCas;
+import org.apache.uima.resource.ResourceInitializationException;
+import org.hl7.fhir.dstu3.model.Bundle;
+
+import java.io.*;
+
+
+/**
+ * @author SPF , chip-nlp
+ * @version %I%
+ * @since 11/9/2018
+ */
+@PipeBitInfo(
+ name = "FHIR JSON File Writer (Dir Tree)",
+ description = "Writes Json files with full representation of input text and all extracted information.",
+ role = PipeBitInfo.Role.WRITER,
+ dependencies = { PipeBitInfo.TypeProduct.DOCUMENT_ID },
+ usables = { PipeBitInfo.TypeProduct.DOCUMENT_ID_PREFIX }
+)
+public class FhirJsonFileWriter extends AbstractJCasFileWriter {
+
+ @ConfigurationParameter(
+ name = "WriteNlpFhir",
+ description = "Write all nlp information (paragraph, sentence, base annotations) to FHIR.",
+ mandatory = false,
+ defaultValue = "false"
+ )
+ private boolean _writeNlpFhir;
+
+ static private final Logger LOGGER = Logger.getLogger( "FhirJsonFileWriter" );
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public void writeFile( final JCas jCas, final String outputDir,
+ final String documentId, final String fileName ) throws IOException {
+ final Bundle bundle = FhirDocComposer.composeDocFhir( jCas, PractitionerCtakes.getInstance(), _writeNlpFhir );
+
+ final FhirContext fhirContext = FhirContext.forDstu3();
+ final IParser jsonParser = fhirContext.newJsonParser();
+ jsonParser.setPrettyPrint( true );
+ final String json = jsonParser.encodeResourceToString( bundle );
+
+ final File file = new File( outputDir, fileName + ".json" );
+ try ( Writer writer = new BufferedWriter( new FileWriter( file ) ) ) {
+ writer.write( json );
+ }
+ }
+
+ public static AnalysisEngine createEngine( final String outputDirectory ) throws ResourceInitializationException {
+ return AnalysisEngineFactory
+ .createEngine( FhirJsonFileWriter.class, ConfigParameterConstants.PARAM_OUTPUTDIR, outputDirectory );
+ }
+
+ public static AnalysisEngine createEngine( final String outputDirectory,
+ final String subDirectory ) throws ResourceInitializationException {
+ return AnalysisEngineFactory
+ .createEngine( FhirJsonFileWriter.class, ConfigParameterConstants.PARAM_OUTPUTDIR, outputDirectory,
+ ConfigParameterConstants.PARAM_SUBDIR, subDirectory );
+ }
+
+
+}
Modified: ctakes/trunk/ctakes-fhir/src/main/java/org/apache/ctakes/fhir/cc/FhirJsonWriter.java
URL: http://svn.apache.org/viewvc/ctakes/trunk/ctakes-fhir/src/main/java/org/apache/ctakes/fhir/cc/FhirJsonWriter.java?rev=1846527&r1=1846526&r2=1846527&view=diff
==============================================================================
--- ctakes/trunk/ctakes-fhir/src/main/java/org/apache/ctakes/fhir/cc/FhirJsonWriter.java (original)
+++ ctakes/trunk/ctakes-fhir/src/main/java/org/apache/ctakes/fhir/cc/FhirJsonWriter.java Tue Nov 13 17:05:11 2018
@@ -20,8 +20,9 @@ import org.hl7.fhir.dstu3.model.Bundle;
* @since 12/20/2017
*/
@PipeBitInfo(
- name = "FhirJsonWriter",
- description = "For ctakes_401.", role = PipeBitInfo.Role.WRITER
+ name = "FHIR JSON Writer",
+ description = "Writes Json to standard output with full representation of input text and all extracted information.",
+ role = PipeBitInfo.Role.WRITER
)
final public class FhirJsonWriter extends JCasAnnotator_ImplBase {
@@ -46,7 +47,7 @@ final public class FhirJsonWriter extend
public void process( final JCas jCas ) throws AnalysisEngineProcessException {
LOGGER.info( "Processing ..." );
- final Bundle bundle = FhirDocComposer.composeDocFhir( jCas, PractitionerCtakes.getInstance() );
+ final Bundle bundle = FhirDocComposer.composeDocFhir( jCas, PractitionerCtakes.getInstance(), false );
final FhirContext fhirContext = FhirContext.forDstu3();
final IParser jsonParser = fhirContext.newJsonParser();
Added: ctakes/trunk/ctakes-fhir/src/main/java/org/apache/ctakes/fhir/cr/FhirJsonFileReader.java
URL: http://svn.apache.org/viewvc/ctakes/trunk/ctakes-fhir/src/main/java/org/apache/ctakes/fhir/cr/FhirJsonFileReader.java?rev=1846527&view=auto
==============================================================================
--- ctakes/trunk/ctakes-fhir/src/main/java/org/apache/ctakes/fhir/cr/FhirJsonFileReader.java (added)
+++ ctakes/trunk/ctakes-fhir/src/main/java/org/apache/ctakes/fhir/cr/FhirJsonFileReader.java Tue Nov 13 17:05:11 2018
@@ -0,0 +1,196 @@
+package org.apache.ctakes.fhir.cr;
+
+import ca.uhn.fhir.context.ConfigurationException;
+import ca.uhn.fhir.context.FhirContext;
+import ca.uhn.fhir.parser.DataFormatException;
+import ca.uhn.fhir.parser.IParser;
+import org.apache.ctakes.core.cr.AbstractFileTreeReader;
+import org.apache.ctakes.core.pipeline.PipeBitInfo;
+import org.apache.ctakes.core.util.RelationArgumentUtil;
+import org.apache.ctakes.fhir.element.FhirElementParser;
+import org.apache.ctakes.fhir.resource.*;
+import org.apache.ctakes.typesystem.type.relation.BinaryTextRelation;
+import org.apache.ctakes.typesystem.type.textsem.IdentifiedAnnotation;
+import org.apache.log4j.Logger;
+import org.apache.uima.jcas.JCas;
+import org.apache.uima.jcas.tcas.Annotation;
+import org.hl7.fhir.dstu3.model.*;
+import org.hl7.fhir.instance.model.api.IBaseResource;
+import org.hl7.fhir.utilities.xhtml.XhtmlNode;
+
+import java.io.*;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import static org.apache.ctakes.fhir.element.FhirElementFactory.CTAKES_FHIR_URL;
+import static org.apache.ctakes.fhir.element.FhirElementFactory.RELATION_EXT_PREFIX;
+import static org.apache.ctakes.fhir.resource.AnnotationCreator.ID_NAME_ANNOTATION;
+import static org.apache.ctakes.fhir.resource.BaseTokenCreator.ID_NAME_BASE_TOKEN;
+import static org.apache.ctakes.fhir.resource.IdentifiedAnnotationCreator.ID_NAME_IDENTIFIED_ANNOTATION;
+import static org.apache.ctakes.fhir.resource.ParagraphCreator.ID_NAME_PARAGRAPH;
+import static org.apache.ctakes.fhir.resource.SectionCreator.ID_NAME_SECTION;
+import static org.apache.ctakes.fhir.resource.SentenceCreator.ID_NAME_SENTENCE;
+import static org.hl7.fhir.dstu3.model.Bundle.BundleEntryComponent;
+
+
+/**
+ * Unfinished collection reader to create ctakes annotations from fhir files.
+ *
+ * @author SPF , chip-nlp
+ * @version %I%
+ * @since 1/22/2018
+ */
+@PipeBitInfo(
+ name = "FhirJsonFileReader",
+ description = "Reads fhir information from json.", role = PipeBitInfo.Role.READER
+)
+public class FhirJsonFileReader extends AbstractFileTreeReader {
+
+ static private final Logger LOGGER = Logger.getLogger( "FhirJsonFileReader" );
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ protected void readFile( final JCas jCas, final File file ) throws IOException {
+ jCas.reset();
+
+ final Bundle bundle = readBundle( file );
+
+ final CompositionParser compositionParser = new CompositionParser();
+ final SectionParser sectionParser = new SectionParser();
+ final ParagraphParser paragraphParser = new ParagraphParser();
+ final SentenceParser sentenceParser = new SentenceParser();
+ final BaseTokenParser baseTokenParser = new BaseTokenParser();
+ final AnnotationParser annotationParser = new AnnotationParser();
+ final IdentifiedAnnotationParser iaParser = new IdentifiedAnnotationParser();
+ // Build map of resources to annotations, sections, etc.
+ final List<BundleEntryComponent> entries = bundle.getEntry();
+ final Map<IBaseResource, Annotation> resourceAnnotations = new HashMap<>( entries.size() );
+ for ( BundleEntryComponent entry : entries ) {
+ final IBaseResource resource = entry.getResource();
+ final Annotation annotation = parseResource( jCas, resource,
+ compositionParser, sectionParser, paragraphParser, sentenceParser, baseTokenParser,
+ annotationParser, iaParser );
+ if ( annotation != null ) {
+ resourceAnnotations.put( resource, annotation );
+ }
+ }
+
+ // Go through the (Basic) entries in the map and build relations
+ for ( Map.Entry<IBaseResource, Annotation> resourceAnnotation : resourceAnnotations.entrySet() ) {
+ if ( !Basic.class.isInstance( resourceAnnotation.getKey() ) ) {
+ continue;
+ }
+ final Basic basic = (Basic)resourceAnnotation.getKey();
+ final List<Extension> extensions = basic.getExtension();
+ for ( Extension extension : extensions ) {
+ final String url = extension.getUrl();
+ if ( url.startsWith( CTAKES_FHIR_URL + RELATION_EXT_PREFIX ) ) {
+ final Type type = extension.getValue();
+ if ( type instanceof Reference ) {
+ final IBaseResource resource = ((Reference)type).getResource();
+ final Annotation target = resourceAnnotations.get( resource );
+ if ( target != null ) {
+ createRelation( jCas, url, resourceAnnotation.getValue(), target );
+ }
+ }
+ }
+ }
+ }
+
+ // TODO build Map<Integer,Collection<Annotation>> with coref chain index to annotations that belong from the Basic Extensions
+ }
+
+
+ static private void createRelation( final JCas jCas, final String url,
+ final Annotation source, final Annotation target ) {
+ if ( source instanceof IdentifiedAnnotation && target instanceof IdentifiedAnnotation ) {
+ final String category = url.substring( (CTAKES_FHIR_URL + RELATION_EXT_PREFIX).length() );
+ final BinaryTextRelation relation
+ = RelationArgumentUtil.createRelation( jCas, (IdentifiedAnnotation)source, (IdentifiedAnnotation)target,
+ category );
+ relation.addToIndexes();
+ }
+ }
+
+
+ // TODO
+ static private void createCoreference( final JCas jCas, Collection<Annotation> marked ) {
+
+ }
+
+
+ static private Annotation parseResource( final JCas jCas,
+ final IBaseResource resource,
+ final CompositionParser compositionParser,
+ final SectionParser sectionParser,
+ final ParagraphParser paragraphParser,
+ final SentenceParser sentenceParser,
+ final BaseTokenParser baseTokenParser,
+ final AnnotationParser annotationParser,
+ final IdentifiedAnnotationParser iaParser ) {
+ if ( resource instanceof Composition ) {
+ final Narrative narrative = ((Composition)resource).getText();
+ final XhtmlNode html = narrative.getDiv();
+ final String docText = html.allText();
+ jCas.setDocumentText( docText );
+ return null;
+ }
+ Annotation annotation = null;
+ if ( resource instanceof Basic ) {
+ final Basic basic = (Basic)resource;
+ final String idName = FhirElementParser.getIdName( basic.getId() );
+ switch ( idName ) {
+ case ID_NAME_SECTION:
+ annotation = sectionParser.parseResource( jCas, basic );
+ break;
+ case ID_NAME_PARAGRAPH:
+ annotation = paragraphParser.parseResource( jCas, basic );
+ break;
+ case ID_NAME_SENTENCE:
+ annotation = sentenceParser.parseResource( jCas, basic );
+ break;
+ case ID_NAME_BASE_TOKEN:
+ annotation = baseTokenParser.parseResource( jCas, basic );
+ break;
+ case ID_NAME_ANNOTATION:
+ annotation = annotationParser.parseResource( jCas, basic );
+ break;
+ case ID_NAME_IDENTIFIED_ANNOTATION:
+ annotation = iaParser.parseResource( jCas, basic );
+ break;
+ }
+ if ( annotation != null ) {
+ annotation.addToIndexes();
+ return annotation;
+ }
+ }
+ return null;
+ }
+
+
+ static private Bundle readBundle( final File file ) throws IOException {
+ IBaseResource baseResource;
+ final FhirContext fhirContext = FhirContext.forDstu3();
+ final IParser jsonParser = fhirContext.newJsonParser();
+ try ( Reader reader = new BufferedReader( new FileReader( file ) ) ) {
+ baseResource = jsonParser.parseResource( reader );
+
+ } catch ( IOException | ConfigurationException | DataFormatException multE ) {
+ LOGGER.error( "Could not read fhir from " + file.getAbsolutePath(), multE );
+ throw new IOException( multE );
+ }
+ if ( baseResource == null ) {
+ throw new IOException( "Null Bundle for file " + file.getAbsolutePath() );
+ }
+ if ( !Bundle.class.isInstance( baseResource ) ) {
+ throw new IOException( "Resource is not a Bundle for file " + file.getAbsolutePath() );
+ }
+ return (Bundle)baseResource;
+ }
+
+
+}
Modified: ctakes/trunk/ctakes-fhir/src/main/java/org/apache/ctakes/fhir/cr/FhirXmlFileReader.java
URL: http://svn.apache.org/viewvc/ctakes/trunk/ctakes-fhir/src/main/java/org/apache/ctakes/fhir/cr/FhirXmlFileReader.java?rev=1846527&r1=1846526&r2=1846527&view=diff
==============================================================================
--- ctakes/trunk/ctakes-fhir/src/main/java/org/apache/ctakes/fhir/cr/FhirXmlFileReader.java (original)
+++ ctakes/trunk/ctakes-fhir/src/main/java/org/apache/ctakes/fhir/cr/FhirXmlFileReader.java Tue Nov 13 17:05:11 2018
@@ -8,9 +8,9 @@ import org.apache.ctakes.core.cr.Abstrac
import org.apache.ctakes.core.pipeline.PipeBitInfo;
import org.apache.ctakes.core.util.RelationArgumentUtil;
import org.apache.ctakes.fhir.element.FhirElementParser;
-import org.apache.ctakes.fhir.resource.AnnotationBasicParser;
-import org.apache.ctakes.fhir.resource.IdentifiedAnnotationBasicParser;
-import org.apache.ctakes.fhir.resource.SectionBasicParser;
+import org.apache.ctakes.fhir.resource.AnnotationParser;
+import org.apache.ctakes.fhir.resource.IdentifiedAnnotationParser;
+import org.apache.ctakes.fhir.resource.SectionParser;
import org.apache.ctakes.typesystem.type.relation.BinaryTextRelation;
import org.apache.ctakes.typesystem.type.textsem.IdentifiedAnnotation;
import org.apache.log4j.Logger;
@@ -28,9 +28,9 @@ import java.util.Map;
import static org.apache.ctakes.fhir.element.FhirElementFactory.CTAKES_FHIR_URL;
import static org.apache.ctakes.fhir.element.FhirElementFactory.RELATION_EXT_PREFIX;
-import static org.apache.ctakes.fhir.resource.AnnotationBasicCreator.ID_NAME_ANNOTATION;
-import static org.apache.ctakes.fhir.resource.IdentifiedAnnotationBasicCreator.ID_NAME_IDENTIFIED_ANNOTATION;
-import static org.apache.ctakes.fhir.resource.SectionBasicCreator.ID_NAME_SECTION;
+import static org.apache.ctakes.fhir.resource.AnnotationCreator.ID_NAME_ANNOTATION;
+import static org.apache.ctakes.fhir.resource.IdentifiedAnnotationCreator.ID_NAME_IDENTIFIED_ANNOTATION;
+import static org.apache.ctakes.fhir.resource.SectionCreator.ID_NAME_SECTION;
import static org.hl7.fhir.dstu3.model.Bundle.BundleEntryComponent;
@@ -58,9 +58,9 @@ public class FhirXmlFileReader extends A
final Bundle bundle = readBundle( file );
- final SectionBasicParser sectionParser = new SectionBasicParser();
- final AnnotationBasicParser annotationParser = new AnnotationBasicParser();
- final IdentifiedAnnotationBasicParser iaParser = new IdentifiedAnnotationBasicParser();
+ final SectionParser sectionParser = new SectionParser();
+ final AnnotationParser annotationParser = new AnnotationParser();
+ final IdentifiedAnnotationParser iaParser = new IdentifiedAnnotationParser();
// Build map of resources to annotations, sections, etc.
final List<BundleEntryComponent> entries = bundle.getEntry();
final Map<IBaseResource, Annotation> resourceAnnotations = new HashMap<>( entries.size() );
@@ -118,9 +118,9 @@ public class FhirXmlFileReader extends A
static private Annotation parseResource( final JCas jCas,
final IBaseResource resource,
- final SectionBasicParser sectionParser,
- final AnnotationBasicParser annotationParser,
- final IdentifiedAnnotationBasicParser iaParser ) {
+ final SectionParser sectionParser,
+ final AnnotationParser annotationParser,
+ final IdentifiedAnnotationParser iaParser ) {
if ( resource instanceof Composition ) {
final Narrative narrative = ((Composition) resource).getText();
final XhtmlNode html = narrative.getDiv();
Modified: ctakes/trunk/ctakes-fhir/src/main/java/org/apache/ctakes/fhir/element/FhirElementFactory.java
URL: http://svn.apache.org/viewvc/ctakes/trunk/ctakes-fhir/src/main/java/org/apache/ctakes/fhir/element/FhirElementFactory.java?rev=1846527&r1=1846526&r2=1846527&view=diff
==============================================================================
--- ctakes/trunk/ctakes-fhir/src/main/java/org/apache/ctakes/fhir/element/FhirElementFactory.java (original)
+++ ctakes/trunk/ctakes-fhir/src/main/java/org/apache/ctakes/fhir/element/FhirElementFactory.java Tue Nov 13 17:05:11 2018
@@ -9,6 +9,8 @@ import org.apache.ctakes.typesystem.type
import org.apache.ctakes.typesystem.type.refsem.EventProperties;
import org.apache.ctakes.typesystem.type.refsem.OntologyConcept;
import org.apache.ctakes.typesystem.type.refsem.UmlsConcept;
+import org.apache.ctakes.typesystem.type.syntax.BaseToken;
+import org.apache.ctakes.typesystem.type.syntax.WordToken;
import org.apache.ctakes.typesystem.type.textsem.EventMention;
import org.apache.ctakes.typesystem.type.textsem.IdentifiedAnnotation;
import org.apache.log4j.Logger;
@@ -20,7 +22,7 @@ import org.hl7.fhir.utilities.xhtml.Xhtm
import java.util.Collection;
import java.util.Date;
-import static org.apache.ctakes.fhir.resource.SectionBasicCreator.SECTION_EXT;
+import static org.apache.ctakes.fhir.resource.SectionCreator.SECTION_EXT;
/**
* @author SPF , chip-nlp
@@ -42,6 +44,7 @@ final public class FhirElementFactory {
static public final String CODING_CUI = "cui";
static public final String CODING_TUI = "tui";
static public final String CODING_SEMANTIC = "semantic-group";
+ static public final String CODING_PART_OF_SPEECH = "part-of-speech";
static public final char DIVIDER_CHAR = '-';
@@ -91,12 +94,27 @@ final public class FhirElementFactory {
}
/**
+ * @param baseToken -
+ * @return annotation type, part of speech and covered text in a fhir codeable concept.
+ */
+ static public CodeableConcept createPosCode( final BaseToken baseToken ) {
+ final CodeableConcept codeableConcept = createSimpleCode( baseToken );
+ if ( baseToken instanceof WordToken ) {
+ // We are only interested in tokens that are -words-
+ final String pos = baseToken.getPartOfSpeech();
+ codeableConcept.addCoding( new Coding( CODING_PART_OF_SPEECH, pos, "" ) );
+ }
+ return codeableConcept;
+ }
+
+ /**
* @param annotation -
* @return annotation type and covered text in a fhir codeable concept.
*/
static public CodeableConcept createSimpleCode( final org.apache.uima.jcas.tcas.Annotation annotation ) {
final String type = annotation.getType()
- .getShortName();
+// .getShortName();
+ .getName();
return createSimpleCode( CODING_TYPE_SYSTEM, type, null, annotation.getCoveredText() );
}
Copied: ctakes/trunk/ctakes-fhir/src/main/java/org/apache/ctakes/fhir/resource/AnnotationCreator.java (from r1846526, ctakes/trunk/ctakes-fhir/src/main/java/org/apache/ctakes/fhir/resource/AnnotationBasicCreator.java)
URL: http://svn.apache.org/viewvc/ctakes/trunk/ctakes-fhir/src/main/java/org/apache/ctakes/fhir/resource/AnnotationCreator.java?p2=ctakes/trunk/ctakes-fhir/src/main/java/org/apache/ctakes/fhir/resource/AnnotationCreator.java&p1=ctakes/trunk/ctakes-fhir/src/main/java/org/apache/ctakes/fhir/resource/AnnotationBasicCreator.java&r1=1846526&r2=1846527&rev=1846527&view=diff
==============================================================================
--- ctakes/trunk/ctakes-fhir/src/main/java/org/apache/ctakes/fhir/resource/AnnotationBasicCreator.java (original)
+++ ctakes/trunk/ctakes-fhir/src/main/java/org/apache/ctakes/fhir/resource/AnnotationCreator.java Tue Nov 13 17:05:11 2018
@@ -1,23 +1,18 @@
package org.apache.ctakes.fhir.resource;
-import org.apache.ctakes.fhir.element.FhirElementFactory;
import org.apache.ctakes.fhir.util.FhirNoteSpecs;
-import org.apache.log4j.Logger;
import org.apache.uima.jcas.JCas;
import org.apache.uima.jcas.tcas.Annotation;
import org.hl7.fhir.dstu3.model.Basic;
-import java.util.Date;
/**
* @author SPF , chip-nlp
* @version %I%
* @since 12/25/2017
*/
-final public class AnnotationBasicCreator implements FhirResourceCreator<Annotation, Basic> {
-
- static private final Logger LOGGER = Logger.getLogger( "AnnotationBasicCreator" );
+final public class AnnotationCreator implements FhirBasicCreator<Annotation> {
static public final String ID_NAME_ANNOTATION = "Annotation";
@@ -25,21 +20,17 @@ final public class AnnotationBasicCreato
* {@inheritDoc}
*/
@Override
- public Basic createResource( final JCas jCas, final Annotation annotation, final FhirPractitioner practitioner,
- final FhirNoteSpecs noteSpecs ) {
- final Basic basic = new Basic();
- // The 'id' is name of the Resource type (class). e.g. DiseaseDisorderMention
- basic.setId( FhirElementFactory.createId( jCas, ID_NAME_ANNOTATION, annotation.hashCode() ) );
- // The 'code' is the full ontology concept array: cuis, snomeds, urls, preferred text, PLUS covered text.
- basic.setCode( FhirElementFactory.createSimpleCode( annotation ) );
- // Add Creation Date as now.
- basic.setCreated( new Date() );
- // Add Author (ctakes).
- basic.setAuthor( practitioner.getPractitionerReference() );
- // Add text span as an extension.
- basic.addExtension( FhirElementFactory.createSpanBegin( annotation ) );
- basic.addExtension( FhirElementFactory.createSpanEnd( annotation ) );
- return basic;
+ public String getIdName() {
+ return ID_NAME_ANNOTATION;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public Basic createResource( final JCas jCas, final Annotation annotation,
+ final FhirPractitioner practitioner, final FhirNoteSpecs noteSpecs ) {
+ return createAnnotationBasic( jCas, annotation, practitioner );
}
}
Copied: ctakes/trunk/ctakes-fhir/src/main/java/org/apache/ctakes/fhir/resource/AnnotationParser.java (from r1846526, ctakes/trunk/ctakes-fhir/src/main/java/org/apache/ctakes/fhir/resource/AnnotationBasicParser.java)
URL: http://svn.apache.org/viewvc/ctakes/trunk/ctakes-fhir/src/main/java/org/apache/ctakes/fhir/resource/AnnotationParser.java?p2=ctakes/trunk/ctakes-fhir/src/main/java/org/apache/ctakes/fhir/resource/AnnotationParser.java&p1=ctakes/trunk/ctakes-fhir/src/main/java/org/apache/ctakes/fhir/resource/AnnotationBasicParser.java&r1=1846526&r2=1846527&rev=1846527&view=diff
==============================================================================
--- ctakes/trunk/ctakes-fhir/src/main/java/org/apache/ctakes/fhir/resource/AnnotationBasicParser.java (original)
+++ ctakes/trunk/ctakes-fhir/src/main/java/org/apache/ctakes/fhir/resource/AnnotationParser.java Tue Nov 13 17:05:11 2018
@@ -1,7 +1,5 @@
package org.apache.ctakes.fhir.resource;
-import org.apache.ctakes.core.util.Pair;
-import org.apache.ctakes.fhir.element.FhirElementParser;
import org.apache.log4j.Logger;
import org.apache.uima.jcas.JCas;
import org.apache.uima.jcas.tcas.Annotation;
@@ -20,7 +18,7 @@ import static org.apache.ctakes.fhir.ele
* @version %I%
* @since 1/22/2018
*/
-final public class AnnotationBasicParser implements FhirResourceParser<Annotation, Basic> {
+final public class AnnotationParser implements FhirBasicParser<Annotation> {
static private final Logger LOGGER = Logger.getLogger( "AnnotationBasicParser" );
@@ -34,13 +32,7 @@ final public class AnnotationBasicParser
}
}
final Annotation annotation = createAnnotation( jCas, className );
- final Pair<Integer> textSpan = FhirElementParser.getTextSpan( resource.getExtension() );
- if ( textSpan == null ) {
- LOGGER.error( "Could not parse text span for annotation basic " + resource.getId() );
- return null;
- }
- annotation.setBegin( textSpan.getValue1() );
- annotation.setEnd( textSpan.getValue2() );
+ addTextSpan( annotation, resource, LOGGER );
return annotation;
}
Added: ctakes/trunk/ctakes-fhir/src/main/java/org/apache/ctakes/fhir/resource/BaseTokenCreator.java
URL: http://svn.apache.org/viewvc/ctakes/trunk/ctakes-fhir/src/main/java/org/apache/ctakes/fhir/resource/BaseTokenCreator.java?rev=1846527&view=auto
==============================================================================
--- ctakes/trunk/ctakes-fhir/src/main/java/org/apache/ctakes/fhir/resource/BaseTokenCreator.java (added)
+++ ctakes/trunk/ctakes-fhir/src/main/java/org/apache/ctakes/fhir/resource/BaseTokenCreator.java Tue Nov 13 17:05:11 2018
@@ -0,0 +1,42 @@
+package org.apache.ctakes.fhir.resource;
+
+
+import org.apache.ctakes.fhir.element.FhirElementFactory;
+import org.apache.ctakes.fhir.util.FhirNoteSpecs;
+import org.apache.ctakes.typesystem.type.syntax.BaseToken;
+import org.apache.uima.jcas.JCas;
+import org.hl7.fhir.dstu3.model.Basic;
+
+
+/**
+ * @author SPF , chip-nlp
+ * @version %I%
+ * @since 12/25/2017
+ */
+final public class BaseTokenCreator implements FhirBasicCreator<BaseToken> {
+
+ static public final String ID_NAME_BASE_TOKEN = "BaseToken";
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public String getIdName() {
+ return ID_NAME_BASE_TOKEN;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public Basic createResource( final JCas jCas, final BaseToken baseToken,
+ final FhirPractitioner practitioner, final FhirNoteSpecs noteSpecs ) {
+ final Basic basic = createAnnotationBasic( jCas, baseToken, practitioner );
+
+ // The 'code' is the part of speech.
+ basic.setCode( FhirElementFactory.createPosCode( baseToken ) );
+
+ return basic;
+ }
+
+}
Added: ctakes/trunk/ctakes-fhir/src/main/java/org/apache/ctakes/fhir/resource/BaseTokenParser.java
URL: http://svn.apache.org/viewvc/ctakes/trunk/ctakes-fhir/src/main/java/org/apache/ctakes/fhir/resource/BaseTokenParser.java?rev=1846527&view=auto
==============================================================================
--- ctakes/trunk/ctakes-fhir/src/main/java/org/apache/ctakes/fhir/resource/BaseTokenParser.java (added)
+++ ctakes/trunk/ctakes-fhir/src/main/java/org/apache/ctakes/fhir/resource/BaseTokenParser.java Tue Nov 13 17:05:11 2018
@@ -0,0 +1,63 @@
+package org.apache.ctakes.fhir.resource;
+
+import org.apache.ctakes.typesystem.type.syntax.BaseToken;
+import org.apache.log4j.Logger;
+import org.apache.uima.jcas.JCas;
+import org.hl7.fhir.dstu3.model.Basic;
+import org.hl7.fhir.dstu3.model.CodeableConcept;
+import org.hl7.fhir.dstu3.model.Coding;
+
+import java.lang.reflect.Constructor;
+import java.lang.reflect.InvocationTargetException;
+
+import static org.apache.ctakes.fhir.element.FhirElementFactory.CODING_PART_OF_SPEECH;
+import static org.apache.ctakes.fhir.element.FhirElementFactory.CODING_TYPE_SYSTEM;
+
+
+/**
+ * @author SPF , chip-nlp
+ * @version %I%
+ * @since 1/22/2018
+ */
+final public class BaseTokenParser implements FhirBasicParser<BaseToken> {
+
+ static private final Logger LOGGER = Logger.getLogger( "BaseTokenParser" );
+
+ public BaseToken parseResource( final JCas jCas, final Basic resource ) {
+ String className = "";
+ String pos = "";
+ final CodeableConcept codeableConcept = resource.getCode();
+ for ( Coding coding : codeableConcept.getCoding() ) {
+ final String system = coding.getSystem();
+ if ( system.equals( CODING_TYPE_SYSTEM ) ) {
+ className = coding.getCode();
+ } else if ( system.equals( CODING_PART_OF_SPEECH ) ) {
+ pos = coding.getCode();
+ }
+ }
+ final BaseToken baseToken = createBaseToken( jCas, className );
+ baseToken.setPartOfSpeech( pos );
+ addTextSpan( baseToken, resource, LOGGER );
+ return baseToken;
+ }
+
+
+ static private BaseToken createBaseToken( final JCas jCas, final String className ) {
+ try {
+ final Class<?> clazz = Class.forName( className );
+ if ( BaseToken.class.isAssignableFrom( clazz ) ) {
+ final Constructor<?> constructor = clazz.getConstructor( JCas.class );
+ return (BaseToken)constructor.newInstance( jCas );
+ } else {
+ LOGGER.error( "Cannot create a ctakes base token for class " + className );
+ }
+ } catch ( ClassNotFoundException | NoSuchMethodException
+ | InstantiationException
+ | IllegalAccessException
+ | InvocationTargetException multE ) {
+ LOGGER.error( "Cannot determine ctakes base token type for class " + className );
+ }
+ return new BaseToken( jCas );
+ }
+
+}
Added: ctakes/trunk/ctakes-fhir/src/main/java/org/apache/ctakes/fhir/resource/CompositionParser.java
URL: http://svn.apache.org/viewvc/ctakes/trunk/ctakes-fhir/src/main/java/org/apache/ctakes/fhir/resource/CompositionParser.java?rev=1846527&view=auto
==============================================================================
--- ctakes/trunk/ctakes-fhir/src/main/java/org/apache/ctakes/fhir/resource/CompositionParser.java (added)
+++ ctakes/trunk/ctakes-fhir/src/main/java/org/apache/ctakes/fhir/resource/CompositionParser.java Tue Nov 13 17:05:11 2018
@@ -0,0 +1,41 @@
+package org.apache.ctakes.fhir.resource;
+
+import org.apache.log4j.Logger;
+import org.apache.uima.jcas.JCas;
+import org.hl7.fhir.dstu3.model.Basic;
+import org.hl7.fhir.dstu3.model.Narrative;
+import org.hl7.fhir.utilities.xhtml.XhtmlNode;
+
+
+/**
+ * @author SPF , chip-nlp
+ * @version %I%
+ * @since 11/9/2018
+ */
+public class CompositionParser {
+
+ static private final Logger LOGGER = Logger.getLogger( "CompositionParser" );
+
+ public void parseResource( final JCas jCas, final Basic resource ) {
+
+// composition.addAuthor( practitioner.getPractitionerReference() );
+// composition.setId( FhirElementFactory.createId( jCas, ID_NAME_COMPOSITION, noteSpecs.getNoteTime() ) );
+// composition.setStatus( Composition.CompositionStatus.FINAL );
+// composition.setType( getCompositionType() );
+// composition.setLanguage( "English" );
+// composition.setSubject( noteSpecs.getSubjectReference( FhirNoteSpecs.SUBJECT_PATIENT ) );
+
+ // The following claim to have a 0 .. 1 cardinality, but the doc also states that they SHALL be listed.
+// composition.setEncounter( noteSpecs.getEncounterReference() );
+// composition.setCustodian( practitioner.getOrganizationReference() );
+// composition.addEvent( noteSpecs.getEvent() );
+// composition.addAttester( practitioner.createAttester( noteSpecs ) );
+
+// composition.setText( FhirElementFactory.createNarrative( jCas.getDocumentText() ) );
+ final Narrative narrative = resource.getText();
+ final XhtmlNode htmlNode = narrative.getDiv();
+ final String docText = htmlNode.allText();
+ jCas.setDocumentText( docText );
+ }
+
+}
Added: ctakes/trunk/ctakes-fhir/src/main/java/org/apache/ctakes/fhir/resource/FhirBasicCreator.java
URL: http://svn.apache.org/viewvc/ctakes/trunk/ctakes-fhir/src/main/java/org/apache/ctakes/fhir/resource/FhirBasicCreator.java?rev=1846527&view=auto
==============================================================================
--- ctakes/trunk/ctakes-fhir/src/main/java/org/apache/ctakes/fhir/resource/FhirBasicCreator.java (added)
+++ ctakes/trunk/ctakes-fhir/src/main/java/org/apache/ctakes/fhir/resource/FhirBasicCreator.java Tue Nov 13 17:05:11 2018
@@ -0,0 +1,37 @@
+package org.apache.ctakes.fhir.resource;
+
+import org.apache.ctakes.fhir.element.FhirElementFactory;
+import org.apache.uima.jcas.JCas;
+import org.apache.uima.jcas.tcas.Annotation;
+import org.hl7.fhir.dstu3.model.Basic;
+
+import java.util.Date;
+
+/**
+ * @author SPF , chip-nlp
+ * @version %I%
+ * @since 11/12/2018
+ */
+public interface FhirBasicCreator<T extends Annotation> extends FhirResourceCreator<T, Basic> {
+
+ String getIdName();
+
+ default Basic createAnnotationBasic( final JCas jCas,
+ final T annotation,
+ final FhirPractitioner practitioner ) {
+ final Basic basic = new Basic();
+ // The 'id' is name of the Resource type (class). e.g. DiseaseDisorderMention
+ basic.setId( FhirElementFactory.createId( jCas, getIdName(), annotation.hashCode() ) );
+ // The 'code' is the full ontology concept array: cuis, snomeds, urls, preferred text, PLUS covered text.
+ basic.setCode( FhirElementFactory.createSimpleCode( annotation ) );
+ // Add Creation Date as now.
+ basic.setCreated( new Date() );
+ // Add Author (ctakes).
+ basic.setAuthor( practitioner.getPractitionerReference() );
+ // Add text span as an extension.
+ basic.addExtension( FhirElementFactory.createSpanBegin( annotation ) );
+ basic.addExtension( FhirElementFactory.createSpanEnd( annotation ) );
+ return basic;
+ }
+
+}
Added: ctakes/trunk/ctakes-fhir/src/main/java/org/apache/ctakes/fhir/resource/FhirBasicParser.java
URL: http://svn.apache.org/viewvc/ctakes/trunk/ctakes-fhir/src/main/java/org/apache/ctakes/fhir/resource/FhirBasicParser.java?rev=1846527&view=auto
==============================================================================
--- ctakes/trunk/ctakes-fhir/src/main/java/org/apache/ctakes/fhir/resource/FhirBasicParser.java (added)
+++ ctakes/trunk/ctakes-fhir/src/main/java/org/apache/ctakes/fhir/resource/FhirBasicParser.java Tue Nov 13 17:05:11 2018
@@ -0,0 +1,27 @@
+package org.apache.ctakes.fhir.resource;
+
+import org.apache.ctakes.core.util.Pair;
+import org.apache.ctakes.fhir.element.FhirElementParser;
+import org.apache.log4j.Logger;
+import org.apache.uima.jcas.tcas.Annotation;
+import org.hl7.fhir.dstu3.model.Basic;
+
+
+/**
+ * @author SPF , chip-nlp
+ * @version %I%
+ * @since 1/22/2018
+ */
+public interface FhirBasicParser<T extends Annotation> extends FhirResourceParser<T, Basic> {
+
+ default void addTextSpan( final T type, final Basic resource, final Logger logger ) {
+ final Pair<Integer> textSpan = FhirElementParser.getTextSpan( resource.getExtension() );
+ if ( textSpan == null ) {
+ logger.error( "Could not parse text span for basic " + resource.getId() );
+ return;
+ }
+ type.setBegin( textSpan.getValue1() );
+ type.setEnd( textSpan.getValue2() );
+ }
+
+}
Copied: ctakes/trunk/ctakes-fhir/src/main/java/org/apache/ctakes/fhir/resource/IdentifiedAnnotationCreator.java (from r1846526, ctakes/trunk/ctakes-fhir/src/main/java/org/apache/ctakes/fhir/resource/IdentifiedAnnotationBasicCreator.java)
URL: http://svn.apache.org/viewvc/ctakes/trunk/ctakes-fhir/src/main/java/org/apache/ctakes/fhir/resource/IdentifiedAnnotationCreator.java?p2=ctakes/trunk/ctakes-fhir/src/main/java/org/apache/ctakes/fhir/resource/IdentifiedAnnotationCreator.java&p1=ctakes/trunk/ctakes-fhir/src/main/java/org/apache/ctakes/fhir/resource/IdentifiedAnnotationBasicCreator.java&r1=1846526&r2=1846527&rev=1846527&view=diff
==============================================================================
--- ctakes/trunk/ctakes-fhir/src/main/java/org/apache/ctakes/fhir/resource/IdentifiedAnnotationBasicCreator.java (original)
+++ ctakes/trunk/ctakes-fhir/src/main/java/org/apache/ctakes/fhir/resource/IdentifiedAnnotationCreator.java Tue Nov 13 17:05:11 2018
@@ -10,15 +10,13 @@ import org.apache.uima.jcas.JCas;
import org.hl7.fhir.dstu3.model.Basic;
import org.hl7.fhir.dstu3.model.Extension;
-import java.util.Date;
-
/**
* @author SPF , chip-nlp
* @version %I%
* @since 12/25/2017
*/
-final public class IdentifiedAnnotationBasicCreator implements FhirResourceCreator<IdentifiedAnnotation, Basic> {
+final public class IdentifiedAnnotationCreator implements FhirBasicCreator<IdentifiedAnnotation> {
static private final Logger LOGGER = Logger.getLogger( "IdentifiedAnnotationBasicCreator" );
@@ -33,22 +31,23 @@ final public class IdentifiedAnnotationB
* {@inheritDoc}
*/
@Override
+ public String getIdName() {
+ return ID_NAME_IDENTIFIED_ANNOTATION;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
public Basic createResource( final JCas jCas, final IdentifiedAnnotation annotation,
final FhirPractitioner practitioner, final FhirNoteSpecs noteSpecs ) {
- final Basic basic = new Basic();
- // The 'id' is name of the Resource type (class). e.g. DiseaseDisorderMention
- basic.setId( FhirElementFactory.createId( jCas, ID_NAME_IDENTIFIED_ANNOTATION, annotation.hashCode() ) );
+ final Basic basic = createAnnotationBasic( jCas, annotation, practitioner );
+
// The 'code' is the full ontology concept array: cuis, snomeds, urls, preferred text, PLUS covered text.
basic.setCode( FhirElementFactory.createPrimaryCode( annotation ) );
+
// Add Subject reference.
basic.setSubject( noteSpecs.getSubjectReference( annotation.getSubject() ) );
- // Add Creation Date as now.
- basic.setCreated( new Date() );
- // Add Author (ctakes).
- basic.setAuthor( practitioner.getPractitionerReference() );
- // Add text span as an extension.
- basic.addExtension( FhirElementFactory.createSpanBegin( annotation ) );
- basic.addExtension( FhirElementFactory.createSpanEnd( annotation ) );
// Add DocTimeRel as an extension.
if ( annotation instanceof EventMention ) {
final Extension dtr = FhirElementFactory.createDocTimeRel( (EventMention) annotation );
Copied: ctakes/trunk/ctakes-fhir/src/main/java/org/apache/ctakes/fhir/resource/IdentifiedAnnotationParser.java (from r1846526, ctakes/trunk/ctakes-fhir/src/main/java/org/apache/ctakes/fhir/resource/IdentifiedAnnotationBasicParser.java)
URL: http://svn.apache.org/viewvc/ctakes/trunk/ctakes-fhir/src/main/java/org/apache/ctakes/fhir/resource/IdentifiedAnnotationParser.java?p2=ctakes/trunk/ctakes-fhir/src/main/java/org/apache/ctakes/fhir/resource/IdentifiedAnnotationParser.java&p1=ctakes/trunk/ctakes-fhir/src/main/java/org/apache/ctakes/fhir/resource/IdentifiedAnnotationBasicParser.java&r1=1846526&r2=1846527&rev=1846527&view=diff
==============================================================================
--- ctakes/trunk/ctakes-fhir/src/main/java/org/apache/ctakes/fhir/resource/IdentifiedAnnotationBasicParser.java (original)
+++ ctakes/trunk/ctakes-fhir/src/main/java/org/apache/ctakes/fhir/resource/IdentifiedAnnotationParser.java Tue Nov 13 17:05:11 2018
@@ -1,7 +1,6 @@
package org.apache.ctakes.fhir.resource;
import org.apache.ctakes.core.semantic.SemanticGroup;
-import org.apache.ctakes.core.util.Pair;
import org.apache.ctakes.fhir.element.FhirElementParser;
import org.apache.ctakes.typesystem.type.constants.CONST;
import org.apache.ctakes.typesystem.type.refsem.Event;
@@ -21,7 +20,7 @@ import java.util.Collection;
import java.util.List;
import static org.apache.ctakes.fhir.element.FhirElementFactory.*;
-import static org.apache.ctakes.fhir.resource.IdentifiedAnnotationBasicCreator.*;
+import static org.apache.ctakes.fhir.resource.IdentifiedAnnotationCreator.*;
/**
@@ -29,7 +28,7 @@ import static org.apache.ctakes.fhir.res
* @version %I%
* @since 1/22/2018
*/
-final public class IdentifiedAnnotationBasicParser implements FhirResourceParser<IdentifiedAnnotation, Basic> {
+final public class IdentifiedAnnotationParser implements FhirBasicParser<IdentifiedAnnotation> {
static private final Logger LOGGER = Logger.getLogger( "IdentifiedAnnotationBasicParser" );
@@ -53,16 +52,11 @@ final public class IdentifiedAnnotationB
}
annotation.setOntologyConceptArr( conceptArr );
// text span
- final List<Extension> extensions = resource.getExtension();
- final Pair<Integer> textSpan = FhirElementParser.getTextSpan( extensions );
- if ( textSpan == null ) {
- LOGGER.error( "Could not parse text span for annotation basic " + resource.getId() );
- return null;
- }
- annotation.setBegin( textSpan.getValue1() );
- annotation.setEnd( textSpan.getValue2() );
+ addTextSpan( annotation, resource, LOGGER );
// Set properties
+ final List<Extension> extensions = resource.getExtension();
+ extensions.addAll( resource.getModifierExtension() );
if ( FhirElementParser.hasExtension( GENERIC_EXT, extensions ) ) {
annotation.setGeneric( true );
}
@@ -76,6 +70,7 @@ final public class IdentifiedAnnotationB
annotation.setHistoryOf( CONST.NE_HISTORY_OF_PRESENT );
}
// TODO subject
+ annotation.setSubject( FhirElementParser.getSubjectId( resource ) );
if ( annotation instanceof EventMention ) {
final Event event = createEvent( jCas, extensions );
if ( event != null ) {
Added: ctakes/trunk/ctakes-fhir/src/main/java/org/apache/ctakes/fhir/resource/ParagraphCreator.java
URL: http://svn.apache.org/viewvc/ctakes/trunk/ctakes-fhir/src/main/java/org/apache/ctakes/fhir/resource/ParagraphCreator.java?rev=1846527&view=auto
==============================================================================
--- ctakes/trunk/ctakes-fhir/src/main/java/org/apache/ctakes/fhir/resource/ParagraphCreator.java (added)
+++ ctakes/trunk/ctakes-fhir/src/main/java/org/apache/ctakes/fhir/resource/ParagraphCreator.java Tue Nov 13 17:05:11 2018
@@ -0,0 +1,35 @@
+package org.apache.ctakes.fhir.resource;
+
+import org.apache.ctakes.fhir.util.FhirNoteSpecs;
+import org.apache.ctakes.typesystem.type.textspan.Paragraph;
+import org.apache.uima.jcas.JCas;
+import org.hl7.fhir.dstu3.model.Basic;
+
+
+/**
+ * @author SPF , chip-nlp
+ * @version %I%
+ * @since 11/12/2018
+ */
+final public class ParagraphCreator implements FhirBasicCreator<Paragraph> {
+
+ static public final String ID_NAME_PARAGRAPH = "DocumentParagraph";
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public String getIdName() {
+ return ID_NAME_PARAGRAPH;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public Basic createResource( final JCas jCas, final Paragraph paragraph,
+ final FhirPractitioner practitioner, final FhirNoteSpecs noteSpecs ) {
+ return createAnnotationBasic( jCas, paragraph, practitioner );
+ }
+
+}
Added: ctakes/trunk/ctakes-fhir/src/main/java/org/apache/ctakes/fhir/resource/ParagraphParser.java
URL: http://svn.apache.org/viewvc/ctakes/trunk/ctakes-fhir/src/main/java/org/apache/ctakes/fhir/resource/ParagraphParser.java?rev=1846527&view=auto
==============================================================================
--- ctakes/trunk/ctakes-fhir/src/main/java/org/apache/ctakes/fhir/resource/ParagraphParser.java (added)
+++ ctakes/trunk/ctakes-fhir/src/main/java/org/apache/ctakes/fhir/resource/ParagraphParser.java Tue Nov 13 17:05:11 2018
@@ -0,0 +1,24 @@
+package org.apache.ctakes.fhir.resource;
+
+import org.apache.ctakes.typesystem.type.textspan.Paragraph;
+import org.apache.log4j.Logger;
+import org.apache.uima.jcas.JCas;
+import org.hl7.fhir.dstu3.model.Basic;
+
+
+/**
+ * @author SPF , chip-nlp
+ * @version %I%
+ * @since 1/22/2018
+ */
+final public class ParagraphParser implements FhirBasicParser<Paragraph> {
+
+ static private final Logger LOGGER = Logger.getLogger( "ParagraphBasicParser" );
+
+ public Paragraph parseResource( final JCas jCas, final Basic resource ) {
+ final Paragraph paragraph = new Paragraph( jCas );
+ addTextSpan( paragraph, resource, LOGGER );
+ return paragraph;
+ }
+
+}
Copied: ctakes/trunk/ctakes-fhir/src/main/java/org/apache/ctakes/fhir/resource/SectionCreator.java (from r1846526, ctakes/trunk/ctakes-fhir/src/main/java/org/apache/ctakes/fhir/resource/SectionBasicCreator.java)
URL: http://svn.apache.org/viewvc/ctakes/trunk/ctakes-fhir/src/main/java/org/apache/ctakes/fhir/resource/SectionCreator.java?p2=ctakes/trunk/ctakes-fhir/src/main/java/org/apache/ctakes/fhir/resource/SectionCreator.java&p1=ctakes/trunk/ctakes-fhir/src/main/java/org/apache/ctakes/fhir/resource/SectionBasicCreator.java&r1=1846526&r2=1846527&rev=1846527&view=diff
==============================================================================
--- ctakes/trunk/ctakes-fhir/src/main/java/org/apache/ctakes/fhir/resource/SectionBasicCreator.java (original)
+++ ctakes/trunk/ctakes-fhir/src/main/java/org/apache/ctakes/fhir/resource/SectionCreator.java Tue Nov 13 17:05:11 2018
@@ -9,15 +9,13 @@ import org.hl7.fhir.dstu3.model.Basic;
import org.hl7.fhir.dstu3.model.CodeableConcept;
import org.hl7.fhir.dstu3.model.Coding;
-import java.util.Date;
-
/**
* @author SPF , chip-nlp
* @version %I%
* @since 12/25/2017
*/
-final public class SectionBasicCreator implements FhirResourceCreator<Segment, Basic> {
+final public class SectionCreator implements FhirBasicCreator<Segment> {
static private final Logger LOGGER = Logger.getLogger( "SectionBasicCreator" );
@@ -31,11 +29,18 @@ final public class SectionBasicCreator i
* {@inheritDoc}
*/
@Override
+ public String getIdName() {
+ return ID_NAME_SECTION;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
public Basic createResource( final JCas jCas, final Segment section, final FhirPractitioner practitioner,
final FhirNoteSpecs noteSpecs ) {
- final Basic basic = new Basic();
- // The 'id' is name of the Resource type (class). e.g. DiseaseDisorderMention
- basic.setId( FhirElementFactory.createId( jCas, ID_NAME_SECTION, section.hashCode() ) );
+ final Basic basic = createAnnotationBasic( jCas, section, practitioner );
+
// The 'code' is the normalized section name PLUS section tag text.
final CodeableConcept codeableConcept = FhirElementFactory.createSimpleCode( section );
codeableConcept.addCoding( new Coding( CODING_SECTION_NAME, section.getPreferredText(), null ) );
@@ -45,13 +50,7 @@ final public class SectionBasicCreator i
}
codeableConcept.setText( section.getTagText() );
basic.setCode( codeableConcept );
- // Add Creation Date as now.
- basic.setCreated( new Date() );
- // Add Author (ctakes).
- basic.setAuthor( practitioner.getPractitionerReference() );
- // Add text span as an extension.
- basic.addExtension( FhirElementFactory.createSpanBegin( section ) );
- basic.addExtension( FhirElementFactory.createSpanEnd( section ) );
+
return basic;
}
Copied: ctakes/trunk/ctakes-fhir/src/main/java/org/apache/ctakes/fhir/resource/SectionParser.java (from r1846526, ctakes/trunk/ctakes-fhir/src/main/java/org/apache/ctakes/fhir/resource/SectionBasicParser.java)
URL: http://svn.apache.org/viewvc/ctakes/trunk/ctakes-fhir/src/main/java/org/apache/ctakes/fhir/resource/SectionParser.java?p2=ctakes/trunk/ctakes-fhir/src/main/java/org/apache/ctakes/fhir/resource/SectionParser.java&p1=ctakes/trunk/ctakes-fhir/src/main/java/org/apache/ctakes/fhir/resource/SectionBasicParser.java&r1=1846526&r2=1846527&rev=1846527&view=diff
==============================================================================
--- ctakes/trunk/ctakes-fhir/src/main/java/org/apache/ctakes/fhir/resource/SectionBasicParser.java (original)
+++ ctakes/trunk/ctakes-fhir/src/main/java/org/apache/ctakes/fhir/resource/SectionParser.java Tue Nov 13 17:05:11 2018
@@ -1,7 +1,5 @@
package org.apache.ctakes.fhir.resource;
-import org.apache.ctakes.core.util.Pair;
-import org.apache.ctakes.fhir.element.FhirElementParser;
import org.apache.ctakes.typesystem.type.textspan.Segment;
import org.apache.log4j.Logger;
import org.apache.uima.jcas.JCas;
@@ -11,8 +9,8 @@ import org.hl7.fhir.dstu3.model.Coding;
import java.util.List;
-import static org.apache.ctakes.fhir.resource.SectionBasicCreator.CODING_SECTION_ID;
-import static org.apache.ctakes.fhir.resource.SectionBasicCreator.CODING_SECTION_NAME;
+import static org.apache.ctakes.fhir.resource.SectionCreator.CODING_SECTION_ID;
+import static org.apache.ctakes.fhir.resource.SectionCreator.CODING_SECTION_NAME;
/**
@@ -20,7 +18,7 @@ import static org.apache.ctakes.fhir.res
* @version %I%
* @since 1/22/2018
*/
-final public class SectionBasicParser implements FhirResourceParser<Segment, Basic> {
+final public class SectionParser implements FhirBasicParser<Segment> {
static private final Logger LOGGER = Logger.getLogger( "SectionBasicParser" );
@@ -38,17 +36,13 @@ final public class SectionBasicParser im
}
}
final String tagText = codeableConcept.getText();
- final Pair<Integer> textSpan = FhirElementParser.getTextSpan( resource.getExtension() );
- if ( textSpan == null ) {
- LOGGER.error( "Could not parse text span for section " + preferredText );
- return null;
- }
final Segment segment = new Segment( jCas );
- segment.setBegin( textSpan.getValue1() );
- segment.setEnd( textSpan.getValue2() );
+ addTextSpan( segment, resource, LOGGER );
segment.setPreferredText( preferredText );
segment.setTagText( tagText );
- if ( !id.isEmpty() ) {
+ if ( id.isEmpty() ) {
+ segment.setId( "SIMPLE_SEGMENT" );
+ } else {
segment.setId( id );
}
return segment;
Added: ctakes/trunk/ctakes-fhir/src/main/java/org/apache/ctakes/fhir/resource/SentenceCreator.java
URL: http://svn.apache.org/viewvc/ctakes/trunk/ctakes-fhir/src/main/java/org/apache/ctakes/fhir/resource/SentenceCreator.java?rev=1846527&view=auto
==============================================================================
--- ctakes/trunk/ctakes-fhir/src/main/java/org/apache/ctakes/fhir/resource/SentenceCreator.java (added)
+++ ctakes/trunk/ctakes-fhir/src/main/java/org/apache/ctakes/fhir/resource/SentenceCreator.java Tue Nov 13 17:05:11 2018
@@ -0,0 +1,36 @@
+package org.apache.ctakes.fhir.resource;
+
+import org.apache.ctakes.fhir.util.FhirNoteSpecs;
+import org.apache.ctakes.typesystem.type.textspan.Sentence;
+import org.apache.uima.jcas.JCas;
+import org.hl7.fhir.dstu3.model.Basic;
+
+
+/**
+ * @author SPF , chip-nlp
+ * @version %I%
+ * @since 11/12/2018
+ */
+final public class SentenceCreator implements FhirBasicCreator<Sentence> {
+
+ static public final String SENTENCE_EXT = "document-sentence";
+ static public final String ID_NAME_SENTENCE = "DocumentSentence";
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public String getIdName() {
+ return ID_NAME_SENTENCE;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public Basic createResource( final JCas jCas, final Sentence sentence,
+ final FhirPractitioner practitioner, final FhirNoteSpecs noteSpecs ) {
+ return createAnnotationBasic( jCas, sentence, practitioner );
+ }
+
+}
Added: ctakes/trunk/ctakes-fhir/src/main/java/org/apache/ctakes/fhir/resource/SentenceParser.java
URL: http://svn.apache.org/viewvc/ctakes/trunk/ctakes-fhir/src/main/java/org/apache/ctakes/fhir/resource/SentenceParser.java?rev=1846527&view=auto
==============================================================================
--- ctakes/trunk/ctakes-fhir/src/main/java/org/apache/ctakes/fhir/resource/SentenceParser.java (added)
+++ ctakes/trunk/ctakes-fhir/src/main/java/org/apache/ctakes/fhir/resource/SentenceParser.java Tue Nov 13 17:05:11 2018
@@ -0,0 +1,24 @@
+package org.apache.ctakes.fhir.resource;
+
+import org.apache.ctakes.typesystem.type.textspan.Sentence;
+import org.apache.log4j.Logger;
+import org.apache.uima.jcas.JCas;
+import org.hl7.fhir.dstu3.model.Basic;
+
+
+/**
+ * @author SPF , chip-nlp
+ * @version %I%
+ * @since 1/22/2018
+ */
+final public class SentenceParser implements FhirBasicParser<Sentence> {
+
+ static private final Logger LOGGER = Logger.getLogger( "SentenceBasicParser" );
+
+ public Sentence parseResource( final JCas jCas, final Basic resource ) {
+ final Sentence sentence = new Sentence( jCas );
+ addTextSpan( sentence, resource, LOGGER );
+ return sentence;
+ }
+
+}