private void executeFSMs()

in ctakes-drug-ner/src/main/java/org/apache/ctakes/drugner/ae/DrugMentionAnnotator.java [664:873]


	private void executeFSMs(JCas jcas, List baseTokenList, List namedE,
			List wordTokenList) throws AnnotatorProcessException
			{
		try
		{
			Set fractionTokenSet = iv_fractionFSM.execute(baseTokenList);
			addAnnotations(jcas, fractionTokenSet, FractionStrengthAnnotation.type);

			Set decimalTokenSet = iv_decimalFSM.execute(baseTokenList);

			addAnnotations(jcas, decimalTokenSet, FractionStrengthAnnotation.type);

			Set statusTokenSet = iv_statusFSM.execute(baseTokenList);

			addAnnotations(jcas, statusTokenSet, DrugChangeStatusAnnotation.type);    
			//statusConfidence = true;

			Set rangeTokenSet = iv_rangeFSM.execute(baseTokenList);

      addAnnotations(jcas, decimalTokenSet, RangeStrengthAnnotation.type);
      //Mayo SPM 2/20/2012 Changed due to separation of strength tokens
      Set strengthTokenSet = iv_strengthUnitFSM.execute(baseTokenList, rangeTokenSet);
      Iterator measurementTokenItr = strengthTokenSet.iterator();
      int begin = 0, previous = 0;
      while (measurementTokenItr.hasNext())
      {
        Iterator chkNE = namedE.iterator();
        Iterator newNE = wordTokenList.iterator();
        boolean neFound = false;
      //  MedicationMention ne = null;
        WordToken we = null;
        Object mt = (Object)  measurementTokenItr.next();
        if (mt instanceof  StrengthUnitToken) {
        	// StrengthUnitToken mt = (StrengthUnitToken) measurementTokenItr.next();
        	int begSeg = ((StrengthUnitToken) mt).getStartOffset(), endSeg = ((StrengthUnitToken) mt).getEndOffset();
        	StrengthUnitAnnotation ma = new StrengthUnitAnnotation(jcas, begSeg, endSeg);
        	ma.addToIndexes();
        } else {
        	int begSeg = ((StrengthUnitCombinedToken) mt).getStartOffset(), endSeg = ((StrengthUnitCombinedToken) mt).getEndOffset();
        	StrengthUnitAnnotation ma = new StrengthUnitAnnotation(jcas, begSeg, endSeg);
        	ma.setBegin(findTextualStringOffset(ma.getCoveredText()) + begSeg);
        	ma.addToIndexes();
        }
 
				//TODO: Does this need to be commented out? Created Strength        
			}

//      Set decTokenSet = null;
//      {
//        decTokenSet = iv_strengthFSM.execute(baseTokenList, decimalTokenSet,
//            fractionTokenSet);
//        Iterator decTokenItr = decTokenSet.iterator();
//
//        while (decTokenItr.hasNext())
//        {
//          StrengthToken mt = (StrengthToken) decTokenItr.next();
//          StrengthAnnotation ma = new StrengthAnnotation(jcas, mt
//              .getStartOffset(), mt.getEndOffset());
//          ma.addToIndexes();
//          // loadandAppend("./strengthTable.csv", ma.getCoveredText(),
//          // true);
//
//        }
//      }

			Set formTokenSet = iv_formFSM.execute(baseTokenList,
					/* decimalTokenSet */new HashSet());
			Iterator formTokenItr = formTokenSet.iterator();

			while (formTokenItr.hasNext())
			{
				FormToken mt = (FormToken) formTokenItr.next();
				FormAnnotation ma = new FormAnnotation(jcas, mt.getStartOffset(), mt.getEndOffset());

				ma.addToIndexes();
				// if (defaultNE != null && defaultNE.getCoveredText() != null)
				// defaultNE.setForm(ma.getCoveredText());

			}

			// last run checks for numbers (text or actual) in front of dosage
			// info and see how we align w/ the ne if they exist to determine
			// confidence factoring
			//      if (!doseConfidence && decTokenSet != null)
//      {
        Set preTokenSet = iv_strengthFSM.execute(baseTokenList, strengthTokenSet, fractionTokenSet);
        Iterator preTokenItr = preTokenSet.iterator();

        while (preTokenItr.hasNext())
        {
          StrengthToken mt = (StrengthToken) preTokenItr.next();
          int begOff = mt.getStartOffset();
          int endOff = mt.getEndOffset();
          StrengthAnnotation ma = new StrengthAnnotation(jcas, begOff, endOff);
          Iterator subStrengthItr = FSUtil.getAnnotationsIteratorInSpan(jcas, StrengthUnitAnnotation.type, begOff, endOff);
          if (subStrengthItr.hasNext() )
            	  ma.setEnd(((StrengthUnitAnnotation)subStrengthItr.next()).getBegin());
          ma.addToIndexes();
          // loadandAppend("./strengthTable.csv", ma.getCoveredText(),
          // true);

        }
//      }
			Set doseTokenSet = iv_dosagesFSM.execute(baseTokenList, formTokenSet,
					strengthTokenSet);
			Iterator dosTokenItr = doseTokenSet.iterator();
			Iterator formCheckItr = formTokenSet.iterator();
			Iterator strengthCheckItr = strengthTokenSet.iterator();
			boolean foundDosage = false;
			int begSegDose = 0, endSegDose = 0;

			while (dosTokenItr.hasNext())
			{
				DosageToken mt = (DosageToken) dosTokenItr.next();
				begSegDose = mt.getStartOffset();
				endSegDose = mt.getEndOffset();
				DosagesAnnotation ma = new DosagesAnnotation(jcas, begSegDose,
						endSegDose);

				ma.addToIndexes();

			}
			Set suffixTokenSet = iv_suffixFSM.execute(baseTokenList, strengthTokenSet);

			Iterator suffixTokenItr = suffixTokenSet.iterator();
			while (suffixTokenItr.hasNext())
			{
				SuffixStrengthToken mt = (SuffixStrengthToken) suffixTokenItr.next();
				SuffixStrengthAnnotation ma = new SuffixStrengthAnnotation(jcas, mt.getStartOffset(), mt.getEndOffset());
				ma.addToIndexes();
			}
			// This needs to be handled differently. But since I'm not sure if this feature will be utilized
			// I am going to leave 'as is' for now.

			Set routeTokenSet = iv_routeFSM.execute(baseTokenList);
			boolean foundRoute = false;
			Iterator routeTokenItr = routeTokenSet.iterator();
			int begSegRT = 0, endSegRT = 0;
			while (routeTokenItr.hasNext())
			{
				RouteToken mt = (RouteToken) routeTokenItr.next();
				begSegRT = mt.getStartOffset();
				endSegRT = mt.getEndOffset();
				RouteAnnotation ma = new RouteAnnotation(jcas, begSegRT, endSegRT);
				ma.setIntakeMethod(Integer.valueOf(mt.getFormMethod()).toString());
				ma.addToIndexes();

			}

			Set frequencyUnitTokenSet = iv_frequencyUnitFSM.execute(baseTokenList);
			boolean foundFrequencyUnit = false;
			Iterator frequencyUnitTokenItr = frequencyUnitTokenSet.iterator();
			int begSegFUT = 0, endSegFUT = 0;
			while (frequencyUnitTokenItr.hasNext())
			{

				FrequencyUnitToken fut = (FrequencyUnitToken) frequencyUnitTokenItr.next();

				begSegFUT = fut.getStartOffset();
				endSegFUT = fut.getEndOffset();
				FrequencyUnitAnnotation ma = new FrequencyUnitAnnotation(jcas,
						begSegFUT, endSegFUT);
				ma.setPeriod(Double.valueOf( fut.getFrequencyUnitQuantity()).floatValue());
				ma.addToIndexes();

			}
			// The frequencyFSM can take advantage of the frequencyUnit to
			// establish conditions via the override
			Set frequencyTokenSet = iv_frequencyFSM.execute(baseTokenList,
					frequencyUnitTokenSet, rangeTokenSet);
			boolean foundFrequency = false;
			Iterator frequencyTokenItr = frequencyTokenSet.iterator();
			int begSegFT = 0, endSegFT = 0;
			while (frequencyTokenItr.hasNext())
			{

				FrequencyToken ft = (FrequencyToken) frequencyTokenItr.next();
				begSegFT = ft.getStartOffset();
				endSegFT = ft.getEndOffset();
				FrequencyAnnotation ma = new FrequencyAnnotation(jcas, begSegFT,
						endSegFT);
				ma.addToIndexes();

			}

			/* Check again if confidence was found during frequency check */

			Set durationTokenSet = iv_durationFSM.execute(baseTokenList,
					rangeTokenSet);
			Iterator durationTokenItr = durationTokenSet.iterator();

			int begSegDU = 0, endSegDU = 0;
			while (durationTokenItr.hasNext())
			{
				DurationToken du = (DurationToken) durationTokenItr.next();
				begSegDU = du.getStartOffset();
				endSegDU = du.getEndOffset();
				DurationAnnotation ma = new DurationAnnotation(jcas, begSegDU, endSegDU);
				// dm.setDurationElement(jcas, begSegDU, endSegDU);
				ma.addToIndexes();
				// loadandAppend("./frequencyTable.csv", ma.getCoveredText(),
				// true);
			}

		} catch (Exception e)
		{

			throw new AnnotatorProcessException(e);
		}
			}