private void assignNamedEntityFeats()

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);
		}
	}