in ctakes-drug-ner/src/main/java/org/apache/ctakes/drugner/cc/ConsumeNamedEntityRecordModel.java [239:446]
private void assignNamedEntityFeats(CAS cas)
throws ResourceProcessException {
try {
JCas jcas = cas.getCurrentView().getJCas();
//JCas jcas = cas.getJCas().getView("plaintext");
//System.err.println("Document Id: "+DocumentIDAnnotationUtil.getDocumentID(jcas));
boolean gotMeds = false;
int trackMedOccur = 0;
String medInfo = "";
//int keepTrackOfUID = 0;
JFSIndexRepository indexes = jcas.getJFSIndexRepository();
Set segmentSet = new HashSet();
Iterator segmentItr = indexes.getAnnotationIndex(Segment.type).iterator();
while (segmentItr.hasNext())
{
Segment s = (Segment)segmentItr.next();
segmentSet.add(s);
//System.err.println("Segment :"+ s.getCoveredText());
}
Iterator nerItr = indexes.getAnnotationIndex(MedicationMention.type).iterator();
while (nerItr.hasNext())
{
MedicationMention neAnnot = (MedicationMention) nerItr.next();
//System.err.println("DrugNE :"+neAnnot.getCoveredText());
gotDup = false;
// assign segment ID
Iterator segItr = segmentSet.iterator();
while (segItr.hasNext())
{
Segment seg = (Segment) segItr.next();
if ((keepTrackOfDupBegin == neAnnot.getBegin()) && (keepTrackOfDupEnd == neAnnot.getEnd()))
{
gotDup = true;
}
if ((neAnnot.getBegin() >= seg.getBegin())
&& (neAnnot.getEnd() <= seg.getEnd()) && !gotDup) {
// found segment for this NE
String segmentID = seg.getId();
if (iv_medicalSections.contains(segmentID)
|| !iv_useCurrentMedsSectionOnly.booleanValue()) {
if (!gotDup) {
keepTrackOfDupBegin = neAnnot.getBegin();
keepTrackOfDupEnd = neAnnot.getEnd();
TimeMention startTimeMention = neAnnot.getStartDate();
Date localDate = null;
if (startTimeMention!=null) localDate = startTimeMention.getDate();
String chunk = null;
boolean foundChunk = false;
Iterator findChunk = indexes
.getAnnotationIndex(
ChunkAnnotation.type)
.iterator();
try {
while (findChunk.hasNext() && !foundChunk)
{
ChunkAnnotation ca = (ChunkAnnotation) findChunk.next();
if (neAnnot.getBegin() >= ca.getBegin()
&& neAnnot.getEnd() <= ca
.getEnd()) {
chunk = ca.getCoveredText()
.replace('\n', ' ')
.replace(',', ';');
foundChunk = true;
}
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
String containedInSubSection = segmentID;
Iterator subSectionItr = indexes.getAnnotationIndex(
SubSectionAnnotation.type).iterator();
while (subSectionItr.hasNext())
{
SubSectionAnnotation ssAnnot = (SubSectionAnnotation) subSectionItr.next();
if (ssAnnot.getSubSectionBodyBegin() <= neAnnot.getBegin() && ssAnnot.getSubSectionBodyEnd() >= neAnnot.getEnd())
{
Iterator textSpanInSs = FSUtil.getAnnotationsIteratorInSpan(jcas, WordToken.type, ssAnnot.getSubSectionHeaderBegin(), ssAnnot.getSubSectionHeaderEnd());
String subSectionHeaderName = "";
while (textSpanInSs.hasNext())
{
WordToken wta = (WordToken) textSpanInSs.next();
subSectionHeaderName = subSectionHeaderName + " " + wta.getCoveredText();
}
containedInSubSection = containedInSubSection+"|"+subSectionHeaderName+"|"+ssAnnot.getStatus();
}
}
gotMeds = true;
trackMedOccur++;
Calendar calendar = Calendar.getInstance();
SimpleDateFormat format = new SimpleDateFormat("MM'/'dd'/'yyyy");
if(vRevDate != null && vRevDate.length() > 0)
calendar.setTimeInMillis(new Long(vRevDate).longValue());
else if(vNoteDate != null && vNoteDate.length() > 0)
calendar.setTimeInMillis(new Long(vNoteDate).longValue());
String globalDate = format.format(calendar.getTime());
// if (localDate == null
// || localDate.length() < 1) {
// localDate = globalDate;
// }
// Iterator neItr = FSUtil.getAnnotationsIteratorInSpan(jcas, IdentifiedAnnotation.type, neAnnot.getBegin(), neAnnot.getEnd()+1);
String neCui = "n/a";
String status = "n/a";
String rxNormCui = "n/a";
FSArray ocArr = neAnnot.getOntologyConceptArr();
if (ocArr != null)
{
for (int i = 0; i < ocArr.size(); i++)
{
OntologyConcept oc = (OntologyConcept) ocArr.get(i);
neCui = oc.getCode();
rxNormCui = oc.getOui();
}
}
MedicationStrengthModifier strength = neAnnot.getMedicationStrength();
MedicationStrength strengthTerm = (MedicationStrength) strength.getNormalizedForm();
String strengthTermString = "null";
if (strengthTerm != null) {
strengthTermString = strengthTerm.getNumber()+ " " +strengthTerm.getUnit();
}
String medicationDosageString = "null";
MedicationDosageModifier dosageModifier = neAnnot.getMedicationDosage();
if (dosageModifier != null) {
MedicationDosage d = (MedicationDosage) dosageModifier.getNormalizedForm();
if (d!=null) medicationDosageString = d.getValue();
}
String medicationFrequencyNumber = "null";
MedicationFrequencyModifier freqModifier = neAnnot.getMedicationFrequency();
if (freqModifier != null) {
MedicationFrequency f = (MedicationFrequency) freqModifier.getNormalizedForm();
if (f != null) medicationFrequencyNumber = f.getNumber()+" "+f.getUnit();
}
String duration = "null";
MedicationDurationModifier durationModifier = neAnnot.getMedicationDuration();
if (durationModifier != null) {
MedicationDuration d = (MedicationDuration) durationModifier.getNormalizedForm();
if (d!=null) duration = d.getValue();
}
String route = "null";
MedicationRouteModifier routeModifier = neAnnot.getMedicationRoute();
if (routeModifier != null) {
MedicationRoute r = (MedicationRoute) routeModifier.getNormalizedForm();
if (r != null) route = r.getValue();
}
String form = "null";
MedicationFormModifier formModifier = neAnnot.getMedicationForm();
if (formModifier != null) {
MedicationForm f = (MedicationForm) formModifier.getNormalizedForm();
if (f!=null) form = f.getValue();
}
String changeStatus = "null";
MedicationStatusChangeModifier scModifier = neAnnot.getMedicationStatusChange();
if (scModifier != null) {
MedicationStatusChange sc = (MedicationStatusChange) scModifier.getNormalizedForm();
if (sc!=null) changeStatus = sc.getValue();
}
medInfo = clinicNumber + "," +neAnnot.getCoveredText() + "," + rxNormCui
+ ",\"" + neAnnot.getStartDate() + "\","
+ globalDate + "," + medicationDosageString + "," +strengthTermString + ","
+ medicationFrequencyNumber + "," + duration + "," + route + ","
+ form + "," + status + ","
+ changeStatus + "," +neAnnot.getConfidence() + "," +containedInSubSection
+ "," +docLinkId+"_"+docRevision+","+chunk;
store(fileForIO, medInfo);
}
}
}
}
}
} catch (NullPointerException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
catch (Exception e) {
throw new ResourceProcessException(e);
}
}