ctakes-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From chen...@apache.org
Subject svn commit: r1547576 - in /ctakes/trunk: ctakes-core-res/src/main/resources/org/apache/ctakes/core/sections/ ctakes-core/ ctakes-core/desc/analysis_engine/ ctakes-core/src/main/java/org/apache/ctakes/core/ae/ ctakes-core/src/test/java/org/apache/ctakes...
Date Tue, 03 Dec 2013 20:38:00 GMT
Author: chenpei
Date: Tue Dec  3 20:37:59 2013
New Revision: 1547576

URL: http://svn.apache.org/r1547576
Log:
CTAKES-200 - Add HL7/CCDA Sections

Added:
    ctakes/trunk/ctakes-core-res/src/main/resources/org/apache/ctakes/core/sections/
    ctakes/trunk/ctakes-core-res/src/main/resources/org/apache/ctakes/core/sections/ccda_sections.txt
  (with props)
    ctakes/trunk/ctakes-core/desc/analysis_engine/CDASegmentAnnotator.xml   (with props)
    ctakes/trunk/ctakes-core/src/main/java/org/apache/ctakes/core/ae/CDASegmentAnnotator.java
  (with props)
    ctakes/trunk/ctakes-core/src/test/java/org/apache/ctakes/core/ae/TestCDASegmentAnnotator.java
  (with props)
Modified:
    ctakes/trunk/ctakes-core/pom.xml

Added: ctakes/trunk/ctakes-core-res/src/main/resources/org/apache/ctakes/core/sections/ccda_sections.txt
URL: http://svn.apache.org/viewvc/ctakes/trunk/ctakes-core-res/src/main/resources/org/apache/ctakes/core/sections/ccda_sections.txt?rev=1547576&view=auto
==============================================================================
--- ctakes/trunk/ctakes-core-res/src/main/resources/org/apache/ctakes/core/sections/ccda_sections.txt
(added)
+++ ctakes/trunk/ctakes-core-res/src/main/resources/org/apache/ctakes/core/sections/ccda_sections.txt
Tue Dec  3 20:37:59 2013
@@ -0,0 +1,45 @@
+# This file is used by ctakes-core/sectionizer
+# It uses rules and RegEx to match the section headers
+# It is derived from the Consolidated CDA/HL7 standard
+# http://bluebuttonplus.org/healthrecords.html
+# http://cdatools.org/infocenter/index.jsp
+# The format is as follows:
+# HL7 template id,LOINC Section Code,n list of header names
+# Custom ones can be added to the below mapping file
+# By Default,they are case insenstive and spaces trimmed. 
+
+2.16.840.1.113883.10.20.22.2.21,42348-3,Advance Directives
+2.16.840.1.113883.10.20.22.2.6.1,48765-2,Allergies,Adverse Reactions,allergy
+2.16.840.1.113883.10.20.22.2.25,59774-0,Anesthesia Section
+2.16.840.1.113883.10.20.22.2.9,51847-2,ASSESSMENT AND PLAN
+2.16.840.1.113883.10.20.22.2.8,51848-0,Assessments 
+2.16.840.1.113883.10.20.22.2.13,46239-0,Chief Complaint and Reason for Visit
+1.3.6.1.4.1.19376.1.5.3.1.1.13.2.1,10154-3,CHIEF COMPLAINT,admit diagnosis,principal discharge
diagnosis,principal diagnosis,principal diagnoses,secondary diagnosis,other medical issues
considered at this time 
+2.16.840.1.113883.10.20.22.2.37,55109-3,Complications
+1.3.6.1.4.1.19376.1.5.3.1.3.33,42344-2,Discharge Diet
+2.16.840.1.113883.10.20.22.2.22.1,46240-8,Encounters,History of encounters,Surgeries,ED visits
+2.16.840.1.113883.10.20.22.2.15,10157-6,Family History
+2.16.840.1.113883.10.20.22.2.14,47420-5,FUNCTIONAL STATUS,Functional and Cognitive Status,impairments
+2.16.840.1.113883.10.20.2.5,10210-3,GENERAL STATUS,CURRENT HEALTH STATUS
+2.16.840.1.113883.10.20.22.1.1,34133-9,Header,Patient information and demographics,IDENTIFYING
DATA,identification,record
+2.16.840.1.113883.10.20.22.2.20,11348-0,HISTORY OF PAST ILLNESS,PAST MEDICAL HISTORY
+1.3.6.1.4.1.19376.1.5.3.1.3.4,10164-2,HISTORY OF PRESENT ILLNESS,brief history of physical
illness,history of present illness,history of the present illness
+2.16.840.1.113883.10.20.22.2.2.1,11369-6,History of immunizations,Immunizations,Immunizations
and vaccines
+2.16.840.1.113883.10.20.22.2.1.1,10160-0,HISTORY OF MEDICATION USE,Medications,current medications
+2.16.840.1.113883.10.20.22.2.43,46241-6,HOSPITAL ADMISSION DX,rx on admit
+2.16.840.1.113883.10.20.22.2.41,8653-8,HOSPITAL DISCHARGE INSTRUCTIONS,Discharge Instructions,
Written discharge instructions
+2.16.840.1.113883.10.20.22.2.24,11535-2,Hospital Discharge Diagnosis,discharge diagnosis,FINAL
DIAGNOSIS
+2.16.840.1.113883.10.20.22.2.16,11493-4,Hospital Discharge Studies Summary
+2.16.840.1.113883.10.20.22.2.45,69730-0,Instructions 
+2.16.840.1.113883.10.20.22.2.10,18776-5,Treatment plan,Care Plan
+2.16.840.1.113883.10.20.22.2.11.1,10183-2,HOSPITAL DISCHARGE MEDICATIONS,Discharge Medications
+1.3.6.1.4.1.19376.1.5.3.1.3.1,42349-1,Reason for Referral
+2.16.840.1.113883.10.20.7.12,10216-0,Operative Note Fluids 
+2.16.840.1.113883.10.20.7.14,10223-6,Operative Note Surgical  
+2.16.840.1.113883.10.20.2.10,29545-1,PHYSICAL EXAMINATION,physical exam
+2.16.840.1.113883.10.20.22.2.18,48768-6,Payers 
+2.16.840.1.113883.10.20.22.2.5.1,11450-4,PROBLEMS,Problem List,Concerns,complaints,observations
+2.16.840.1.113883.10.20.22.2.7.1,47519-4,Procedures,	History of procedures
+2.16.840.1.113883.10.20.22.2.3.1,30954-2,Results,laboratory tests,LABORATORY INFORMATION,laboratory
data,laboratories
+2.16.840.1.113883.10.20.22.2.17,29762-2,Social History,Observations like smoking,drinking
+2.16.840.1.113883.10.20.22.2.4.1,8716-3,Vital Signs
\ No newline at end of file

Propchange: ctakes/trunk/ctakes-core-res/src/main/resources/org/apache/ctakes/core/sections/ccda_sections.txt
------------------------------------------------------------------------------
    svn:eol-style = native

Added: ctakes/trunk/ctakes-core/desc/analysis_engine/CDASegmentAnnotator.xml
URL: http://svn.apache.org/viewvc/ctakes/trunk/ctakes-core/desc/analysis_engine/CDASegmentAnnotator.xml?rev=1547576&view=auto
==============================================================================
--- ctakes/trunk/ctakes-core/desc/analysis_engine/CDASegmentAnnotator.xml (added)
+++ ctakes/trunk/ctakes-core/desc/analysis_engine/CDASegmentAnnotator.xml Tue Dec  3 20:37:59
2013
@@ -0,0 +1,71 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+    Licensed to the Apache Software Foundation (ASF) under one
+    or more contributor license agreements.  See the NOTICE file
+    distributed with this work for additional information
+    regarding copyright ownership.  The ASF licenses this file
+    to you under the Apache License, Version 2.0 (the
+    "License"); you may not use this file except in compliance
+    with the License.  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing,
+    software distributed under the License is distributed on an
+    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+    KIND, either express or implied.  See the License for the
+    specific language governing permissions and limitations
+    under the License.
+
+-->
+<taeDescription xmlns="http://uima.apache.org/resourceSpecifier">
+<frameworkImplementation>org.apache.uima.java</frameworkImplementation>
+<primitive>true</primitive>
+<annotatorImplementationName>org.apache.ctakes.core.ae.CDASegmentAnnotator</annotatorImplementationName>
+<analysisEngineMetaData>
+<name>CDASegmentAnnotator</name>
+<description></description>
+<version>1.0</version>
+<vendor></vendor>
+<configurationParameters>
+<configurationParameter>
+<name>sections_file</name>
+<description></description>
+<type>String</type>
+<multiValued>false</multiValued>
+<mandatory>false</mandatory>
+</configurationParameter>
+</configurationParameters>
+    <configurationParameterSettings>
+      <nameValuePair>
+        <name>sections_file</name>
+        <value>
+          <string>org/apache/ctakes/core/sections/ccda_sections.txt</string>
+        </value>
+      </nameValuePair>
+    </configurationParameterSettings>
+<typeSystemDescription>
+<imports>
+<import name="org.apache.ctakes.typesystem.types.TypeSystem"/>
+</imports>
+</typeSystemDescription>
+<typePriorities/>
+<fsIndexCollection/>
+<capabilities>
+<capability>
+<inputs/>
+<outputs>
+<type allAnnotatorFeatures="true">org.apache.ctakes.typesystem.type.textspan.Segment</type>
+</outputs>
+<languagesSupported/>
+</capability>
+</capabilities>
+<operationalProperties>
+<modifiesCas>true</modifiesCas>
+<multipleDeploymentAllowed>true</multipleDeploymentAllowed>
+<outputsNewCASes>false</outputsNewCASes>
+</operationalProperties>
+</analysisEngineMetaData>
+<resourceManagerConfiguration/>
+</taeDescription>

Propchange: ctakes/trunk/ctakes-core/desc/analysis_engine/CDASegmentAnnotator.xml
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: ctakes/trunk/ctakes-core/pom.xml
URL: http://svn.apache.org/viewvc/ctakes/trunk/ctakes-core/pom.xml?rev=1547576&r1=1547575&r2=1547576&view=diff
==============================================================================
--- ctakes/trunk/ctakes-core/pom.xml (original)
+++ ctakes/trunk/ctakes-core/pom.xml Tue Dec  3 20:37:59 2013
@@ -59,6 +59,14 @@
 			<artifactId>jdom2</artifactId>
 		</dependency>
 		<dependency>
+			<groupId>org.cleartk</groupId>
+			<artifactId>cleartk-util</artifactId>
+		</dependency>
+		<dependency>
+			<groupId>org.uimafit</groupId>
+			<artifactId>uimafit</artifactId>
+		</dependency>		
+		<dependency>
 			<groupId>com.google.guava</groupId>
 			<artifactId>guava</artifactId>
 		</dependency>

Added: ctakes/trunk/ctakes-core/src/main/java/org/apache/ctakes/core/ae/CDASegmentAnnotator.java
URL: http://svn.apache.org/viewvc/ctakes/trunk/ctakes-core/src/main/java/org/apache/ctakes/core/ae/CDASegmentAnnotator.java?rev=1547576&view=auto
==============================================================================
--- ctakes/trunk/ctakes-core/src/main/java/org/apache/ctakes/core/ae/CDASegmentAnnotator.java
(added)
+++ ctakes/trunk/ctakes-core/src/main/java/org/apache/ctakes/core/ae/CDASegmentAnnotator.java
Tue Dec  3 20:37:59 2013
@@ -0,0 +1,207 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.ctakes.core.ae;
+
+import java.io.BufferedReader;
+import java.io.InputStreamReader;
+import java.net.URI;
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.HashMap;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+import org.apache.ctakes.core.util.DocumentIDAnnotationUtil;
+import org.apache.ctakes.typesystem.type.textspan.Segment;
+import org.apache.log4j.Logger;
+import org.apache.uima.UimaContext;
+import org.apache.uima.analysis_component.JCasAnnotator_ImplBase;
+import org.apache.uima.analysis_engine.AnalysisEngineProcessException;
+import org.apache.uima.jcas.JCas;
+import org.apache.uima.resource.ResourceInitializationException;
+import org.uimafit.descriptor.ConfigurationParameter;
+
+/**
+ * Creates segment annotations based on the ccda_sections.txt file Which is
+ * based on HL7/CCDA/LONIC standard headings Additional custom heading names can
+ * be added to the file.
+ */
+public class CDASegmentAnnotator extends JCasAnnotator_ImplBase {
+
+	Logger logger = Logger.getLogger(this.getClass());
+	protected static HashMap<String, Pattern> patterns = new HashMap<String, Pattern>();
+	protected static HashMap<String, String> section_names = new HashMap<String, String>();
+	protected static final String DEFAULT_SECTION_FILE_NAME = "org/apache/ctakes/core/sections/ccda_sections.txt";
+	public static final String PARAM_FIELD_SEPERATOR = ",";
+	public static final String PARAM_COMMENT = "#";
+	public static final String PARAM_SECTIONS_FILE = "sections_file";
+	public static final String SIMPLE_SEGMENT = "SIMPLE_SEGMENT";
+
+	@ConfigurationParameter(name = PARAM_SECTIONS_FILE, description = "Path to File that contains
the section header mappings")
+	protected URI sections_path;
+
+	/**
+	 * Init and load the sections mapping file and precompile the regex matches
+	 * into a hashmap
+	 */
+	public void initialize(UimaContext aContext)
+			throws ResourceInitializationException {
+		super.initialize(aContext);
+		String sectionFile = null;
+		try {
+			sectionFile = (String) aContext
+					.getConfigParameterValue(PARAM_SECTIONS_FILE);
+			URL sectionURL = (this.sections_path == null) ? this.getClass()
+					.getClassLoader().getResource(DEFAULT_SECTION_FILE_NAME)
+					.toURI().toURL() : this.sections_path.toURL();
+
+			BufferedReader br = new BufferedReader(new InputStreamReader(
+					sectionURL.openStream()));
+
+			// Read in the Section Mappings File
+			// And load the RegEx Patterns into a Map
+			logger.info("Reading Section File " + sectionURL);
+			String line = null;
+			while ((line = br.readLine()) != null) {
+				if (!line.trim().startsWith(PARAM_COMMENT)) {
+					String[] l = line.split(PARAM_FIELD_SEPERATOR);
+					// First column is the HL7 section template id
+					if (l != null && l.length > 0 && l[0] != null
+							&& l[0].length() > 0
+							&& !line.endsWith(PARAM_FIELD_SEPERATOR)) {
+						String id = l[0].trim();
+						// Make a giant alternator (|) regex group for each HL7
+						Pattern p = buildPattern(l);
+						patterns.put(id, p);
+						if (l.length > 2 && l[2] != null) {
+							String temp = l[2].trim();
+							section_names.put(id, temp);
+						}						
+						
+					} else {
+						logger.info("Warning: Skipped reading sections config row: "
+								+ Arrays.toString(l));
+					}
+				}
+			}
+		} catch (Exception e) {
+			logger.error("Error reading Sections file:" + sectionFile);
+			throw new ResourceInitializationException(e);
+		}
+	}
+
+	/**
+	 * Build a regex pattern from a list of section names. used only during init
+	 * time
+	 */
+	private static Pattern buildPattern(String[] line) {
+		StringBuffer sb = new StringBuffer();
+		for (int i = 1; i < line.length; i++) {
+			// Build the RegEx pattern for each comma delimited header name
+			// Suffixed with a aggregator pipe
+			sb.append("\\s*" + line[i].trim() + "(\\s\\s|\\s:|:|\\s-|-)");
+			if (i != line.length - 1) {
+				sb.append("|");
+			}
+		}
+		int patternFlags = 0;
+		patternFlags |= Pattern.CASE_INSENSITIVE;
+		patternFlags |= Pattern.DOTALL;
+		patternFlags |= Pattern.MULTILINE;
+		Pattern p = Pattern.compile("^(" + sb + ")", patternFlags);
+		return p;
+	}
+
+	public void process(JCas jCas) throws AnalysisEngineProcessException {
+		String text = jCas.getDocumentText();
+		if (text == null) {
+			String docId = DocumentIDAnnotationUtil.getDocumentID(jCas);
+			logger.info("text is null for docId=" + docId);
+		} else {
+			ArrayList<Segment> sorted_segments = new ArrayList<Segment>();
+			for (String id : patterns.keySet()) {
+				Pattern p = patterns.get(id);
+				// System.out.println("Pattern" + p);
+				Matcher m = p.matcher(text);
+				while (m.find()) {
+					Segment segment = new Segment(jCas);
+					segment.setBegin(m.start());
+					segment.setEnd(m.end());
+					segment.setId(id);					
+					sorted_segments.add(segment);
+				}
+			}
+			// If there are non segments, create a simple one that spans the
+			// entire doc
+			if (sorted_segments.size() <= 0) {
+				Segment header = new Segment(jCas);
+				header.setBegin(0);
+				header.setEnd(text.length());
+				header.setId(SIMPLE_SEGMENT);
+				sorted_segments.add(header);
+			}			
+			// TODO: this is kinda redundant, but needed the sections in sorted
+			// Order to determine the end of section which is assumed to be the
+			// beginning of the next section
+			Collections.sort(sorted_segments, new Comparator<Segment>() {
+				public int compare(Segment s1, Segment s2) {
+					return s1.getBegin() - (s2.getBegin());
+				}
+			});
+			int index = 0;
+			for (Segment s : sorted_segments) {
+				int prevEnd = s.getEnd();
+				int nextBegin = text.length();
+				if (index > 0) {
+					// handle case for first section
+					sorted_segments.get(index - 1).getEnd();
+				}
+				if (index + 1 < sorted_segments.size()) {
+					// handle case for last section
+					nextBegin = sorted_segments.get(index + 1).getBegin();
+				}
+				// Only create a segment if there is some text.
+				// Handle the case where it's an empty segement
+				if (nextBegin > prevEnd) {
+					Segment segment = new Segment(jCas);
+					segment.setBegin(prevEnd);
+					segment.setEnd(nextBegin);
+					segment.setId(s.getId());
+					segment.addToIndexes();
+					segment.setPreferredText(section_names.get(s.getId()));					
+					index++;
+				}
+				// handle case where there is only a single SIMPLE_SEGMENT
+				else if (nextBegin == prevEnd && nextBegin > 0 && index == 0) {
+					Segment segment = new Segment(jCas);
+					segment.setBegin(0);
+					segment.setEnd(nextBegin);
+					segment.setId(s.getId());
+					segment.addToIndexes();
+					index++;
+				}
+			}	
+		}
+	}
+
+}

Propchange: ctakes/trunk/ctakes-core/src/main/java/org/apache/ctakes/core/ae/CDASegmentAnnotator.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: ctakes/trunk/ctakes-core/src/test/java/org/apache/ctakes/core/ae/TestCDASegmentAnnotator.java
URL: http://svn.apache.org/viewvc/ctakes/trunk/ctakes-core/src/test/java/org/apache/ctakes/core/ae/TestCDASegmentAnnotator.java?rev=1547576&view=auto
==============================================================================
--- ctakes/trunk/ctakes-core/src/test/java/org/apache/ctakes/core/ae/TestCDASegmentAnnotator.java
(added)
+++ ctakes/trunk/ctakes-core/src/test/java/org/apache/ctakes/core/ae/TestCDASegmentAnnotator.java
Tue Dec  3 20:37:59 2013
@@ -0,0 +1,91 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.ctakes.core.ae;
+
+import junit.framework.Assert;
+
+import org.apache.ctakes.typesystem.type.textspan.Segment;
+import org.apache.uima.analysis_engine.AnalysisEngine;
+import org.apache.uima.analysis_engine.AnalysisEngineProcessException;
+import org.apache.uima.collection.CollectionReader;
+import org.apache.uima.jcas.JCas;
+import org.apache.uima.resource.metadata.TypeSystemDescription;
+import org.cleartk.util.cr.FilesCollectionReader;
+import org.junit.Test;
+import org.uimafit.component.JCasAnnotator_ImplBase;
+import org.uimafit.factory.AnalysisEngineFactory;
+import org.uimafit.factory.CollectionReaderFactory;
+import org.uimafit.factory.TypeSystemDescriptionFactory;
+import org.uimafit.pipeline.JCasIterable;
+import org.uimafit.util.JCasUtil;
+
+public class TestCDASegmentAnnotator {
+
+	public static String INPUT_FILE = "../ctakes-regression-test/testdata/input/plaintext/doc2_07543210_sample_current.txt";
+
+	@Test
+	public void TestCDASegmentPipeLine() throws Exception {
+		TypeSystemDescription typeSystem = TypeSystemDescriptionFactory
+				.createTypeSystemDescription();
+
+		CollectionReader reader = CollectionReaderFactory
+				.createCollectionReader(FilesCollectionReader.class,
+						typeSystem, FilesCollectionReader.PARAM_ROOT_FILE,
+						INPUT_FILE);
+
+		AnalysisEngine sectionAnnotator = AnalysisEngineFactory
+				.createPrimitive(CDASegmentAnnotator.class, typeSystem);
+		AnalysisEngine dumpOutput = AnalysisEngineFactory.createPrimitive(
+				DumpOutputAE.class, typeSystem);
+		// SimplePipeline.runPipeline(reader, sectionAnnotator, dumpOutput);
+		JCasIterable casIter = new JCasIterable(reader, sectionAnnotator,
+				dumpOutput);
+		final String expected_hpi_section = "1.3.6.1.4.1.19376.1.5.3.1.3.4";
+		final int expected_begin = 220;
+		final int expected_end = 1610;
+		boolean section_exists = false;
+		int section_begin = 0;
+		int section_end = 0;
+
+		while (casIter.hasNext()) {
+			JCas jCas = casIter.next();
+			for (Segment segment : JCasUtil.select(jCas, Segment.class)) {
+				if (expected_hpi_section.equalsIgnoreCase(segment.getId())) {
+					section_exists = true;
+					section_begin = segment.getBegin();
+					section_end = segment.getEnd();
+					break;
+				}
+			}
+		}
+		Assert.assertEquals(section_exists, true);
+		Assert.assertEquals(expected_begin, section_begin);
+		Assert.assertEquals(expected_end, section_end);
+	}
+
+	public static class DumpOutputAE extends JCasAnnotator_ImplBase {
+		public void process(JCas jCas) throws AnalysisEngineProcessException {
+			for (Segment segment : JCasUtil.select(jCas, Segment.class)) {
+				System.out.println("Segment:" + segment.getId() + " Begin:"
+						+ segment.getBegin() + " End:" + segment.getEnd());
+				// System.out.println("Text" + segment.getCoveredText());
+			}
+		}
+	}
+}

Propchange: ctakes/trunk/ctakes-core/src/test/java/org/apache/ctakes/core/ae/TestCDASegmentAnnotator.java
------------------------------------------------------------------------------
    svn:eol-style = native



Mime
View raw message