Examples of DrugMention


Examples of org.apache.ctakes.drugner.DrugMention

            if (drugTokenAnt.getDrugChangeStatus().equals(DrugChangeStatusToken.OTHER))
              drugTokenAnt.setDrugChangeStatus(DrugChangeStatusToken.NOCHANGE);
          }           
          // No change is default state since the change state has been handled
        }
        DrugMention dm = new DrugMention(jcas, begin, end)
        boolean overrideStatus = false;
        boolean statusFound = false;
        if (!keepNoChangeStatus) {
          // All entries may not be appropriate, so some
          // filtering
          // may need to be implemented here
          JFSIndexRepository indexes = jcas.getJFSIndexRepository();
          Iterator subSectionItr = indexes.getAnnotationIndex(
              SubSectionAnnotation.type).iterator();

          String statusKey = null;
          while (subSectionItr.hasNext() && !statusFound)
          {

            SubSectionAnnotation ssid = (SubSectionAnnotation) subSectionItr.next();

            if (ssid.getSubSectionBodyBegin() <= tokenAnt.getBegin()
                && ssid.getSubSectionBodyEnd() >= tokenAnt.getEnd())
            {

              // Look for special case where date comes before the
              // drug mention
              // A better means to locate the beginning of the chunk
              // is lacking here mainly due
              // to the fact that the sentence annotator cannot be
              // trusted to find the beginning
              // accurately.
              boolean overrideDate = false;
              Iterator statusSpecialDateItr = FSUtil.getAnnotationsIteratorInSpan(jcas, DateAnnotation.type, ssid.getEnd(), drugTokenAnt.getBegin());
              while (statusSpecialDateItr.hasNext() && !overrideDate)
              {
                DateAnnotation specialDate = (DateAnnotation) statusSpecialDateItr.next();
                Iterator findLF = FSUtil.getAnnotationsIteratorInSpan(jcas,
                    NewlineToken.type, ssid.getEnd(), specialDate.getBegin());
                if (!findLF.hasNext())
                {
                  // if (specialDate.getEnd() <=
                  // drugTokenAnt.getBegin() ){
                  drugTokenAnt.setStartDate(specialDate.getCoveredText());
                  overrideDate = true;
                }
              }

              DrugChangeStatusAnnotation dsa = null;
              if (orderedDrugStatusChanges.hasNext())
              {
                dsa = (DrugChangeStatusAnnotation) orderedDrugStatusChanges.next();
              }
              if (dsa != null
                  && (dsa.getChangeStatus().compareTo(DrugChangeStatusElement.START_STATUS) == 0 ||
                      dsa.getChangeStatus().compareTo(DrugChangeStatusElement.STOP_STATUS) == 0))
              {
                // Should we override here? Let's get only the first
                // one as an override

                drugTokenAnt.setDrugChangeStatus(dsa.getChangeStatus());
              } else
              {
                statusKey = dm.convertToChangeStatus(ssid.getCoveredText());
                if (ssid.getStatus() == 1)
                {

                  // drugTokenAnt.setCertainty(-1);
                  statusKey = DrugChangeStatusToken.STOP;
                }
                if (statusKey.compareTo(DrugChangeStatusToken.NOCHANGE) == 0)
                {
                  Iterator oneDrugChangeStatus = FSUtil.getAnnotationsIteratorInSpan(jcas,
                      DrugChangeStatusAnnotation.type, ssid.getBegin(), ssid.getEnd() + 1);
                  if (oneDrugChangeStatus.hasNext())
                  {
                    dsa = (DrugChangeStatusAnnotation) oneDrugChangeStatus.next();
                    drugTokenAnt.setDrugChangeStatus(dsa.getChangeStatus());
                    statusKey = dsa.getChangeStatus();
                  }
                }
                drugTokenAnt.setStatus(ssid.getStatus());
                dm.setDrugChangeStatusElement(statusKey, begin, end);

                statusFound = true;
              }
            }
          }

          // Look for special case where status comes before the drug
          // mention
          // A better means to locate the beginning of the chunk is
          // lacking here mainly due
          // to the fact that the sentence annotator cannot be trusted to
          // find the beginning
          // accurately.

          Iterator statusSpecialChangeItr = FSUtil.getAnnotationsIteratorInSpan(jcas, DrugChangeStatusAnnotation.type, begin - 20, drugTokenAnt.getBegin() + 1);
          while (statusSpecialChangeItr.hasNext())
          {
            DrugChangeStatusAnnotation specialDsa = (DrugChangeStatusAnnotation) statusSpecialChangeItr.next();
            if (specialDsa.getEnd() + 1 == drugTokenAnt.getBegin()
                && relatedStatus == null)
            {
              drugTokenAnt.setDrugChangeStatus(specialDsa.getChangeStatus());
              drugTokenAnt.setChangeStatusBegin(specialDsa.getBegin());
              drugTokenAnt.setChangeStatusEnd(specialDsa.getEnd());
              overrideStatus = true;
            }
          }
        }
        // If a strength token is discovered before the next
        // distinguished
        // drug mentions then the remaining sentence is scanned for
        // DrugChangeStatus.
        // Iterator strengthAllItr = FSUtil.getAnnotationsIteratorInSpan(
        // jcas, StrengthAnnotation.type, begin, end + 1);
        //
        // List holdStrength = new ArrayList();
        // while (strengthAllItr.hasNext()) {
        // StrengthAnnotation sa = (StrengthAnnotation) strengthAllItr
        // .next();
        // holdStrength.add(sa);
        // }
        String strengthText = null;
        boolean onlyNeedOneStrength = false;
        if (!keepNoChangeStatus || (drugTokenAnt.getStrength() == null)) {
          List holdStrength = getAnnotationsInSpan(jcas, StrengthAnnotation.type,
              begin, end + 1);

          Iterator strengthItr = findUniqueMentions(holdStrength.toArray()).iterator();

          double strengthValue = 0;


          int holdStrengthBeginOffset = 0, holdStrengthEndOffset = 0;


          while (strengthItr.hasNext() && !onlyNeedOneStrength)
          {
            StrengthAnnotation sa = (StrengthAnnotation) strengthItr.next();

            if (holdStrengthBeginOffset != sa.getBegin()
                && holdStrengthEndOffset != sa.getEnd()
                && (relatedStatus != null))
            {

              double curStrengthValue = 0;

              int hyphenLocation = sa.getCoveredText().indexOf("-");
              String holdStrengthValue = sa.getCoveredText();

              if (hyphenLocation > 0)
              {
                holdStrengthValue = holdStrengthValue.substring(0, hyphenLocation);
              }

              int spaceLocation = holdStrengthValue.indexOf(" ");

              if (spaceLocation > 0)
              {
                holdStrengthValue = holdStrengthValue.substring(0, spaceLocation);
              }

              if (holdStrengthValue != null
                  && holdStrengthValue.compareTo("") != 0)
                curStrengthValue = new Double(dm.parseDoubleValue(holdStrengthValue)).doubleValue();
              boolean findLowValue = true;

              if (relatedStatus[0].compareTo(DrugChangeStatusToken.INCREASE) == 0)
              {
                if (curStrengthValue > strengthValue)
                {
                  strengthValue = curStrengthValue;
                  strengthText = dm.getStrengthElement();
                }
              } else if (relatedStatus[0].compareTo(DrugChangeStatusToken.DECREASE) == 0)
              {
                if (findLowValue)
                  strengthValue = curStrengthValue;
                if (curStrengthValue <= strengthValue)
                {
                  strengthValue = curStrengthValue;
                  strengthText = dm.getStrengthElement();
                }
                findLowValue = false;

              } else if (relatedStatus[0].compareTo(DrugChangeStatusToken.SUM) == 0)
              {

                strengthValue = curStrengthValue;
                strengthText = dm.getStrengthElement();
                // get first value found
              }
            } else
            {
              strengthText = dm.getStrengthElement();
              if (!maxExists)
                onlyNeedOneStrength = true;
              else if (maxOffsetEnd + 1 == sa.getBegin())
              {
                onlyNeedOneStrength = true;
                strengthText = sa.getCoveredText();
              }
            }

            holdStrengthBeginOffset = sa.getBegin();
            holdStrengthEndOffset = sa.getEnd();

          }
        }
        String doseText = null;
        if (!keepNoChangeStatus || (drugTokenAnt.getDosage() == null)) {
          Iterator dosageItr = FSUtil.getAnnotationsIteratorInSpan(jcas,
              DosagesAnnotation.type, begin, end + 1);
          List holdDosages = new ArrayList();
          double doseValue = 0;

          int holdDoseBeginOffset = 0, holdDoseEndOffset = 0;
          boolean onlyNeedOneDose = false;

          while (dosageItr.hasNext() && !onlyNeedOneDose)
          {
            DosagesAnnotation da = (DosagesAnnotation) dosageItr.next();
            if (holdDoseBeginOffset != da.getBegin()
                && holdDoseEndOffset != da.getEnd() && relatedStatus != null)
            {
              int removeComma = da.getCoveredText().indexOf(',');
              String doseTextCheck = da.getCoveredText();
              if (removeComma > 0)
              {
                doseTextCheck = doseTextCheck.substring(0, removeComma);
              }
              double curDoseValue = new Double(dm.convertFromTextToNum(doseTextCheck)).doubleValue();
              boolean findLowValue = true;
              if (relatedStatus[0].compareTo(DrugChangeStatusToken.INCREASE) == 0)
              {
                if (curDoseValue > doseValue)
                {
                  doseValue = curDoseValue;
                  doseText = dm.getDosageElement();
                } else if (relatedStatus[0].compareTo(DrugChangeStatusToken.SUM) == 0)
                {

                  doseValue = curDoseValue;
                  doseText = dm.getDosageElement();

                }
              } else if (relatedStatus[0].compareTo(DrugChangeStatusToken.DECREASE) == 0)
              {
                if (findLowValue)
                  doseValue = curDoseValue;
                if (curDoseValue <= doseValue)
                {
                  doseValue = curDoseValue;
                  doseText = dm.getDosageElement();
                }
                findLowValue = false;
              }
              holdDosages.add(da);
              holdDoseBeginOffset = da.getBegin();
              holdDoseEndOffset = da.getEnd();
            } else
            {
              doseText = dm.getDosageElement();

              if (!maxExists)
                onlyNeedOneDose = true;
            }
          }
        }
        String frequencyText = null;
        if (!keepNoChangeStatus || (drugTokenAnt.getFrequency() == null)) {
          Iterator freqItr = FSUtil.getAnnotationsIteratorInSpan(jcas,
              FrequencyAnnotation.type, begin, end + 1);

          List holdFreqItr = new ArrayList();
          while (freqItr.hasNext())
          {
            holdFreqItr.add(freqItr.next());
          }
          Iterator frequencyItr = sortAnnotations(holdFreqItr.toArray()).iterator();

          List holdFrequency = new ArrayList();
          double frequencyValue = 0;

          int holdFrequencyBeginOffset = 0, holdFrequencyEndOffset = 0;
          boolean onlyNeedOneFrequency = false;

          while (frequencyItr.hasNext() && !onlyNeedOneFrequency)
          {
            FrequencyAnnotation fa = (FrequencyAnnotation) frequencyItr.next();

            if (dm.frequency != null
                && dm.frequency.getFrequencyMention() == null)
            {
              double curFrequencyValue = new Double(dm.convertFromTextToNum(fa.getCoveredText())).doubleValue();
              String curFreqValueText = new Double(curFrequencyValue).toString();
              dm.setFrequencyElement(curFreqValueText, fa.getBegin(), fa.getEnd());
              frequencyText = curFreqValueText;
            }
            onlyNeedOneFrequency = true;

            holdFrequency.add(fa);
            holdFrequencyBeginOffset = fa.getBegin();
            holdFrequencyEndOffset = fa.getEnd();
          }
        }
        boolean foundPRN = false;
        String frequencyUnitText = null;
        if (!keepNoChangeStatus || (drugTokenAnt.getFrequencyUnit() == null)) {
          Iterator frequencyUnitItr = FSUtil.getAnnotationsIteratorInSpan(jcas,
              FrequencyUnitAnnotation.type, begin, end + 1);
          List holdFrequencyUnit = new ArrayList();
          double frequencyUnitValue = 0;

          int holdFrequencyUnitBeginOffset = 0, holdFrequencyUnitEndOffset = 0;
          boolean onlyNeedOneFrequencyUnit = false;


          while (frequencyUnitItr.hasNext() && !onlyNeedOneFrequencyUnit)
          {
            FrequencyUnitAnnotation fua = (FrequencyUnitAnnotation) frequencyUnitItr.next();
            if (holdFrequencyUnitBeginOffset != fua.getBegin()
                && holdFrequencyUnitEndOffset != fua.getEnd()
                && relatedStatus != null)
            {
              double curFrequencyUnitValue = new Float(fua.getPeriod()).doubleValue();

              boolean findLowValue = true;
              if (relatedStatus[0].compareTo(DrugChangeStatusToken.INCREASE) == 0)
              {
                if (curFrequencyUnitValue > frequencyUnitValue)
                {
                  frequencyUnitValue = curFrequencyUnitValue;
                  frequencyUnitText = dm.getFrequencyUnitElement();
                }
              } else if (relatedStatus[0] == null
                  || relatedStatus[0].compareTo(DrugChangeStatusToken.DECREASE) == 0)
              {
                if (findLowValue)
                  frequencyUnitValue = curFrequencyUnitValue;
                if (curFrequencyUnitValue <= frequencyUnitValue)
                {
                  frequencyUnitValue = curFrequencyUnitValue;
                  frequencyUnitText = dm.getFrequencyUnitElement();
                }
                findLowValue = false;
              }
            } else
            {
              if (fua.getPeriod() == FrequencyUnitToken.QUANTITY_PRN)
                foundPRN = true;
              else
              {
                frequencyUnitText = dm.getFrequencyUnitElement();

                if (!maxExists)
                {
                  onlyNeedOneStrength = true;
                }

              }
            }

            holdFrequencyUnit.add(fua);
            holdFrequencyUnitBeginOffset = fua.getBegin();
            holdFrequencyUnitEndOffset = fua.getEnd();
          }

        }
        if (recurseNER != null && recurseNER.getDrugChangeStatus() != null
            && relatedStatus[0] != null  && dm.changeStatus == null)
          drugTokenAnt.setDrugChangeStatus(relatedStatus[0]);
        else if (keepNoChangeStatus || (dm.changeStatus != null &&
            (dm.changeStatus.getDrugChangeStatus().equals(DrugChangeStatusToken.INCREASEFROM)
                || dm.changeStatus.getDrugChangeStatus().equals(DrugChangeStatusToken.DECREASEFROM)))) {
          drugTokenAnt.setDrugChangeStatus(DrugChangeStatusToken.NOCHANGE);
        }
        else if (dm.getDrugChangeStatusElement() != null
            && dm.getDrugChangeStatusElement().compareTo("") != 0
            && dm.getDrugChangeStatusElement().compareTo(
                DrugChangeStatusToken.NOCHANGE) != 0
                /*
                 * && drugTokenAnt.getDrugChangeStatus() != null && drugTokenAnt
                 * .getDrugChangeStatus().compareTo(DrugChangeStatusToken .NOCHANGE)
                 * == 0
                 */
                && !overrideStatus)
        {
          // Don't want subsections here

          Iterator negateStatusChanges = FSUtil.getAnnotationsIteratorInSpan(
              jcas, SubSectionAnnotation.type,
              dm.changeStatus.getBeginOffset(),
              dm.changeStatus.getEndOffset() + 2);
          if ((!negateStatusChanges.hasNext() || statusFound) && !keepNoChangeStatus) {
            drugTokenAnt.setDrugChangeStatus(dm.getDrugChangeStatusElement());
            drugTokenAnt.setChangeStatusBegin(dm.getChangeStatusBegin());
            drugTokenAnt.setChangeStatusEnd(dm.getChangeStatusEnd());
          }
          else
            drugTokenAnt.setDrugChangeStatus(DrugChangeStatusToken.NOCHANGE);
        } else if (relatedStatus != null && relatedStatus[0] != null) {
          drugTokenAnt.setDrugChangeStatus(relatedStatus[0]);
View Full Code Here

Examples of org.apache.ctakes.drugner.DrugMention

    int originalEndSpan = endSpan;
    int originalBeginSpan = beginSpan;
    MedicationMention neAnnot = new MedicationMention(jcas, tokenDrugNER.getBegin(),
        tokenDrugNER.getEnd());
    int beginChunk = drugChangeStatus.getEnd();
    DrugMention compareDM = new DrugMention(jcas, beginChunk, endSpan);
    DrugMention priorDM = new DrugMention(jcas, beginSpan, drugChangeStatus.getBegin());
    if ((priorDM.dosage == null) && (priorDM.strength == null) && (priorDM.frequency == null ) )
      noPriorMention = true;
    if ((compareDM.dosage == null) && (compareDM.strength == null) && (compareDM.frequency == null ) )
      noPostMention = true;
    count++;
    if ( !noPriorMention)  {
      if (priorDM.dosage != null) {
        tokenDrugNER.setDosage(priorDM.getDosageElement());
        tokenDrugNER.setDosageBegin(priorDM.getDosageBegin());
        tokenDrugNER.setDosageEnd(priorDM.getDosageEnd());
      }
      if (priorDM.strength != null) {
        tokenDrugNER.setStrength(priorDM.getStrengthElement());
        tokenDrugNER.setStrengthBegin(priorDM.getStrengthBegin());
        tokenDrugNER.setStrengthEnd(priorDM.getStrengthEnd());
        tokenDrugNER.setStrengthUnit(priorDM.getStrengthUnitElement());
        tokenDrugNER.setSuBegin(priorDM.getStrengthUnitBegin());
        tokenDrugNER.setSuEnd(priorDM.getStrengthUnitEnd());
      }
      if (priorDM.frequency != null) {
        tokenDrugNER.setFrequency(priorDM.getFrequencyElement());
        tokenDrugNER.setFrequencyBegin(priorDM.getFrequencyBegin());
        tokenDrugNER.setFrequencyEnd(priorDM.getFrequencyEnd());
      }
    }
    neAnnot.setTypeID(NERTypeIdentifier);
    int [] updatedSpan = {beginSpan, endSpan};

    List<MedicationMention> buildNewNER = new ArrayList<MedicationMention>();

    buildNewNER.add(neAnnot);

    if (drugChangeStatus.getChangeStatus().compareTo(
        DrugChangeStatusToken.DECREASE) == 0)
    {
      int endChunk = 0;
      int startChunk = 0;
      int midChunk = 0;
      if (noPriorMention) {//Look for highest value on right side
        startChunk =  getAdjustedWindowSpan(jcas,  beginChunk, endSpan, false)[0];
        midChunk =  getAdjustedWindowSpan(jcas,  beginChunk, endSpan, true)[0];
        endChunk = getAdjustedWindowSpan(jcas,  beginChunk, endSpan, true)[1];
      }
      updatedSpan[0] = beginChunk;
      String [] changeStatusArray = new String [] {DrugChangeStatusToken.DECREASE, new Integer (drugChangeStatus.getBegin()).toString(), new Integer(drugChangeStatus.getEnd()).toString()};
      generateDrugMentionsAndAnnotations(jcas, buildNewNER, beginChunk,
          midChunk, tokenDrugNER, changeStatusArray, count,
          globalNER);
      if (noPriorMention) {
        compareDM = new DrugMention(jcas, startChunk, endChunk);
        if (compareDM.dosage != null) {
          tokenDrugNER.setDosage(compareDM.getDosageElement());
          tokenDrugNER.setDosageBegin(compareDM.getDosageBegin());
          tokenDrugNER.setDosageEnd(compareDM.getDosageEnd());
        }
        if (compareDM.strength != null) {
          tokenDrugNER.setStrength(compareDM.getStrengthElement());
          tokenDrugNER.setStrengthBegin(compareDM.getStrengthBegin());
          tokenDrugNER.setStrengthEnd(compareDM.getStrengthEnd());
          tokenDrugNER.setStrengthUnit(compareDM.getStrengthUnitElement());
          tokenDrugNER.setSuBegin(compareDM.getStrengthUnitBegin());
          tokenDrugNER.setSuEnd(compareDM.getStrengthUnitEnd());
        }
        if (compareDM.frequency != null) {
          tokenDrugNER.setFrequency(compareDM.getFrequencyElement());
          tokenDrugNER.setFrequencyBegin(compareDM.getFrequencyBegin());
          tokenDrugNER.setFrequencyEnd(compareDM.getFrequencyEnd());
        }
      }
      tokenDrugNER.setDrugChangeStatus(DrugChangeStatusToken.NOCHANGE);
    } else if (drugChangeStatus.getChangeStatus().compareTo(
        DrugChangeStatusToken.DECREASEFROM) == 0)
    {
      if (noPriorMention) {//Look for lowest value on right side
        beginChunk = getAdjustedWindowSpan(jcas,  beginChunk, endSpan, true)[0];
        if (beginChunk == -1) {
          beginChunk = drugChangeStatus.getEnd();
        }
      }
      String [] changeStatusArray = new String [] {DrugChangeStatusToken.DECREASE, new Integer (drugChangeStatus.getBegin()).toString(), new Integer(drugChangeStatus.getEnd()).toString()};
      generateDrugMentionsAndAnnotations(jcas,
          buildNewNER, beginChunk, endSpan,
          tokenDrugNER, changeStatusArray, count, globalNER);
      if (noPriorMention) {
        priorDM = new DrugMention(jcas, originalBeginSpan, beginChunk);
        if (priorDM.dosage != null) {
          tokenDrugNER.setDosage(priorDM.getDosageElement());
          tokenDrugNER.setDosageBegin(priorDM.getDosageBegin());
          tokenDrugNER.setDosageEnd(priorDM.getDosageEnd());
        }
        if (priorDM.strength != null) {
          tokenDrugNER.setStrength(priorDM.getStrengthElement());
          tokenDrugNER.setStrengthBegin(priorDM.getStrengthBegin());
          tokenDrugNER.setStrengthEnd(priorDM.getStrengthEnd());
          tokenDrugNER.setStrengthUnit(compareDM.getStrengthUnitElement());
          tokenDrugNER.setSuBegin(compareDM.getStrengthUnitBegin());
          tokenDrugNER.setSuEnd(compareDM.getStrengthUnitEnd());
        }
        if (priorDM.frequency != null) {
          tokenDrugNER.setFrequency(priorDM.getFrequencyElement());
          tokenDrugNER.setFrequencyBegin(priorDM.getFrequencyBegin());
          tokenDrugNER.setFrequencyEnd(priorDM.getFrequencyEnd());
        }
      }
      tokenDrugNER.setDrugChangeStatus(DrugChangeStatusToken.NOCHANGE);

    } else if (drugChangeStatus.getChangeStatus().compareTo(
        DrugChangeStatusToken.INCREASE) == 0)
    {
      if (noPriorMention) {//Look for highest value on right side
        endSpan =  getAdjustedWindowSpan(jcas,  beginChunk, endSpan, true)[0];
      }
      updatedSpan[0] = beginChunk;
      String [] changeStatusArray = new String [] {DrugChangeStatusToken.INCREASE, new Integer (drugChangeStatus.getBegin()).toString(), new Integer(drugChangeStatus.getEnd()).toString()};
      generateDrugMentionsAndAnnotations(jcas, buildNewNER, beginChunk,
          endSpan, tokenDrugNER, changeStatusArray, count,
          globalNER);
      if (noPriorMention) {
        compareDM = new DrugMention(jcas, endSpan, originalEndSpan);
        if (compareDM.dosage != null) {
          tokenDrugNER.setDosage(compareDM.getDosageElement());
          tokenDrugNER.setDosageBegin(compareDM.getDosageBegin());
          tokenDrugNER.setDosageEnd(compareDM.getDosageEnd());
        }
        if (compareDM.strength != null) {
          tokenDrugNER.setStrength(compareDM.getStrengthElement());
          tokenDrugNER.setStrengthBegin(compareDM.getStrengthBegin());
          tokenDrugNER.setStrengthEnd(compareDM.getStrengthEnd());
          tokenDrugNER.setStrengthUnit(compareDM.getStrengthUnitElement());
          tokenDrugNER.setSuBegin(compareDM.getStrengthUnitBegin());
          tokenDrugNER.setSuEnd(compareDM.getStrengthUnitEnd());
        }
        if (compareDM.frequency != null) {
          tokenDrugNER.setFrequency(compareDM.getFrequencyElement());
          tokenDrugNER.setFrequencyBegin(compareDM.getFrequencyBegin());
          tokenDrugNER.setFrequencyEnd(compareDM.getFrequencyEnd());
        }
      }
      tokenDrugNER.setDrugChangeStatus(DrugChangeStatusToken.OTHER);
    } else if (drugChangeStatus.getChangeStatus().compareTo(
        DrugChangeStatusToken.INCREASEFROM) == 0)
    {
      int startChunk = 0;
      int endChunk = 0;
      int midChunk = 0;
      if (noPriorMention) {//Look for lowest value on right side
        startChunk = getAdjustedWindowSpan(jcas,  beginChunk, endSpan, false)[0];
        midChunk =  getAdjustedWindowSpan(jcas,  beginChunk, endSpan, false)[1];
        endChunk = getAdjustedWindowSpan(jcas,  beginChunk, endSpan, true)[1];
      }
      String [] changeStatusArray = new String [] {DrugChangeStatusToken.INCREASE, new Integer (drugChangeStatus.getBegin()).toString(), new Integer(drugChangeStatus.getEnd()).toString()};
      generateDrugMentionsAndAnnotations(jcas, buildNewNER, startChunk,
          endChunk, tokenDrugNER,
          changeStatusArray, count, globalNER);
      if (noPriorMention) {
        priorDM = new DrugMention(jcas, originalBeginSpan, midChunk);
        if (priorDM.dosage != null) {
          tokenDrugNER.setDosage(priorDM.getDosageElement());
          tokenDrugNER.setDosageBegin(priorDM.getDosageBegin());
          tokenDrugNER.setDosageEnd(priorDM.getDosageEnd());
        }
        if (priorDM.strength != null) {
          tokenDrugNER.setStrength(priorDM.getStrengthElement());
          tokenDrugNER.setStrengthBegin(priorDM.getStrengthBegin());
          tokenDrugNER.setStrengthEnd(priorDM.getStrengthEnd());
          tokenDrugNER.setStrengthUnit(priorDM.getStrengthUnitElement());
          tokenDrugNER.setSuBegin(priorDM.getStrengthUnitBegin());
          tokenDrugNER.setSuEnd(priorDM.getStrengthUnitEnd());
        }
        if (priorDM.frequency != null) {
          tokenDrugNER.setFrequency(priorDM.getFrequencyElement());
          tokenDrugNER.setFrequencyBegin(priorDM.getFrequencyBegin());
          tokenDrugNER.setFrequencyEnd(priorDM.getFrequencyEnd());
        }
      }
      tokenDrugNER.setDrugChangeStatus(DrugChangeStatusToken.NOCHANGE);
    } else if (drugChangeStatus.getChangeStatus().compareTo(
        DrugChangeStatusToken.STOP) == 0)
    {
      tokenDrugNER.setDrugChangeStatus(tokenDrugNER.getDrugChangeStatus());
    } else if ((drugChangeStatus.getChangeStatus().compareTo(
        DrugChangeStatusToken.OTHER) == 0)
        || drugChangeStatus.getChangeStatus().compareTo(
            DrugChangeStatusToken.SUM) == 0)
    {


      double strengthChange = 1;
      double dosageChange = 1;
      double frequencyChange = 1;
      if (noPriorMention) {
        int [] updateSpan =   getAdjustedWindowSpan(jcas,  beginChunk, endSpan, false);
        compareDM = new DrugMention(jcas, endSpan, originalEndSpan);
        if (compareDM.dosage != null) {
          tokenDrugNER.setDosage(compareDM.getDosageElement());
          tokenDrugNER.setDosageBegin(compareDM.getDosageBegin());
          tokenDrugNER.setDosageEnd(compareDM.getDosageEnd());
        }
        if (compareDM.strength != null) {
          tokenDrugNER.setStrength(compareDM.getStrengthElement());
          tokenDrugNER.setStrengthBegin(compareDM.getStrengthBegin());
          tokenDrugNER.setStrengthEnd(compareDM.getStrengthEnd());
          tokenDrugNER.setStrengthUnit(compareDM.getStrengthUnitElement());
          tokenDrugNER.setSuBegin(compareDM.getStrengthUnitBegin());
          tokenDrugNER.setSuEnd(compareDM.getStrengthUnitEnd());
        }
        if (compareDM.frequency != null) {
          tokenDrugNER.setFrequency(compareDM.getFrequencyElement());
          tokenDrugNER.setFrequencyBegin(compareDM.getFrequencyBegin());
          tokenDrugNER.setFrequencyEnd(compareDM.getFrequencyEnd());
        }
      }
      tokenDrugNER.setDrugChangeStatus(DrugChangeStatusToken.OTHER);
      if (compareDM.getStrengthElement() != null
          && compareDM.getStrengthElement().compareTo("") != 0
          && compareDM != null)
      {
        strengthChange = new Double(compareDM.parseDoubleValue(compareDM.getStrengthElement())).doubleValue();

      } else if (priorDM.getStrengthElement() != null
          && priorDM.getStrengthElement().compareTo("") != 0
          && priorDM.getStrengthElement().length() > 0)
      {
        int spacePosition = priorDM.getStrengthElement().indexOf(" ");
        if (spacePosition > 0)
        {
          strengthChange = new Double(priorDM.parseDoubleValue(priorDM.getStrengthElement().substring(0, spacePosition))).doubleValue();

        } else
        {
          strengthChange = new Double(priorDM.parseDoubleValue(priorDM.getStrengthElement())).doubleValue();

        }
      }
      if (compareDM.getDosageElement() != null
          && compareDM.getDosageElement().compareTo("") != 0)
      {
        dosageChange = new Double(compareDM.parseDoubleValue(compareDM.getDosageElement())).doubleValue();
      } else if (priorDM.getDosageElement() != null
          && priorDM.getDosageElement().compareTo("") != 0)
      {
        dosageChange = new Double(priorDM.parseDoubleValue(priorDM.getDosageElement())).doubleValue();
      }
      if (compareDM.getFrequencyElement() != null
          && compareDM.getFrequencyElement().compareTo("") != 0)
      {
        frequencyChange = new Double(compareDM.parseDoubleValue(compareDM.getFrequencyElement())).doubleValue();
      } else if (priorDM.getFrequencyElement() != null
          && priorDM.getFrequencyElement().compareTo("") != 0)
      {
        frequencyChange = new Double(priorDM.parseDoubleValue(priorDM.getFrequencyElement())).doubleValue();
      }

      double strengthBefore = 1;
      double dosageBefore = 1;
      double frequencyBefore = 1;

      if (priorDM.getStrengthElement() != null
          && priorDM.getStrengthElement().compareTo("") != 0
          && priorDM.getStrengthElement().length() > 0)
      {
        strengthBefore = new Double(priorDM.parseDoubleValue(priorDM.getStrengthElement())).doubleValue();
        tokenDrugNER.setStrength(priorDM.getStrengthElement());
        tokenDrugNER.setStrengthBegin(priorDM.getStrengthBegin());
        tokenDrugNER.setStrengthEnd(priorDM.getStrengthEnd());
        tokenDrugNER.setStrengthUnit(priorDM.getStrengthUnitElement());
        tokenDrugNER.setSuBegin(priorDM.getStrengthUnitBegin());
        tokenDrugNER.setSuEnd(priorDM.getStrengthUnitEnd());
      } else if (tokenDrugNER.getStrength() != null
          && tokenDrugNER.getStrength().compareTo("") != 0
          && tokenDrugNER.getStrength().length() > 0)
      {
        boolean handledSeparator = false;
        int hyphPosition = tokenDrugNER.getStrength().indexOf('-');
        String hyphString = tokenDrugNER.getStrength();
        if (hyphPosition > 0)
        {
          hyphString = tokenDrugNER.getStrength().substring(0, hyphPosition);

          strengthBefore = new Double(compareDM.parseDoubleValue(compareDM.convertFromTextToNum(hyphString))).doubleValue();
          handledSeparator = true;
        }
        int spacePosition = hyphString.indexOf(" ");
        if (spacePosition > 0)
        {
          hyphString = hyphString.substring(0, spacePosition);
          strengthBefore = new Double(priorDM.parseDoubleValue(priorDM.convertFromTextToNum(hyphString))).doubleValue();
          handledSeparator = true;
        }
        if (!handledSeparator)
          strengthBefore = new Double(compareDM.parseDoubleValue(tokenDrugNER.getStrength())).doubleValue();
      }
      if (priorDM.getDosageElement() != null
          && priorDM.getDosageElement().compareTo("") != 0
          && priorDM.dosage != null)
      {
        dosageBefore = new Double(priorDM.getDosageElement()).doubleValue();
        tokenDrugNER.setDosage(priorDM.getDosageElement());
        tokenDrugNER.setDosageBegin(priorDM.getDosageBegin());
        tokenDrugNER.setDosageEnd(priorDM.getDosageEnd());
      } else if (tokenDrugNER.getDosage() != null
          && tokenDrugNER.getDosage().compareTo("") != 0)
      {
        dosageBefore = new Double(compareDM.parseDoubleValue(tokenDrugNER.getDosage())).doubleValue();
      }
      if (priorDM.getFrequencyElement() != null
          && priorDM.getFrequencyElement().compareTo("") != 0)
      {
        frequencyBefore = new Double(priorDM.parseDoubleValue(priorDM.getFrequencyElement())).doubleValue();
        tokenDrugNER.setFrequency(priorDM.getFrequencyElement());

      } else if (tokenDrugNER.getFrequency() != null
          && tokenDrugNER.getFrequency().compareTo("") != 0)
      {
        frequencyBefore = new Double(compareDM.parseDoubleValue(tokenDrugNER.getFrequency())).doubleValue();
View Full Code Here

Examples of org.apache.ctakes.drugner.DrugMention

            if (drugTokenAnt.getDrugChangeStatus().equals(DrugChangeStatusToken.OTHER))
              drugTokenAnt.setDrugChangeStatus(DrugChangeStatusToken.NOCHANGE);
          }           
          // No change is default state since the change state has been handled
        }
        DrugMention dm = new DrugMention(jcas, begin, end)
        boolean overrideStatus = false;
        boolean statusFound = false;
        if (!keepNoChangeStatus) {
          // All entries may not be appropriate, so some
          // filtering
          // may need to be implemented here
          JFSIndexRepository indexes = jcas.getJFSIndexRepository();
          Iterator subSectionItr = indexes.getAnnotationIndex(
              SubSectionAnnotation.type).iterator();

          String statusKey = null;
          while (subSectionItr.hasNext() && !statusFound)
          {

            SubSectionAnnotation ssid = (SubSectionAnnotation) subSectionItr.next();

            if (ssid.getSubSectionBodyBegin() <= tokenAnt.getBegin()
                && ssid.getSubSectionBodyEnd() >= tokenAnt.getEnd())
            {

              // Look for special case where date comes before the
              // drug mention
              // A better means to locate the beginning of the chunk
              // is lacking here mainly due
              // to the fact that the sentence annotator cannot be
              // trusted to find the beginning
              // accurately.
              boolean overrideDate = false;
              Iterator statusSpecialDateItr = FSUtil.getAnnotationsIteratorInSpan(jcas, DateAnnotation.type, ssid.getEnd(), drugTokenAnt.getBegin());
              while (statusSpecialDateItr.hasNext() && !overrideDate)
              {
                DateAnnotation specialDate = (DateAnnotation) statusSpecialDateItr.next();
                Iterator findLF = FSUtil.getAnnotationsIteratorInSpan(jcas,
                    NewlineToken.type, ssid.getEnd(), specialDate.getBegin());
                if (!findLF.hasNext())
                {
                  // if (specialDate.getEnd() <=
                  // drugTokenAnt.getBegin() ){
                  drugTokenAnt.setStartDate(specialDate.getCoveredText());
                  overrideDate = true;
                }
              }

              DrugChangeStatusAnnotation dsa = null;
              if (orderedDrugStatusChanges.hasNext())
              {
                dsa = (DrugChangeStatusAnnotation) orderedDrugStatusChanges.next();
              }
              if (dsa != null
                  && (dsa.getChangeStatus().compareTo(DrugChangeStatusElement.START_STATUS) == 0 ||
                      dsa.getChangeStatus().compareTo(DrugChangeStatusElement.STOP_STATUS) == 0))
              {
                // Should we override here? Let's get only the first
                // one as an override

                drugTokenAnt.setDrugChangeStatus(dsa.getChangeStatus());
              } else
              {
                statusKey = dm.convertToChangeStatus(ssid.getCoveredText());
                if (ssid.getStatus() == 1)
                {

                  // drugTokenAnt.setCertainty(-1);
                  statusKey = DrugChangeStatusToken.STOP;
                }
                if (statusKey.compareTo(DrugChangeStatusToken.NOCHANGE) == 0)
                {
                  Iterator oneDrugChangeStatus = FSUtil.getAnnotationsIteratorInSpan(jcas,
                      DrugChangeStatusAnnotation.type, ssid.getBegin(), ssid.getEnd() + 1);
                  if (oneDrugChangeStatus.hasNext())
                  {
                    dsa = (DrugChangeStatusAnnotation) oneDrugChangeStatus.next();
                    drugTokenAnt.setDrugChangeStatus(dsa.getChangeStatus());
                    statusKey = dsa.getChangeStatus();
                  }
                }
                drugTokenAnt.setStatus(ssid.getStatus());
                dm.setDrugChangeStatusElement(statusKey, begin, end);

                statusFound = true;
              }
            }
          }

          // Look for special case where status comes before the drug
          // mention
          // A better means to locate the beginning of the chunk is
          // lacking here mainly due
          // to the fact that the sentence annotator cannot be trusted to
          // find the beginning
          // accurately.

          Iterator statusSpecialChangeItr = FSUtil.getAnnotationsIteratorInSpan(jcas, DrugChangeStatusAnnotation.type, begin - 20, drugTokenAnt.getBegin() + 1);
          while (statusSpecialChangeItr.hasNext())
          {
            DrugChangeStatusAnnotation specialDsa = (DrugChangeStatusAnnotation) statusSpecialChangeItr.next();
            if (specialDsa.getEnd() + 1 == drugTokenAnt.getBegin()
                && relatedStatus == null)
            {
              drugTokenAnt.setDrugChangeStatus(specialDsa.getChangeStatus());
              drugTokenAnt.setChangeStatusBegin(specialDsa.getBegin());
              drugTokenAnt.setChangeStatusEnd(specialDsa.getEnd());
              overrideStatus = true;
            }
          }
        }
        // If a strength token is discovered before the next
        // distinguished
        // drug mentions then the remaining sentence is scanned for
        // DrugChangeStatus.
        // Iterator strengthAllItr = FSUtil.getAnnotationsIteratorInSpan(
        // jcas, StrengthAnnotation.type, begin, end + 1);
        //
        // List holdStrength = new ArrayList();
        // while (strengthAllItr.hasNext()) {
        // StrengthAnnotation sa = (StrengthAnnotation) strengthAllItr
        // .next();
        // holdStrength.add(sa);
        // }
        String strengthText = null;
        boolean onlyNeedOneStrength = false;
        if (!keepNoChangeStatus || (drugTokenAnt.getStrength() == null)) {
          List holdStrength = getAnnotationsInSpan(jcas, StrengthAnnotation.type,
              begin, end + 1);

          Iterator strengthItr = findUniqueMentions(holdStrength.toArray()).iterator();

          double strengthValue = 0;


          int holdStrengthBeginOffset = 0, holdStrengthEndOffset = 0;


          while (strengthItr.hasNext() && !onlyNeedOneStrength)
          {
            StrengthAnnotation sa = (StrengthAnnotation) strengthItr.next();

            if (holdStrengthBeginOffset != sa.getBegin()
                && holdStrengthEndOffset != sa.getEnd()
                && (relatedStatus != null))
            {

              double curStrengthValue = 0;

              int hyphenLocation = sa.getCoveredText().indexOf("-");
              String holdStrengthValue = sa.getCoveredText();

              if (hyphenLocation > 0)
              {
                holdStrengthValue = holdStrengthValue.substring(0, hyphenLocation);
              }

              int spaceLocation = holdStrengthValue.indexOf(" ");

              if (spaceLocation > 0)
              {
                holdStrengthValue = holdStrengthValue.substring(0, spaceLocation);
              }

              if (holdStrengthValue != null
                  && holdStrengthValue.compareTo("") != 0)
                curStrengthValue = new Double(dm.parseDoubleValue(holdStrengthValue)).doubleValue();
              boolean findLowValue = true;

              if (relatedStatus[0].compareTo(DrugChangeStatusToken.INCREASE) == 0)
              {
                if (curStrengthValue > strengthValue)
                {
                  strengthValue = curStrengthValue;
                  strengthText = dm.getStrengthElement();
                }
              } else if (relatedStatus[0].compareTo(DrugChangeStatusToken.DECREASE) == 0)
              {
                if (findLowValue)
                  strengthValue = curStrengthValue;
                if (curStrengthValue <= strengthValue)
                {
                  strengthValue = curStrengthValue;
                  strengthText = dm.getStrengthElement();
                }
                findLowValue = false;

              } else if (relatedStatus[0].compareTo(DrugChangeStatusToken.SUM) == 0)
              {

                strengthValue = curStrengthValue;
                strengthText = dm.getStrengthElement();
                // get first value found
              }
            } else
            {
              strengthText = dm.getStrengthElement();
              if (!maxExists)
                onlyNeedOneStrength = true;
              else if (maxOffsetEnd + 1 == sa.getBegin())
              {
                onlyNeedOneStrength = true;
                strengthText = sa.getCoveredText();
              }
            }

            holdStrengthBeginOffset = sa.getBegin();
            holdStrengthEndOffset = sa.getEnd();

          }
        }
        String doseText = null;
        if (!keepNoChangeStatus || (drugTokenAnt.getDosage() == null)) {
          Iterator dosageItr = FSUtil.getAnnotationsIteratorInSpan(jcas,
              DosagesAnnotation.type, begin, end + 1);
          List holdDosages = new ArrayList();
          double doseValue = 0;

          int holdDoseBeginOffset = 0, holdDoseEndOffset = 0;
          boolean onlyNeedOneDose = false;

          while (dosageItr.hasNext() && !onlyNeedOneDose)
          {
            DosagesAnnotation da = (DosagesAnnotation) dosageItr.next();
            if (holdDoseBeginOffset != da.getBegin()
                && holdDoseEndOffset != da.getEnd() && relatedStatus != null)
            {
              int removeComma = da.getCoveredText().indexOf(',');
              String doseTextCheck = da.getCoveredText();
              if (removeComma > 0)
              {
                doseTextCheck = doseTextCheck.substring(0, removeComma);
              }
              double curDoseValue = new Double(dm.convertFromTextToNum(doseTextCheck)).doubleValue();
              boolean findLowValue = true;
              if (relatedStatus[0].compareTo(DrugChangeStatusToken.INCREASE) == 0)
              {
                if (curDoseValue > doseValue)
                {
                  doseValue = curDoseValue;
                  doseText = dm.getDosageElement();
                } else if (relatedStatus[0].compareTo(DrugChangeStatusToken.SUM) == 0)
                {

                  doseValue = curDoseValue;
                  doseText = dm.getDosageElement();

                }
              } else if (relatedStatus[0].compareTo(DrugChangeStatusToken.DECREASE) == 0)
              {
                if (findLowValue)
                  doseValue = curDoseValue;
                if (curDoseValue <= doseValue)
                {
                  doseValue = curDoseValue;
                  doseText = dm.getDosageElement();
                }
                findLowValue = false;
              }
              holdDosages.add(da);
              holdDoseBeginOffset = da.getBegin();
              holdDoseEndOffset = da.getEnd();
            } else
            {
              doseText = dm.getDosageElement();

              if (!maxExists)
                onlyNeedOneDose = true;
            }
          }
        }
        String frequencyText = null;
        if (!keepNoChangeStatus || (drugTokenAnt.getFrequency() == null)) {
          Iterator freqItr = FSUtil.getAnnotationsIteratorInSpan(jcas,
              FrequencyAnnotation.type, begin, end + 1);

          List holdFreqItr = new ArrayList();
          while (freqItr.hasNext())
          {
            holdFreqItr.add(freqItr.next());
          }
          Iterator frequencyItr = sortAnnotations(holdFreqItr.toArray()).iterator();

          List holdFrequency = new ArrayList();
          double frequencyValue = 0;

          int holdFrequencyBeginOffset = 0, holdFrequencyEndOffset = 0;
          boolean onlyNeedOneFrequency = false;

          while (frequencyItr.hasNext() && !onlyNeedOneFrequency)
          {
            FrequencyAnnotation fa = (FrequencyAnnotation) frequencyItr.next();

            if (dm.frequency != null
                && dm.frequency.getFrequencyMention() == null)
            {
              double curFrequencyValue = new Double(dm.convertFromTextToNum(fa.getCoveredText())).doubleValue();
              String curFreqValueText = new Double(curFrequencyValue).toString();
              dm.setFrequencyElement(curFreqValueText, fa.getBegin(), fa.getEnd());
              frequencyText = curFreqValueText;
            }
            onlyNeedOneFrequency = true;

            holdFrequency.add(fa);
            holdFrequencyBeginOffset = fa.getBegin();
            holdFrequencyEndOffset = fa.getEnd();
          }
        }
        boolean foundPRN = false;
        String frequencyUnitText = null;
        if (!keepNoChangeStatus || (drugTokenAnt.getFrequencyUnit() == null)) {
          Iterator frequencyUnitItr = FSUtil.getAnnotationsIteratorInSpan(jcas,
              FrequencyUnitAnnotation.type, begin, end + 1);
          List holdFrequencyUnit = new ArrayList();
          double frequencyUnitValue = 0;

          int holdFrequencyUnitBeginOffset = 0, holdFrequencyUnitEndOffset = 0;
          boolean onlyNeedOneFrequencyUnit = false;


          while (frequencyUnitItr.hasNext() && !onlyNeedOneFrequencyUnit)
          {
            FrequencyUnitAnnotation fua = (FrequencyUnitAnnotation) frequencyUnitItr.next();
            if (holdFrequencyUnitBeginOffset != fua.getBegin()
                && holdFrequencyUnitEndOffset != fua.getEnd()
                && relatedStatus != null)
            {
              double curFrequencyUnitValue = new Float(fua.getPeriod()).doubleValue();

              boolean findLowValue = true;
              if (relatedStatus[0].compareTo(DrugChangeStatusToken.INCREASE) == 0)
              {
                if (curFrequencyUnitValue > frequencyUnitValue)
                {
                  frequencyUnitValue = curFrequencyUnitValue;
                  frequencyUnitText = dm.getFrequencyUnitElement();
                }
              } else if (relatedStatus[0] == null
                  || relatedStatus[0].compareTo(DrugChangeStatusToken.DECREASE) == 0)
              {
                if (findLowValue)
                  frequencyUnitValue = curFrequencyUnitValue;
                if (curFrequencyUnitValue <= frequencyUnitValue)
                {
                  frequencyUnitValue = curFrequencyUnitValue;
                  frequencyUnitText = dm.getFrequencyUnitElement();
                }
                findLowValue = false;
              }
            } else
            {
              if (fua.getPeriod() == FrequencyUnitToken.QUANTITY_PRN)
                foundPRN = true;
              else
              {
                frequencyUnitText = dm.getFrequencyUnitElement();

                if (!maxExists)
                {
                  onlyNeedOneStrength = true;
                }

              }
            }

            holdFrequencyUnit.add(fua);
            holdFrequencyUnitBeginOffset = fua.getBegin();
            holdFrequencyUnitEndOffset = fua.getEnd();
          }

        }
        if (recurseNER != null && recurseNER.getDrugChangeStatus() != null
            && relatedStatus[0] != null  && dm.changeStatus == null)
          drugTokenAnt.setDrugChangeStatus(relatedStatus[0]);
        else if (keepNoChangeStatus || (dm.changeStatus != null &&
            (dm.changeStatus.getDrugChangeStatus().equals(DrugChangeStatusToken.INCREASEFROM)
                || dm.changeStatus.getDrugChangeStatus().equals(DrugChangeStatusToken.DECREASEFROM)))) {
          drugTokenAnt.setDrugChangeStatus(DrugChangeStatusToken.NOCHANGE);
        }
        else if (dm.getDrugChangeStatusElement() != null
            && dm.getDrugChangeStatusElement().compareTo("") != 0
            && dm.getDrugChangeStatusElement().compareTo(
                DrugChangeStatusToken.NOCHANGE) != 0
                /*
                 * && drugTokenAnt.getDrugChangeStatus() != null && drugTokenAnt
                 * .getDrugChangeStatus().compareTo(DrugChangeStatusToken .NOCHANGE)
                 * == 0
                 */
                && !overrideStatus)
        {
          // Don't want subsections here

          Iterator negateStatusChanges = FSUtil.getAnnotationsIteratorInSpan(
              jcas, SubSectionAnnotation.type,
              dm.changeStatus.getBeginOffset(),
              dm.changeStatus.getEndOffset() + 2);
          if ((!negateStatusChanges.hasNext() || statusFound) && !keepNoChangeStatus) {
            drugTokenAnt.setDrugChangeStatus(dm.getDrugChangeStatusElement());
            drugTokenAnt.setChangeStatusBegin(dm.getChangeStatusBegin());
            drugTokenAnt.setChangeStatusEnd(dm.getChangeStatusEnd());
          }
          else
            drugTokenAnt.setDrugChangeStatus(DrugChangeStatusToken.NOCHANGE);
        } else if (relatedStatus != null && relatedStatus[0] != null) {
          drugTokenAnt.setDrugChangeStatus(relatedStatus[0]);
View Full Code Here

Examples of org.apache.ctakes.drugner.DrugMention

    int originalEndSpan = endSpan;
    int originalBeginSpan = beginSpan;
    MedicationMention neAnnot = new MedicationMention(jcas, tokenDrugNER.getBegin(),
        tokenDrugNER.getEnd());
    int beginChunk = drugChangeStatus.getEnd();
    DrugMention compareDM = new DrugMention(jcas, beginChunk, endSpan);
    DrugMention priorDM = new DrugMention(jcas, beginSpan, drugChangeStatus.getBegin());
    if ((priorDM.dosage == null) && (priorDM.strength == null) && (priorDM.frequency == null ) )
      noPriorMention = true;
    if ((compareDM.dosage == null) && (compareDM.strength == null) && (compareDM.frequency == null ) )
      noPostMention = true;
    count++;
    if ( !noPriorMention)  {
      if (priorDM.dosage != null) {
        tokenDrugNER.setDosage(priorDM.getDosageElement());
        tokenDrugNER.setDosageBegin(priorDM.getDosageBegin());
        tokenDrugNER.setDosageEnd(priorDM.getDosageEnd());
      }
      if (priorDM.strength != null) {
        tokenDrugNER.setStrength(priorDM.getStrengthElement());
        tokenDrugNER.setStrengthBegin(priorDM.getStrengthBegin());
        tokenDrugNER.setStrengthEnd(priorDM.getStrengthEnd());
        tokenDrugNER.setStrengthUnit(priorDM.getStrengthUnitElement());
        tokenDrugNER.setSuBegin(priorDM.getStrengthUnitBegin());
        tokenDrugNER.setSuEnd(priorDM.getStrengthUnitEnd());
      }
      if (priorDM.frequency != null) {
        tokenDrugNER.setFrequency(priorDM.getFrequencyElement());
        tokenDrugNER.setFrequencyBegin(priorDM.getFrequencyBegin());
        tokenDrugNER.setFrequencyEnd(priorDM.getFrequencyEnd());
      }
    }
    neAnnot.setTypeID(NERTypeIdentifier);
    int [] updatedSpan = {beginSpan, endSpan};

    List<MedicationMention> buildNewNER = new ArrayList<MedicationMention>();

    buildNewNER.add(neAnnot);

    if (drugChangeStatus.getChangeStatus().compareTo(
        DrugChangeStatusToken.DECREASE) == 0)
    {
      int endChunk = 0;
      int startChunk = 0;
      int midChunk = 0;
      if (noPriorMention) {//Look for highest value on right side
        startChunk =  getAdjustedWindowSpan(jcas,  beginChunk, endSpan, false)[0];
        midChunk =  getAdjustedWindowSpan(jcas,  beginChunk, endSpan, true)[0];
        endChunk = getAdjustedWindowSpan(jcas,  beginChunk, endSpan, true)[1];
      }
      updatedSpan[0] = beginChunk;
      String [] changeStatusArray = new String [] {DrugChangeStatusToken.DECREASE, new Integer (drugChangeStatus.getBegin()).toString(), new Integer(drugChangeStatus.getEnd()).toString()};
      generateDrugMentionsAndAnnotations(jcas, buildNewNER, beginChunk,
          midChunk, tokenDrugNER, changeStatusArray, count,
          globalNER);
      if (noPriorMention) {
        compareDM = new DrugMention(jcas, startChunk, endChunk);
        if (compareDM.dosage != null) {
          tokenDrugNER.setDosage(compareDM.getDosageElement());
          tokenDrugNER.setDosageBegin(compareDM.getDosageBegin());
          tokenDrugNER.setDosageEnd(compareDM.getDosageEnd());
        }
        if (compareDM.strength != null) {
          tokenDrugNER.setStrength(compareDM.getStrengthElement());
          tokenDrugNER.setStrengthBegin(compareDM.getStrengthBegin());
          tokenDrugNER.setStrengthEnd(compareDM.getStrengthEnd());
          tokenDrugNER.setStrengthUnit(compareDM.getStrengthUnitElement());
          tokenDrugNER.setSuBegin(compareDM.getStrengthUnitBegin());
          tokenDrugNER.setSuEnd(compareDM.getStrengthUnitEnd());
        }
        if (compareDM.frequency != null) {
          tokenDrugNER.setFrequency(compareDM.getFrequencyElement());
          tokenDrugNER.setFrequencyBegin(compareDM.getFrequencyBegin());
          tokenDrugNER.setFrequencyEnd(compareDM.getFrequencyEnd());
        }
      }
      tokenDrugNER.setDrugChangeStatus(DrugChangeStatusToken.NOCHANGE);
    } else if (drugChangeStatus.getChangeStatus().compareTo(
        DrugChangeStatusToken.DECREASEFROM) == 0)
    {
      if (noPriorMention) {//Look for lowest value on right side
        beginChunk = getAdjustedWindowSpan(jcas,  beginChunk, endSpan, true)[0];
        if (beginChunk == -1) {
          beginChunk = drugChangeStatus.getEnd();
        }
      }
      String [] changeStatusArray = new String [] {DrugChangeStatusToken.DECREASE, new Integer (drugChangeStatus.getBegin()).toString(), new Integer(drugChangeStatus.getEnd()).toString()};
      generateDrugMentionsAndAnnotations(jcas,
          buildNewNER, beginChunk, endSpan,
          tokenDrugNER, changeStatusArray, count, globalNER);
      if (noPriorMention) {
        priorDM = new DrugMention(jcas, originalBeginSpan, beginChunk);
        if (priorDM.dosage != null) {
          tokenDrugNER.setDosage(priorDM.getDosageElement());
          tokenDrugNER.setDosageBegin(priorDM.getDosageBegin());
          tokenDrugNER.setDosageEnd(priorDM.getDosageEnd());
        }
        if (priorDM.strength != null) {
          tokenDrugNER.setStrength(priorDM.getStrengthElement());
          tokenDrugNER.setStrengthBegin(priorDM.getStrengthBegin());
          tokenDrugNER.setStrengthEnd(priorDM.getStrengthEnd());
          tokenDrugNER.setStrengthUnit(compareDM.getStrengthUnitElement());
          tokenDrugNER.setSuBegin(compareDM.getStrengthUnitBegin());
          tokenDrugNER.setSuEnd(compareDM.getStrengthUnitEnd());
        }
        if (priorDM.frequency != null) {
          tokenDrugNER.setFrequency(priorDM.getFrequencyElement());
          tokenDrugNER.setFrequencyBegin(priorDM.getFrequencyBegin());
          tokenDrugNER.setFrequencyEnd(priorDM.getFrequencyEnd());
        }
      }
      tokenDrugNER.setDrugChangeStatus(DrugChangeStatusToken.NOCHANGE);

    } else if (drugChangeStatus.getChangeStatus().compareTo(
        DrugChangeStatusToken.INCREASE) == 0)
    {
      if (noPriorMention) {//Look for highest value on right side
        endSpan =  getAdjustedWindowSpan(jcas,  beginChunk, endSpan, true)[0];
      }
      updatedSpan[0] = beginChunk;
      String [] changeStatusArray = new String [] {DrugChangeStatusToken.INCREASE, new Integer (drugChangeStatus.getBegin()).toString(), new Integer(drugChangeStatus.getEnd()).toString()};
      generateDrugMentionsAndAnnotations(jcas, buildNewNER, beginChunk,
          endSpan, tokenDrugNER, changeStatusArray, count,
          globalNER);
      if (noPriorMention) {
        compareDM = new DrugMention(jcas, endSpan, originalEndSpan);
        if (compareDM.dosage != null) {
          tokenDrugNER.setDosage(compareDM.getDosageElement());
          tokenDrugNER.setDosageBegin(compareDM.getDosageBegin());
          tokenDrugNER.setDosageEnd(compareDM.getDosageEnd());
        }
        if (compareDM.strength != null) {
          tokenDrugNER.setStrength(compareDM.getStrengthElement());
          tokenDrugNER.setStrengthBegin(compareDM.getStrengthBegin());
          tokenDrugNER.setStrengthEnd(compareDM.getStrengthEnd());
          tokenDrugNER.setStrengthUnit(compareDM.getStrengthUnitElement());
          tokenDrugNER.setSuBegin(compareDM.getStrengthUnitBegin());
          tokenDrugNER.setSuEnd(compareDM.getStrengthUnitEnd());
        }
        if (compareDM.frequency != null) {
          tokenDrugNER.setFrequency(compareDM.getFrequencyElement());
          tokenDrugNER.setFrequencyBegin(compareDM.getFrequencyBegin());
          tokenDrugNER.setFrequencyEnd(compareDM.getFrequencyEnd());
        }
      }
      tokenDrugNER.setDrugChangeStatus(DrugChangeStatusToken.OTHER);
    } else if (drugChangeStatus.getChangeStatus().compareTo(
        DrugChangeStatusToken.INCREASEFROM) == 0)
    {
      int startChunk = 0;
      int endChunk = 0;
      int midChunk = 0;
      if (noPriorMention) {//Look for lowest value on right side
        startChunk = getAdjustedWindowSpan(jcas,  beginChunk, endSpan, false)[0];
        midChunk =  getAdjustedWindowSpan(jcas,  beginChunk, endSpan, false)[1];
        endChunk = getAdjustedWindowSpan(jcas,  beginChunk, endSpan, true)[1];
      }
      String [] changeStatusArray = new String [] {DrugChangeStatusToken.INCREASE, new Integer (drugChangeStatus.getBegin()).toString(), new Integer(drugChangeStatus.getEnd()).toString()};
      generateDrugMentionsAndAnnotations(jcas, buildNewNER, startChunk,
          endChunk, tokenDrugNER,
          changeStatusArray, count, globalNER);
      if (noPriorMention) {
        priorDM = new DrugMention(jcas, originalBeginSpan, midChunk);
        if (priorDM.dosage != null) {
          tokenDrugNER.setDosage(priorDM.getDosageElement());
          tokenDrugNER.setDosageBegin(priorDM.getDosageBegin());
          tokenDrugNER.setDosageEnd(priorDM.getDosageEnd());
        }
        if (priorDM.strength != null) {
          tokenDrugNER.setStrength(priorDM.getStrengthElement());
          tokenDrugNER.setStrengthBegin(priorDM.getStrengthBegin());
          tokenDrugNER.setStrengthEnd(priorDM.getStrengthEnd());
          tokenDrugNER.setStrengthUnit(priorDM.getStrengthUnitElement());
          tokenDrugNER.setSuBegin(priorDM.getStrengthUnitBegin());
          tokenDrugNER.setSuEnd(priorDM.getStrengthUnitEnd());
        }
        if (priorDM.frequency != null) {
          tokenDrugNER.setFrequency(priorDM.getFrequencyElement());
          tokenDrugNER.setFrequencyBegin(priorDM.getFrequencyBegin());
          tokenDrugNER.setFrequencyEnd(priorDM.getFrequencyEnd());
        }
      }
      tokenDrugNER.setDrugChangeStatus(DrugChangeStatusToken.NOCHANGE);
    } else if (drugChangeStatus.getChangeStatus().compareTo(
        DrugChangeStatusToken.STOP) == 0)
    {
      tokenDrugNER.setDrugChangeStatus(tokenDrugNER.getDrugChangeStatus());
    } else if ((drugChangeStatus.getChangeStatus().compareTo(
        DrugChangeStatusToken.OTHER) == 0)
        || drugChangeStatus.getChangeStatus().compareTo(
            DrugChangeStatusToken.SUM) == 0)
    {


      double strengthChange = 1;
      double dosageChange = 1;
      double frequencyChange = 1;
      if (noPriorMention) {
        int [] updateSpan =   getAdjustedWindowSpan(jcas,  beginChunk, endSpan, false);
        compareDM = new DrugMention(jcas, endSpan, originalEndSpan);
        if (compareDM.dosage != null) {
          tokenDrugNER.setDosage(compareDM.getDosageElement());
          tokenDrugNER.setDosageBegin(compareDM.getDosageBegin());
          tokenDrugNER.setDosageEnd(compareDM.getDosageEnd());
        }
        if (compareDM.strength != null) {
          tokenDrugNER.setStrength(compareDM.getStrengthElement());
          tokenDrugNER.setStrengthBegin(compareDM.getStrengthBegin());
          tokenDrugNER.setStrengthEnd(compareDM.getStrengthEnd());
          tokenDrugNER.setStrengthUnit(compareDM.getStrengthUnitElement());
          tokenDrugNER.setSuBegin(compareDM.getStrengthUnitBegin());
          tokenDrugNER.setSuEnd(compareDM.getStrengthUnitEnd());
        }
        if (compareDM.frequency != null) {
          tokenDrugNER.setFrequency(compareDM.getFrequencyElement());
          tokenDrugNER.setFrequencyBegin(compareDM.getFrequencyBegin());
          tokenDrugNER.setFrequencyEnd(compareDM.getFrequencyEnd());
        }
      }
      tokenDrugNER.setDrugChangeStatus(DrugChangeStatusToken.OTHER);
      if (compareDM.getStrengthElement() != null
          && compareDM.getStrengthElement().compareTo("") != 0
          && compareDM != null)
      {
        strengthChange = new Double(compareDM.parseDoubleValue(compareDM.getStrengthElement())).doubleValue();

      } else if (priorDM.getStrengthElement() != null
          && priorDM.getStrengthElement().compareTo("") != 0
          && priorDM.getStrengthElement().length() > 0)
      {
        int spacePosition = priorDM.getStrengthElement().indexOf(" ");
        if (spacePosition > 0)
        {
          strengthChange = new Double(priorDM.parseDoubleValue(priorDM.getStrengthElement().substring(0, spacePosition))).doubleValue();

        } else
        {
          strengthChange = new Double(priorDM.parseDoubleValue(priorDM.getStrengthElement())).doubleValue();

        }
      }
      if (compareDM.getDosageElement() != null
          && compareDM.getDosageElement().compareTo("") != 0)
      {
        dosageChange = new Double(compareDM.parseDoubleValue(compareDM.getDosageElement())).doubleValue();
      } else if (priorDM.getDosageElement() != null
          && priorDM.getDosageElement().compareTo("") != 0)
      {
        dosageChange = new Double(priorDM.parseDoubleValue(priorDM.getDosageElement())).doubleValue();
      }
      if (compareDM.getFrequencyElement() != null
          && compareDM.getFrequencyElement().compareTo("") != 0)
      {
        frequencyChange = new Double(compareDM.parseDoubleValue(compareDM.getFrequencyElement())).doubleValue();
      } else if (priorDM.getFrequencyElement() != null
          && priorDM.getFrequencyElement().compareTo("") != 0)
      {
        frequencyChange = new Double(priorDM.parseDoubleValue(priorDM.getFrequencyElement())).doubleValue();
      }

      double strengthBefore = 1;
      double dosageBefore = 1;
      double frequencyBefore = 1;

      if (priorDM.getStrengthElement() != null
          && priorDM.getStrengthElement().compareTo("") != 0
          && priorDM.getStrengthElement().length() > 0)
      {
        strengthBefore = new Double(priorDM.parseDoubleValue(priorDM.getStrengthElement())).doubleValue();
        tokenDrugNER.setStrength(priorDM.getStrengthElement());
        tokenDrugNER.setStrengthBegin(priorDM.getStrengthBegin());
        tokenDrugNER.setStrengthEnd(priorDM.getStrengthEnd());
        tokenDrugNER.setStrengthUnit(priorDM.getStrengthUnitElement());
        tokenDrugNER.setSuBegin(priorDM.getStrengthUnitBegin());
        tokenDrugNER.setSuEnd(priorDM.getStrengthUnitEnd());
      } else if (tokenDrugNER.getStrength() != null
          && tokenDrugNER.getStrength().compareTo("") != 0
          && tokenDrugNER.getStrength().length() > 0)
      {
        boolean handledSeparator = false;
        int hyphPosition = tokenDrugNER.getStrength().indexOf('-');
        String hyphString = tokenDrugNER.getStrength();
        if (hyphPosition > 0)
        {
          hyphString = tokenDrugNER.getStrength().substring(0, hyphPosition);

          strengthBefore = new Double(compareDM.parseDoubleValue(compareDM.convertFromTextToNum(hyphString))).doubleValue();
          handledSeparator = true;
        }
        int spacePosition = hyphString.indexOf(" ");
        if (spacePosition > 0)
        {
          hyphString = hyphString.substring(0, spacePosition);
          strengthBefore = new Double(priorDM.parseDoubleValue(priorDM.convertFromTextToNum(hyphString))).doubleValue();
          handledSeparator = true;
        }
        if (!handledSeparator)
          strengthBefore = new Double(compareDM.parseDoubleValue(tokenDrugNER.getStrength())).doubleValue();
      }
      if (priorDM.getDosageElement() != null
          && priorDM.getDosageElement().compareTo("") != 0
          && priorDM.dosage != null)
      {
        dosageBefore = new Double(priorDM.getDosageElement()).doubleValue();
        tokenDrugNER.setDosage(priorDM.getDosageElement());
        tokenDrugNER.setDosageBegin(priorDM.getDosageBegin());
        tokenDrugNER.setDosageEnd(priorDM.getDosageEnd());
      } else if (tokenDrugNER.getDosage() != null
          && tokenDrugNER.getDosage().compareTo("") != 0)
      {
        dosageBefore = new Double(compareDM.parseDoubleValue(tokenDrugNER.getDosage())).doubleValue();
      }
      if (priorDM.getFrequencyElement() != null
          && priorDM.getFrequencyElement().compareTo("") != 0)
      {
        frequencyBefore = new Double(priorDM.parseDoubleValue(priorDM.getFrequencyElement())).doubleValue();
        tokenDrugNER.setFrequency(priorDM.getFrequencyElement());

      } else if (tokenDrugNER.getFrequency() != null
          && tokenDrugNER.getFrequency().compareTo("") != 0)
      {
        frequencyBefore = new Double(compareDM.parseDoubleValue(tokenDrugNER.getFrequency())).doubleValue();
View Full Code Here

Examples of org.apache.ctakes.drugner.DrugMention

            if (drugTokenAnt.getDrugChangeStatus().equals(DrugChangeStatusToken.OTHER))
              drugTokenAnt.setDrugChangeStatus(DrugChangeStatusToken.NOCHANGE);
          }           
          // No change is default state since the change state has been handled
        }
        DrugMention dm = new DrugMention(jcas, begin, end)
        boolean overrideStatus = false;
        boolean statusFound = false;
        if (!keepNoChangeStatus) {
          // All entries may not be appropriate, so some
          // filtering
          // may need to be implemented here
          JFSIndexRepository indexes = jcas.getJFSIndexRepository();
          Iterator subSectionItr = indexes.getAnnotationIndex(
              SubSectionAnnotation.type).iterator();

          String statusKey = null;
          while (subSectionItr.hasNext() && !statusFound)
          {

            SubSectionAnnotation ssid = (SubSectionAnnotation) subSectionItr.next();

            if (ssid.getSubSectionBodyBegin() <= tokenAnt.getBegin()
                && ssid.getSubSectionBodyEnd() >= tokenAnt.getEnd())
            {

              // Look for special case where date comes before the
              // drug mention
              // A better means to locate the beginning of the chunk
              // is lacking here mainly due
              // to the fact that the sentence annotator cannot be
              // trusted to find the beginning
              // accurately.
              boolean overrideDate = false;
              Iterator statusSpecialDateItr = FSUtil.getAnnotationsIteratorInSpan(jcas, DateAnnotation.type, ssid.getEnd(), drugTokenAnt.getBegin());
              while (statusSpecialDateItr.hasNext() && !overrideDate)
              {
                DateAnnotation specialDate = (DateAnnotation) statusSpecialDateItr.next();
                Iterator findLF = FSUtil.getAnnotationsIteratorInSpan(jcas,
                    NewlineToken.type, ssid.getEnd(), specialDate.getBegin());
                if (!findLF.hasNext())
                {
                  // if (specialDate.getEnd() <=
                  // drugTokenAnt.getBegin() ){
                  drugTokenAnt.setStartDate(specialDate.getCoveredText());
                  overrideDate = true;
                }
              }

              DrugChangeStatusAnnotation dsa = null;
              if (orderedDrugStatusChanges.hasNext())
              {
                dsa = (DrugChangeStatusAnnotation) orderedDrugStatusChanges.next();
              }
              if (dsa != null
                  && (dsa.getChangeStatus().compareTo(DrugChangeStatusElement.START_STATUS) == 0 ||
                      dsa.getChangeStatus().compareTo(DrugChangeStatusElement.STOP_STATUS) == 0))
              {
                // Should we override here? Let's get only the first
                // one as an override

                drugTokenAnt.setDrugChangeStatus(dsa.getChangeStatus());
              } else
              {
                statusKey = dm.convertToChangeStatus(ssid.getCoveredText());
                if (ssid.getStatus() == 1)
                {

                  // drugTokenAnt.setCertainty(-1);
                  statusKey = DrugChangeStatusToken.STOP;
                }
                if (statusKey.compareTo(DrugChangeStatusToken.NOCHANGE) == 0)
                {
                  Iterator oneDrugChangeStatus = FSUtil.getAnnotationsIteratorInSpan(jcas,
                      DrugChangeStatusAnnotation.type, ssid.getBegin(), ssid.getEnd() + 1);
                  if (oneDrugChangeStatus.hasNext())
                  {
                    dsa = (DrugChangeStatusAnnotation) oneDrugChangeStatus.next();
                    drugTokenAnt.setDrugChangeStatus(dsa.getChangeStatus());
                    statusKey = dsa.getChangeStatus();
                  }
                }
                drugTokenAnt.setStatus(ssid.getStatus());
                dm.setDrugChangeStatusElement(statusKey, begin, end);

                statusFound = true;
              }
            }
          }

          // Look for special case where status comes before the drug
          // mention
          // A better means to locate the beginning of the chunk is
          // lacking here mainly due
          // to the fact that the sentence annotator cannot be trusted to
          // find the beginning
          // accurately.

          Iterator statusSpecialChangeItr = FSUtil.getAnnotationsIteratorInSpan(jcas, DrugChangeStatusAnnotation.type, begin - 20, drugTokenAnt.getBegin() + 1);
          while (statusSpecialChangeItr.hasNext())
          {
            DrugChangeStatusAnnotation specialDsa = (DrugChangeStatusAnnotation) statusSpecialChangeItr.next();
            if (specialDsa.getEnd() + 1 == drugTokenAnt.getBegin()
                && relatedStatus == null)
            {
              drugTokenAnt.setDrugChangeStatus(specialDsa.getChangeStatus());
              drugTokenAnt.setChangeStatusBegin(specialDsa.getBegin());
              drugTokenAnt.setChangeStatusEnd(specialDsa.getEnd());
              overrideStatus = true;
            }
          }
        }
        // If a strength token is discovered before the next
        // distinguished
        // drug mentions then the remaining sentence is scanned for
        // DrugChangeStatus.
        // Iterator strengthAllItr = FSUtil.getAnnotationsIteratorInSpan(
        // jcas, StrengthAnnotation.type, begin, end + 1);
        //
        // List holdStrength = new ArrayList();
        // while (strengthAllItr.hasNext()) {
        // StrengthAnnotation sa = (StrengthAnnotation) strengthAllItr
        // .next();
        // holdStrength.add(sa);
        // }
        String strengthText = null;
        boolean onlyNeedOneStrength = false;
        if (!keepNoChangeStatus || (drugTokenAnt.getStrength() == null)) {
          List holdStrength = getAnnotationsInSpan(jcas, StrengthAnnotation.type,
              begin, end + 1);

          Iterator strengthItr = findUniqueMentions(holdStrength.toArray()).iterator();

          double strengthValue = 0;


          int holdStrengthBeginOffset = 0, holdStrengthEndOffset = 0;


          while (strengthItr.hasNext() && !onlyNeedOneStrength)
          {
            StrengthAnnotation sa = (StrengthAnnotation) strengthItr.next();

            if (holdStrengthBeginOffset != sa.getBegin()
                && holdStrengthEndOffset != sa.getEnd()
                && (relatedStatus != null))
            {

              double curStrengthValue = 0;

              int hyphenLocation = sa.getCoveredText().indexOf("-");
              String holdStrengthValue = sa.getCoveredText();

              if (hyphenLocation > 0)
              {
                holdStrengthValue = holdStrengthValue.substring(0, hyphenLocation);
              }

              int spaceLocation = holdStrengthValue.indexOf(" ");

              if (spaceLocation > 0)
              {
                holdStrengthValue = holdStrengthValue.substring(0, spaceLocation);
              }

              if (holdStrengthValue != null
                  && holdStrengthValue.compareTo("") != 0)
                curStrengthValue = new Double(dm.parseDoubleValue(holdStrengthValue)).doubleValue();
              boolean findLowValue = true;

              if (relatedStatus[0].compareTo(DrugChangeStatusToken.INCREASE) == 0)
              {
                if (curStrengthValue > strengthValue)
                {
                  strengthValue = curStrengthValue;
                  strengthText = dm.getStrengthElement();
                }
              } else if (relatedStatus[0].compareTo(DrugChangeStatusToken.DECREASE) == 0)
              {
                if (findLowValue)
                  strengthValue = curStrengthValue;
                if (curStrengthValue <= strengthValue)
                {
                  strengthValue = curStrengthValue;
                  strengthText = dm.getStrengthElement();
                }
                findLowValue = false;

              } else if (relatedStatus[0].compareTo(DrugChangeStatusToken.SUM) == 0)
              {

                strengthValue = curStrengthValue;
                strengthText = dm.getStrengthElement();
                // get first value found
              }
            } else
            {
              strengthText = dm.getStrengthElement();
              if (!maxExists)
                onlyNeedOneStrength = true;
              else if (maxOffsetEnd + 1 == sa.getBegin())
              {
                onlyNeedOneStrength = true;
                strengthText = sa.getCoveredText();
              }
            }

            holdStrengthBeginOffset = sa.getBegin();
            holdStrengthEndOffset = sa.getEnd();

          }
        }
        String doseText = null;
        if (!keepNoChangeStatus || (drugTokenAnt.getDosage() == null)) {
          Iterator dosageItr = FSUtil.getAnnotationsIteratorInSpan(jcas,
              DosagesAnnotation.type, begin, end + 1);
          List holdDosages = new ArrayList();
          double doseValue = 0;

          int holdDoseBeginOffset = 0, holdDoseEndOffset = 0;
          boolean onlyNeedOneDose = false;

          while (dosageItr.hasNext() && !onlyNeedOneDose)
          {
            DosagesAnnotation da = (DosagesAnnotation) dosageItr.next();
            if (holdDoseBeginOffset != da.getBegin()
                && holdDoseEndOffset != da.getEnd() && relatedStatus != null)
            {
              int removeComma = da.getCoveredText().indexOf(',');
              String doseTextCheck = da.getCoveredText();
              if (removeComma > 0)
              {
                doseTextCheck = doseTextCheck.substring(0, removeComma);
              }
              double curDoseValue = new Double(dm.convertFromTextToNum(doseTextCheck)).doubleValue();
              boolean findLowValue = true;
              if (relatedStatus[0].compareTo(DrugChangeStatusToken.INCREASE) == 0)
              {
                if (curDoseValue > doseValue)
                {
                  doseValue = curDoseValue;
                  doseText = dm.getDosageElement();
                } else if (relatedStatus[0].compareTo(DrugChangeStatusToken.SUM) == 0)
                {

                  doseValue = curDoseValue;
                  doseText = dm.getDosageElement();

                }
              } else if (relatedStatus[0].compareTo(DrugChangeStatusToken.DECREASE) == 0)
              {
                if (findLowValue)
                  doseValue = curDoseValue;
                if (curDoseValue <= doseValue)
                {
                  doseValue = curDoseValue;
                  doseText = dm.getDosageElement();
                }
                findLowValue = false;
              }
              holdDosages.add(da);
              holdDoseBeginOffset = da.getBegin();
              holdDoseEndOffset = da.getEnd();
            } else
            {
              doseText = dm.getDosageElement();

              if (!maxExists)
                onlyNeedOneDose = true;
            }
          }
        }
        String frequencyText = null;
        if (!keepNoChangeStatus || (drugTokenAnt.getFrequency() == null)) {
          Iterator freqItr = FSUtil.getAnnotationsIteratorInSpan(jcas,
              FrequencyAnnotation.type, begin, end + 1);

          List holdFreqItr = new ArrayList();
          while (freqItr.hasNext())
          {
            holdFreqItr.add(freqItr.next());
          }
          Iterator frequencyItr = sortAnnotations(holdFreqItr.toArray()).iterator();

          List holdFrequency = new ArrayList();
          double frequencyValue = 0;

          int holdFrequencyBeginOffset = 0, holdFrequencyEndOffset = 0;
          boolean onlyNeedOneFrequency = false;

          while (frequencyItr.hasNext() && !onlyNeedOneFrequency)
          {
            FrequencyAnnotation fa = (FrequencyAnnotation) frequencyItr.next();

            if (dm.frequency != null
                && dm.frequency.getFrequencyMention() == null)
            {
              double curFrequencyValue = new Double(dm.convertFromTextToNum(fa.getCoveredText())).doubleValue();
              String curFreqValueText = new Double(curFrequencyValue).toString();
              dm.setFrequencyElement(curFreqValueText, fa.getBegin(), fa.getEnd());
              frequencyText = curFreqValueText;
            }
            onlyNeedOneFrequency = true;

            holdFrequency.add(fa);
            holdFrequencyBeginOffset = fa.getBegin();
            holdFrequencyEndOffset = fa.getEnd();
          }
        }
        boolean foundPRN = false;
        String frequencyUnitText = null;
        if (!keepNoChangeStatus || (drugTokenAnt.getFrequencyUnit() == null)) {
          Iterator frequencyUnitItr = FSUtil.getAnnotationsIteratorInSpan(jcas,
              FrequencyUnitAnnotation.type, begin, end + 1);
          List holdFrequencyUnit = new ArrayList();
          double frequencyUnitValue = 0;

          int holdFrequencyUnitBeginOffset = 0, holdFrequencyUnitEndOffset = 0;
          boolean onlyNeedOneFrequencyUnit = false;


          while (frequencyUnitItr.hasNext() && !onlyNeedOneFrequencyUnit)
          {
            FrequencyUnitAnnotation fua = (FrequencyUnitAnnotation) frequencyUnitItr.next();
            if (holdFrequencyUnitBeginOffset != fua.getBegin()
                && holdFrequencyUnitEndOffset != fua.getEnd()
                && relatedStatus != null)
            {
              double curFrequencyUnitValue = new Float(fua.getPeriod()).doubleValue();

              boolean findLowValue = true;
              if (relatedStatus[0].compareTo(DrugChangeStatusToken.INCREASE) == 0)
              {
                if (curFrequencyUnitValue > frequencyUnitValue)
                {
                  frequencyUnitValue = curFrequencyUnitValue;
                  frequencyUnitText = dm.getFrequencyUnitElement();
                }
              } else if (relatedStatus[0] == null
                  || relatedStatus[0].compareTo(DrugChangeStatusToken.DECREASE) == 0)
              {
                if (findLowValue)
                  frequencyUnitValue = curFrequencyUnitValue;
                if (curFrequencyUnitValue <= frequencyUnitValue)
                {
                  frequencyUnitValue = curFrequencyUnitValue;
                  frequencyUnitText = dm.getFrequencyUnitElement();
                }
                findLowValue = false;
              }
            } else
            {
              if (fua.getPeriod() == FrequencyUnitToken.QUANTITY_PRN)
                foundPRN = true;
              else
              {
                frequencyUnitText = dm.getFrequencyUnitElement();

                if (!maxExists)
                {
                  onlyNeedOneStrength = true;
                }

              }
            }

            holdFrequencyUnit.add(fua);
            holdFrequencyUnitBeginOffset = fua.getBegin();
            holdFrequencyUnitEndOffset = fua.getEnd();
          }

        }
        if (recurseNER != null && recurseNER.getDrugChangeStatus() != null
            && relatedStatus[0] != null  && dm.changeStatus == null)
          drugTokenAnt.setDrugChangeStatus(relatedStatus[0]);
        else if (keepNoChangeStatus || (dm.changeStatus != null &&
            (dm.changeStatus.getDrugChangeStatus().equals(DrugChangeStatusToken.INCREASEFROM)
                || dm.changeStatus.getDrugChangeStatus().equals(DrugChangeStatusToken.DECREASEFROM)))) {
          drugTokenAnt.setDrugChangeStatus(DrugChangeStatusToken.NOCHANGE);
        }
        else if (dm.getDrugChangeStatusElement() != null
            && dm.getDrugChangeStatusElement().compareTo("") != 0
            && dm.getDrugChangeStatusElement().compareTo(
                DrugChangeStatusToken.NOCHANGE) != 0
                /*
                 * && drugTokenAnt.getDrugChangeStatus() != null && drugTokenAnt
                 * .getDrugChangeStatus().compareTo(DrugChangeStatusToken .NOCHANGE)
                 * == 0
                 */
                && !overrideStatus)
        {
          // Don't want subsections here

          Iterator negateStatusChanges = FSUtil.getAnnotationsIteratorInSpan(
              jcas, SubSectionAnnotation.type,
              dm.changeStatus.getBeginOffset(),
              dm.changeStatus.getEndOffset() + 2);
          if ((!negateStatusChanges.hasNext() || statusFound) && !keepNoChangeStatus) {
            drugTokenAnt.setDrugChangeStatus(dm.getDrugChangeStatusElement());
            drugTokenAnt.setChangeStatusBegin(dm.getChangeStatusBegin());
            drugTokenAnt.setChangeStatusEnd(dm.getChangeStatusEnd());
          }
          else
            drugTokenAnt.setDrugChangeStatus(DrugChangeStatusToken.NOCHANGE);
        } else if (relatedStatus != null && relatedStatus[0] != null) {
          drugTokenAnt.setDrugChangeStatus(relatedStatus[0]);
View Full Code Here

Examples of org.apache.ctakes.drugner.DrugMention

    int originalEndSpan = endSpan;
    int originalBeginSpan = beginSpan;
    MedicationMention neAnnot = new MedicationMention(jcas, tokenDrugNER.getBegin(),
        tokenDrugNER.getEnd());
    int beginChunk = drugChangeStatus.getEnd();
    DrugMention compareDM = new DrugMention(jcas, beginChunk, endSpan);
    DrugMention priorDM = new DrugMention(jcas, beginSpan, drugChangeStatus.getBegin());
    if ((priorDM.dosage == null) && (priorDM.strength == null) && (priorDM.frequency == null ) )
      noPriorMention = true;
    if ((compareDM.dosage == null) && (compareDM.strength == null) && (compareDM.frequency == null ) )
      noPostMention = true;
    count++;
    if ( !noPriorMention)  {
      if (priorDM.dosage != null) {
        tokenDrugNER.setDosage(priorDM.getDosageElement());
        tokenDrugNER.setDosageBegin(priorDM.getDosageBegin());
        tokenDrugNER.setDosageEnd(priorDM.getDosageEnd());
      }
      if (priorDM.strength != null) {
        tokenDrugNER.setStrength(priorDM.getStrengthElement());
        tokenDrugNER.setStrengthBegin(priorDM.getStrengthBegin());
        tokenDrugNER.setStrengthEnd(priorDM.getStrengthEnd());
        tokenDrugNER.setStrengthUnit(priorDM.getStrengthUnitElement());
        tokenDrugNER.setSuBegin(priorDM.getStrengthUnitBegin());
        tokenDrugNER.setSuEnd(priorDM.getStrengthUnitEnd());
      }
      if (priorDM.frequency != null) {
        tokenDrugNER.setFrequency(priorDM.getFrequencyElement());
        tokenDrugNER.setFrequencyBegin(priorDM.getFrequencyBegin());
        tokenDrugNER.setFrequencyEnd(priorDM.getFrequencyEnd());
      }
    }
    neAnnot.setTypeID(NERTypeIdentifier);
    int [] updatedSpan = {beginSpan, endSpan};

    List<MedicationMention> buildNewNER = new ArrayList<MedicationMention>();

    buildNewNER.add(neAnnot);

    if (drugChangeStatus.getChangeStatus().compareTo(
        DrugChangeStatusToken.DECREASE) == 0)
    {
      int endChunk = 0;
      int startChunk = 0;
      int midChunk = 0;
      if (noPriorMention) {//Look for highest value on right side
        startChunk =  getAdjustedWindowSpan(jcas,  beginChunk, endSpan, false)[0];
        midChunk =  getAdjustedWindowSpan(jcas,  beginChunk, endSpan, true)[0];
        endChunk = getAdjustedWindowSpan(jcas,  beginChunk, endSpan, true)[1];
      }
      updatedSpan[0] = beginChunk;
      String [] changeStatusArray = new String [] {DrugChangeStatusToken.DECREASE, new Integer (drugChangeStatus.getBegin()).toString(), new Integer(drugChangeStatus.getEnd()).toString()};
      generateDrugMentionsAndAnnotations(jcas, buildNewNER, beginChunk,
          midChunk, tokenDrugNER, changeStatusArray, count,
          globalNER);
      if (noPriorMention) {
        compareDM = new DrugMention(jcas, startChunk, endChunk);
        if (compareDM.dosage != null) {
          tokenDrugNER.setDosage(compareDM.getDosageElement());
          tokenDrugNER.setDosageBegin(compareDM.getDosageBegin());
          tokenDrugNER.setDosageEnd(compareDM.getDosageEnd());
        }
        if (compareDM.strength != null) {
          tokenDrugNER.setStrength(compareDM.getStrengthElement());
          tokenDrugNER.setStrengthBegin(compareDM.getStrengthBegin());
          tokenDrugNER.setStrengthEnd(compareDM.getStrengthEnd());
          tokenDrugNER.setStrengthUnit(compareDM.getStrengthUnitElement());
          tokenDrugNER.setSuBegin(compareDM.getStrengthUnitBegin());
          tokenDrugNER.setSuEnd(compareDM.getStrengthUnitEnd());
        }
        if (compareDM.frequency != null) {
          tokenDrugNER.setFrequency(compareDM.getFrequencyElement());
          tokenDrugNER.setFrequencyBegin(compareDM.getFrequencyBegin());
          tokenDrugNER.setFrequencyEnd(compareDM.getFrequencyEnd());
        }
      }
      tokenDrugNER.setDrugChangeStatus(DrugChangeStatusToken.NOCHANGE);
    } else if (drugChangeStatus.getChangeStatus().compareTo(
        DrugChangeStatusToken.DECREASEFROM) == 0)
    {
      if (noPriorMention) {//Look for lowest value on right side
        beginChunk = getAdjustedWindowSpan(jcas,  beginChunk, endSpan, true)[0];
      }
      String [] changeStatusArray = new String [] {DrugChangeStatusToken.DECREASE, new Integer (drugChangeStatus.getBegin()).toString(), new Integer(drugChangeStatus.getEnd()).toString()};
      generateDrugMentionsAndAnnotations(jcas,
          buildNewNER, beginChunk, endSpan,
          tokenDrugNER, changeStatusArray, count, globalNER);
      if (noPriorMention) {
        priorDM = new DrugMention(jcas, originalBeginSpan, beginChunk);
        if (priorDM.dosage != null) {
          tokenDrugNER.setDosage(priorDM.getDosageElement());
          tokenDrugNER.setDosageBegin(priorDM.getDosageBegin());
          tokenDrugNER.setDosageEnd(priorDM.getDosageEnd());
        }
        if (priorDM.strength != null) {
          tokenDrugNER.setStrength(priorDM.getStrengthElement());
          tokenDrugNER.setStrengthBegin(priorDM.getStrengthBegin());
          tokenDrugNER.setStrengthEnd(priorDM.getStrengthEnd());
          tokenDrugNER.setStrengthUnit(compareDM.getStrengthUnitElement());
          tokenDrugNER.setSuBegin(compareDM.getStrengthUnitBegin());
          tokenDrugNER.setSuEnd(compareDM.getStrengthUnitEnd());
        }
        if (priorDM.frequency != null) {
          tokenDrugNER.setFrequency(priorDM.getFrequencyElement());
          tokenDrugNER.setFrequencyBegin(priorDM.getFrequencyBegin());
          tokenDrugNER.setFrequencyEnd(priorDM.getFrequencyEnd());
        }
      }
      tokenDrugNER.setDrugChangeStatus(DrugChangeStatusToken.NOCHANGE);

    } else if (drugChangeStatus.getChangeStatus().compareTo(
        DrugChangeStatusToken.INCREASE) == 0)
    {
      if (noPriorMention) {//Look for highest value on right side
        endSpan =  getAdjustedWindowSpan(jcas,  beginChunk, endSpan, true)[0];
      }
      updatedSpan[0] = beginChunk;
      String [] changeStatusArray = new String [] {DrugChangeStatusToken.INCREASE, new Integer (drugChangeStatus.getBegin()).toString(), new Integer(drugChangeStatus.getEnd()).toString()};
      generateDrugMentionsAndAnnotations(jcas, buildNewNER, beginChunk,
          endSpan, tokenDrugNER, changeStatusArray, count,
          globalNER);
      if (noPriorMention) {
        compareDM = new DrugMention(jcas, endSpan, originalEndSpan);
        if (compareDM.dosage != null) {
          tokenDrugNER.setDosage(compareDM.getDosageElement());
          tokenDrugNER.setDosageBegin(compareDM.getDosageBegin());
          tokenDrugNER.setDosageEnd(compareDM.getDosageEnd());
        }
        if (compareDM.strength != null) {
          tokenDrugNER.setStrength(compareDM.getStrengthElement());
          tokenDrugNER.setStrengthBegin(compareDM.getStrengthBegin());
          tokenDrugNER.setStrengthEnd(compareDM.getStrengthEnd());
          tokenDrugNER.setStrengthUnit(compareDM.getStrengthUnitElement());
          tokenDrugNER.setSuBegin(compareDM.getStrengthUnitBegin());
          tokenDrugNER.setSuEnd(compareDM.getStrengthUnitEnd());
        }
        if (compareDM.frequency != null) {
          tokenDrugNER.setFrequency(compareDM.getFrequencyElement());
          tokenDrugNER.setFrequencyBegin(compareDM.getFrequencyBegin());
          tokenDrugNER.setFrequencyEnd(compareDM.getFrequencyEnd());
        }
      }
      tokenDrugNER.setDrugChangeStatus(DrugChangeStatusToken.OTHER);
    } else if (drugChangeStatus.getChangeStatus().compareTo(
        DrugChangeStatusToken.INCREASEFROM) == 0)
    {
      int startChunk = 0;
      int endChunk = 0;
      int midChunk = 0;
      if (noPriorMention) {//Look for lowest value on right side
        startChunk = getAdjustedWindowSpan(jcas,  beginChunk, endSpan, false)[0];
        midChunk =  getAdjustedWindowSpan(jcas,  beginChunk, endSpan, false)[1];
        endChunk = getAdjustedWindowSpan(jcas,  beginChunk, endSpan, true)[1];
      }
      String [] changeStatusArray = new String [] {DrugChangeStatusToken.INCREASE, new Integer (drugChangeStatus.getBegin()).toString(), new Integer(drugChangeStatus.getEnd()).toString()};
      generateDrugMentionsAndAnnotations(jcas, buildNewNER, startChunk,
          endChunk, tokenDrugNER,
          changeStatusArray, count, globalNER);
      if (noPriorMention) {
        priorDM = new DrugMention(jcas, originalBeginSpan, midChunk);
        if (priorDM.dosage != null) {
          tokenDrugNER.setDosage(priorDM.getDosageElement());
          tokenDrugNER.setDosageBegin(priorDM.getDosageBegin());
          tokenDrugNER.setDosageEnd(priorDM.getDosageEnd());
        }
        if (priorDM.strength != null) {
          tokenDrugNER.setStrength(priorDM.getStrengthElement());
          tokenDrugNER.setStrengthBegin(priorDM.getStrengthBegin());
          tokenDrugNER.setStrengthEnd(priorDM.getStrengthEnd());
          tokenDrugNER.setStrengthUnit(priorDM.getStrengthUnitElement());
          tokenDrugNER.setSuBegin(priorDM.getStrengthUnitBegin());
          tokenDrugNER.setSuEnd(priorDM.getStrengthUnitEnd());
        }
        if (priorDM.frequency != null) {
          tokenDrugNER.setFrequency(priorDM.getFrequencyElement());
          tokenDrugNER.setFrequencyBegin(priorDM.getFrequencyBegin());
          tokenDrugNER.setFrequencyEnd(priorDM.getFrequencyEnd());
        }
      }
      tokenDrugNER.setDrugChangeStatus(DrugChangeStatusToken.NOCHANGE);
    } else if (drugChangeStatus.getChangeStatus().compareTo(
        DrugChangeStatusToken.STOP) == 0)
    {
      tokenDrugNER.setDrugChangeStatus(tokenDrugNER.getDrugChangeStatus());
    } else if ((drugChangeStatus.getChangeStatus().compareTo(
        DrugChangeStatusToken.OTHER) == 0)
        || drugChangeStatus.getChangeStatus().compareTo(
            DrugChangeStatusToken.SUM) == 0)
    {


      double strengthChange = 1;
      double dosageChange = 1;
      double frequencyChange = 1;
      if (noPriorMention) {
        int [] updateSpan =   getAdjustedWindowSpan(jcas,  beginChunk, endSpan, false);
        compareDM = new DrugMention(jcas, endSpan, originalEndSpan);
        if (compareDM.dosage != null) {
          tokenDrugNER.setDosage(compareDM.getDosageElement());
          tokenDrugNER.setDosageBegin(compareDM.getDosageBegin());
          tokenDrugNER.setDosageEnd(compareDM.getDosageEnd());
        }
        if (compareDM.strength != null) {
          tokenDrugNER.setStrength(compareDM.getStrengthElement());
          tokenDrugNER.setStrengthBegin(compareDM.getStrengthBegin());
          tokenDrugNER.setStrengthEnd(compareDM.getStrengthEnd());
          tokenDrugNER.setStrengthUnit(compareDM.getStrengthUnitElement());
          tokenDrugNER.setSuBegin(compareDM.getStrengthUnitBegin());
          tokenDrugNER.setSuEnd(compareDM.getStrengthUnitEnd());
        }
        if (compareDM.frequency != null) {
          tokenDrugNER.setFrequency(compareDM.getFrequencyElement());
          tokenDrugNER.setFrequencyBegin(compareDM.getFrequencyBegin());
          tokenDrugNER.setFrequencyEnd(compareDM.getFrequencyEnd());
        }
      }
      tokenDrugNER.setDrugChangeStatus(DrugChangeStatusToken.OTHER);
      if (compareDM.getStrengthElement() != null
          && compareDM.getStrengthElement().compareTo("") != 0
          && compareDM != null)
      {
        strengthChange = new Double(compareDM.parseDoubleValue(compareDM.getStrengthElement())).doubleValue();

      } else if (priorDM.getStrengthElement() != null
          && priorDM.getStrengthElement().compareTo("") != 0
          && priorDM.getStrengthElement().length() > 0)
      {
        int spacePosition = priorDM.getStrengthElement().indexOf(" ");
        if (spacePosition > 0)
        {
          strengthChange = new Double(priorDM.parseDoubleValue(priorDM.getStrengthElement().substring(0, spacePosition))).doubleValue();

        } else
        {
          strengthChange = new Double(priorDM.parseDoubleValue(priorDM.getStrengthElement())).doubleValue();

        }
      }
      if (compareDM.getDosageElement() != null
          && compareDM.getDosageElement().compareTo("") != 0)
      {
        dosageChange = new Double(compareDM.parseDoubleValue(compareDM.getDosageElement())).doubleValue();
      } else if (priorDM.getDosageElement() != null
          && priorDM.getDosageElement().compareTo("") != 0)
      {
        dosageChange = new Double(priorDM.parseDoubleValue(priorDM.getDosageElement())).doubleValue();
      }
      if (compareDM.getFrequencyElement() != null
          && compareDM.getFrequencyElement().compareTo("") != 0)
      {
        frequencyChange = new Double(compareDM.parseDoubleValue(compareDM.getFrequencyElement())).doubleValue();
      } else if (priorDM.getFrequencyElement() != null
          && priorDM.getFrequencyElement().compareTo("") != 0)
      {
        frequencyChange = new Double(priorDM.parseDoubleValue(priorDM.getFrequencyElement())).doubleValue();
      }

      double strengthBefore = 1;
      double dosageBefore = 1;
      double frequencyBefore = 1;

      if (priorDM.getStrengthElement() != null
          && priorDM.getStrengthElement().compareTo("") != 0
          && priorDM.getStrengthElement().length() > 0)
      {
        strengthBefore = new Double(priorDM.parseDoubleValue(priorDM.getStrengthElement())).doubleValue();
        tokenDrugNER.setStrength(priorDM.getStrengthElement());
        tokenDrugNER.setStrengthBegin(priorDM.getStrengthBegin());
        tokenDrugNER.setStrengthEnd(priorDM.getStrengthEnd());
        tokenDrugNER.setStrengthUnit(priorDM.getStrengthUnitElement());
        tokenDrugNER.setSuBegin(priorDM.getStrengthUnitBegin());
        tokenDrugNER.setSuEnd(priorDM.getStrengthUnitEnd());
      } else if (tokenDrugNER.getStrength() != null
          && tokenDrugNER.getStrength().compareTo("") != 0
          && tokenDrugNER.getStrength().length() > 0)
      {
        boolean handledSeparator = false;
        int hyphPosition = tokenDrugNER.getStrength().indexOf('-');
        String hyphString = tokenDrugNER.getStrength();
        if (hyphPosition > 0)
        {
          hyphString = tokenDrugNER.getStrength().substring(0, hyphPosition);

          strengthBefore = new Double(compareDM.parseDoubleValue(compareDM.convertFromTextToNum(hyphString))).doubleValue();
          handledSeparator = true;
        }
        int spacePosition = hyphString.indexOf(" ");
        if (spacePosition > 0)
        {
          hyphString = hyphString.substring(0, spacePosition);
          strengthBefore = new Double(priorDM.parseDoubleValue(priorDM.convertFromTextToNum(hyphString))).doubleValue();
          handledSeparator = true;
        }
        if (!handledSeparator)
          strengthBefore = new Double(compareDM.parseDoubleValue(tokenDrugNER.getStrength())).doubleValue();
      }
      if (priorDM.getDosageElement() != null
          && priorDM.getDosageElement().compareTo("") != 0
          && priorDM.dosage != null)
      {
        dosageBefore = new Double(priorDM.getDosageElement()).doubleValue();
        tokenDrugNER.setDosage(priorDM.getDosageElement());
        tokenDrugNER.setDosageBegin(priorDM.getDosageBegin());
        tokenDrugNER.setDosageEnd(priorDM.getDosageEnd());
      } else if (tokenDrugNER.getDosage() != null
          && tokenDrugNER.getDosage().compareTo("") != 0)
      {
        dosageBefore = new Double(compareDM.parseDoubleValue(tokenDrugNER.getDosage())).doubleValue();
      }
      if (priorDM.getFrequencyElement() != null
          && priorDM.getFrequencyElement().compareTo("") != 0)
      {
        frequencyBefore = new Double(priorDM.parseDoubleValue(priorDM.getFrequencyElement())).doubleValue();
        tokenDrugNER.setFrequency(priorDM.getFrequencyElement());

      } else if (tokenDrugNER.getFrequency() != null
          && tokenDrugNER.getFrequency().compareTo("") != 0)
      {
        frequencyBefore = new Double(compareDM.parseDoubleValue(tokenDrugNER.getFrequency())).doubleValue();
View Full Code Here

Examples of org.apache.ctakes.drugner.DrugMention

            if (drugTokenAnt.getDrugChangeStatus().equals(DrugChangeStatusToken.OTHER))
              drugTokenAnt.setDrugChangeStatus(DrugChangeStatusToken.NOCHANGE);
          }           
          // No change is default state since the change state has been handled
        }
        DrugMention dm = new DrugMention(jcas, begin, end)
        boolean overrideStatus = false;
        boolean statusFound = false;
        if (!keepNoChangeStatus) {
          // All entries may not be appropriate, so some
          // filtering
          // may need to be implemented here
          JFSIndexRepository indexes = jcas.getJFSIndexRepository();
          Iterator subSectionItr = indexes.getAnnotationIndex(
              SubSectionAnnotation.type).iterator();

          String statusKey = null;
          while (subSectionItr.hasNext() && !statusFound)
          {

            SubSectionAnnotation ssid = (SubSectionAnnotation) subSectionItr.next();

            if (ssid.getSubSectionBodyBegin() <= tokenAnt.getBegin()
                && ssid.getSubSectionBodyEnd() >= tokenAnt.getEnd())
            {

              // Look for special case where date comes before the
              // drug mention
              // A better means to locate the beginning of the chunk
              // is lacking here mainly due
              // to the fact that the sentence annotator cannot be
              // trusted to find the beginning
              // accurately.
              boolean overrideDate = false;
              Iterator statusSpecialDateItr = FSUtil.getAnnotationsIteratorInSpan(jcas, DateAnnotation.type, ssid.getEnd(), drugTokenAnt.getBegin());
              while (statusSpecialDateItr.hasNext() && !overrideDate)
              {
                DateAnnotation specialDate = (DateAnnotation) statusSpecialDateItr.next();
                Iterator findLF = FSUtil.getAnnotationsIteratorInSpan(jcas,
                    NewlineToken.type, ssid.getEnd(), specialDate.getBegin());
                if (!findLF.hasNext())
                {
                  // if (specialDate.getEnd() <=
                  // drugTokenAnt.getBegin() ){
                  drugTokenAnt.setStartDate(specialDate.getCoveredText());
                  overrideDate = true;
                }
              }

              DrugChangeStatusAnnotation dsa = null;
              if (orderedDrugStatusChanges.hasNext())
              {
                dsa = (DrugChangeStatusAnnotation) orderedDrugStatusChanges.next();
              }
              if (dsa != null
                  && (dsa.getChangeStatus().compareTo(DrugChangeStatusElement.START_STATUS) == 0 ||
                      dsa.getChangeStatus().compareTo(DrugChangeStatusElement.STOP_STATUS) == 0))
              {
                // Should we override here? Let's get only the first
                // one as an override

                drugTokenAnt.setDrugChangeStatus(dsa.getChangeStatus());
              } else
              {
                statusKey = dm.convertToChangeStatus(ssid.getCoveredText());
                if (ssid.getStatus() == 1)
                {

                  // drugTokenAnt.setCertainty(-1);
                  statusKey = DrugChangeStatusToken.STOP;
                }
                if (statusKey.compareTo(DrugChangeStatusToken.NOCHANGE) == 0)
                {
                  Iterator oneDrugChangeStatus = FSUtil.getAnnotationsIteratorInSpan(jcas,
                      DrugChangeStatusAnnotation.type, ssid.getBegin(), ssid.getEnd() + 1);
                  if (oneDrugChangeStatus.hasNext())
                  {
                    dsa = (DrugChangeStatusAnnotation) oneDrugChangeStatus.next();
                    drugTokenAnt.setDrugChangeStatus(dsa.getChangeStatus());
                    statusKey = dsa.getChangeStatus();
                  }
                }
                drugTokenAnt.setStatus(ssid.getStatus());
                dm.setDrugChangeStatusElement(statusKey, begin, end);

                statusFound = true;
              }
            }
          }

          // Look for special case where status comes before the drug
          // mention
          // A better means to locate the beginning of the chunk is
          // lacking here mainly due
          // to the fact that the sentence annotator cannot be trusted to
          // find the beginning
          // accurately.

          Iterator statusSpecialChangeItr = FSUtil.getAnnotationsIteratorInSpan(jcas, DrugChangeStatusAnnotation.type, begin - 20, drugTokenAnt.getBegin() + 1);
          while (statusSpecialChangeItr.hasNext())
          {
            DrugChangeStatusAnnotation specialDsa = (DrugChangeStatusAnnotation) statusSpecialChangeItr.next();
            if (specialDsa.getEnd() + 1 == drugTokenAnt.getBegin()
                && relatedStatus == null)
            {
              drugTokenAnt.setDrugChangeStatus(specialDsa.getChangeStatus());
              drugTokenAnt.setChangeStatusBegin(specialDsa.getBegin());
              drugTokenAnt.setChangeStatusEnd(specialDsa.getEnd());
              overrideStatus = true;
            }
          }
        }
        // If a strength token is discovered before the next
        // distinguished
        // drug mentions then the remaining sentence is scanned for
        // DrugChangeStatus.
        // Iterator strengthAllItr = FSUtil.getAnnotationsIteratorInSpan(
        // jcas, StrengthAnnotation.type, begin, end + 1);
        //
        // List holdStrength = new ArrayList();
        // while (strengthAllItr.hasNext()) {
        // StrengthAnnotation sa = (StrengthAnnotation) strengthAllItr
        // .next();
        // holdStrength.add(sa);
        // }
        String strengthText = null;
        boolean onlyNeedOneStrength = false;
        if (!keepNoChangeStatus || (drugTokenAnt.getStrength() == null)) {
          List holdStrength = getAnnotationsInSpan(jcas, StrengthAnnotation.type,
              begin, end + 1);

          Iterator strengthItr = findUniqueMentions(holdStrength.toArray()).iterator();

          double strengthValue = 0;


          int holdStrengthBeginOffset = 0, holdStrengthEndOffset = 0;


          while (strengthItr.hasNext() && !onlyNeedOneStrength)
          {
            StrengthAnnotation sa = (StrengthAnnotation) strengthItr.next();

            if (holdStrengthBeginOffset != sa.getBegin()
                && holdStrengthEndOffset != sa.getEnd()
                && (relatedStatus != null))
            {

              double curStrengthValue = 0;

              int hyphenLocation = sa.getCoveredText().indexOf("-");
              String holdStrengthValue = sa.getCoveredText();

              if (hyphenLocation > 0)
              {
                holdStrengthValue = holdStrengthValue.substring(0, hyphenLocation);
              }

              int spaceLocation = holdStrengthValue.indexOf(" ");

              if (spaceLocation > 0)
              {
                holdStrengthValue = holdStrengthValue.substring(0, spaceLocation);
              }

              if (holdStrengthValue != null
                  && holdStrengthValue.compareTo("") != 0)
                curStrengthValue = new Double(dm.parseDoubleValue(holdStrengthValue)).doubleValue();
              boolean findLowValue = true;

              if (relatedStatus[0].compareTo(DrugChangeStatusToken.INCREASE) == 0)
              {
                if (curStrengthValue > strengthValue)
                {
                  strengthValue = curStrengthValue;
                  strengthText = dm.getStrengthElement();
                }
              } else if (relatedStatus[0].compareTo(DrugChangeStatusToken.DECREASE) == 0)
              {
                if (findLowValue)
                  strengthValue = curStrengthValue;
                if (curStrengthValue <= strengthValue)
                {
                  strengthValue = curStrengthValue;
                  strengthText = dm.getStrengthElement();
                }
                findLowValue = false;

              } else if (relatedStatus[0].compareTo(DrugChangeStatusToken.SUM) == 0)
              {

                strengthValue = curStrengthValue;
                strengthText = dm.getStrengthElement();
                // get first value found
              }
            } else
            {
              strengthText = dm.getStrengthElement();
              if (!maxExists)
                onlyNeedOneStrength = true;
              else if (maxOffsetEnd + 1 == sa.getBegin())
              {
                onlyNeedOneStrength = true;
                strengthText = sa.getCoveredText();
              }
            }

            holdStrengthBeginOffset = sa.getBegin();
            holdStrengthEndOffset = sa.getEnd();

          }
        }
        String doseText = null;
        if (!keepNoChangeStatus || (drugTokenAnt.getDosage() == null)) {
          Iterator dosageItr = FSUtil.getAnnotationsIteratorInSpan(jcas,
              DosagesAnnotation.type, begin, end + 1);
          List holdDosages = new ArrayList();
          double doseValue = 0;

          int holdDoseBeginOffset = 0, holdDoseEndOffset = 0;
          boolean onlyNeedOneDose = false;

          while (dosageItr.hasNext() && !onlyNeedOneDose)
          {
            DosagesAnnotation da = (DosagesAnnotation) dosageItr.next();
            if (holdDoseBeginOffset != da.getBegin()
                && holdDoseEndOffset != da.getEnd() && relatedStatus != null)
            {
              int removeComma = da.getCoveredText().indexOf(',');
              String doseTextCheck = da.getCoveredText();
              if (removeComma > 0)
              {
                doseTextCheck = doseTextCheck.substring(0, removeComma);
              }
              double curDoseValue = new Double(dm.convertFromTextToNum(doseTextCheck)).doubleValue();
              boolean findLowValue = true;
              if (relatedStatus[0].compareTo(DrugChangeStatusToken.INCREASE) == 0)
              {
                if (curDoseValue > doseValue)
                {
                  doseValue = curDoseValue;
                  doseText = dm.getDosageElement();
                } else if (relatedStatus[0].compareTo(DrugChangeStatusToken.SUM) == 0)
                {

                  doseValue = curDoseValue;
                  doseText = dm.getDosageElement();

                }
              } else if (relatedStatus[0].compareTo(DrugChangeStatusToken.DECREASE) == 0)
              {
                if (findLowValue)
                  doseValue = curDoseValue;
                if (curDoseValue <= doseValue)
                {
                  doseValue = curDoseValue;
                  doseText = dm.getDosageElement();
                }
                findLowValue = false;
              }
              holdDosages.add(da);
              holdDoseBeginOffset = da.getBegin();
              holdDoseEndOffset = da.getEnd();
            } else
            {
              doseText = dm.getDosageElement();

              if (!maxExists)
                onlyNeedOneDose = true;
            }
          }
        }
        String frequencyText = null;
        if (!keepNoChangeStatus || (drugTokenAnt.getFrequency() == null)) {
          Iterator freqItr = FSUtil.getAnnotationsIteratorInSpan(jcas,
              FrequencyAnnotation.type, begin, end + 1);

          List holdFreqItr = new ArrayList();
          while (freqItr.hasNext())
          {
            holdFreqItr.add(freqItr.next());
          }
          Iterator frequencyItr = sortAnnotations(holdFreqItr.toArray()).iterator();

          List holdFrequency = new ArrayList();
          double frequencyValue = 0;

          int holdFrequencyBeginOffset = 0, holdFrequencyEndOffset = 0;
          boolean onlyNeedOneFrequency = false;

          while (frequencyItr.hasNext() && !onlyNeedOneFrequency)
          {
            FrequencyAnnotation fa = (FrequencyAnnotation) frequencyItr.next();

            if (dm.frequency != null
                && dm.frequency.getFrequencyMention() == null)
            {
              double curFrequencyValue = new Double(dm.convertFromTextToNum(fa.getCoveredText())).doubleValue();
              String curFreqValueText = new Double(curFrequencyValue).toString();
              dm.setFrequencyElement(curFreqValueText, fa.getBegin(), fa.getEnd());
              frequencyText = curFreqValueText;
            }
            onlyNeedOneFrequency = true;

            holdFrequency.add(fa);
            holdFrequencyBeginOffset = fa.getBegin();
            holdFrequencyEndOffset = fa.getEnd();
          }
        }
        boolean foundPRN = false;
        String frequencyUnitText = null;
        if (!keepNoChangeStatus || (drugTokenAnt.getFrequencyUnit() == null)) {
          Iterator frequencyUnitItr = FSUtil.getAnnotationsIteratorInSpan(jcas,
              FrequencyUnitAnnotation.type, begin, end + 1);
          List holdFrequencyUnit = new ArrayList();
          double frequencyUnitValue = 0;

          int holdFrequencyUnitBeginOffset = 0, holdFrequencyUnitEndOffset = 0;
          boolean onlyNeedOneFrequencyUnit = false;


          while (frequencyUnitItr.hasNext() && !onlyNeedOneFrequencyUnit)
          {
            FrequencyUnitAnnotation fua = (FrequencyUnitAnnotation) frequencyUnitItr.next();
            if (holdFrequencyUnitBeginOffset != fua.getBegin()
                && holdFrequencyUnitEndOffset != fua.getEnd()
                && relatedStatus != null)
            {
              double curFrequencyUnitValue = new Float(fua.getPeriod()).doubleValue();

              boolean findLowValue = true;
              if (relatedStatus[0].compareTo(DrugChangeStatusToken.INCREASE) == 0)
              {
                if (curFrequencyUnitValue > frequencyUnitValue)
                {
                  frequencyUnitValue = curFrequencyUnitValue;
                  frequencyUnitText = dm.getFrequencyUnitElement();
                }
              } else if (relatedStatus[0] == null
                  || relatedStatus[0].compareTo(DrugChangeStatusToken.DECREASE) == 0)
              {
                if (findLowValue)
                  frequencyUnitValue = curFrequencyUnitValue;
                if (curFrequencyUnitValue <= frequencyUnitValue)
                {
                  frequencyUnitValue = curFrequencyUnitValue;
                  frequencyUnitText = dm.getFrequencyUnitElement();
                }
                findLowValue = false;
              }
            } else
            {
              if (fua.getPeriod() == FrequencyUnitToken.QUANTITY_PRN)
                foundPRN = true;
              else
              {
                frequencyUnitText = dm.getFrequencyUnitElement();

                if (!maxExists)
                {
                  onlyNeedOneStrength = true;
                }

              }
            }

            holdFrequencyUnit.add(fua);
            holdFrequencyUnitBeginOffset = fua.getBegin();
            holdFrequencyUnitEndOffset = fua.getEnd();
          }

        }
        if (recurseNER != null && recurseNER.getDrugChangeStatus() != null
            && relatedStatus[0] != null  && dm.changeStatus == null)
          drugTokenAnt.setDrugChangeStatus(relatedStatus[0]);
        else if (keepNoChangeStatus || (dm.changeStatus != null &&
            (dm.changeStatus.getDrugChangeStatus().equals(DrugChangeStatusToken.INCREASEFROM)
                || dm.changeStatus.getDrugChangeStatus().equals(DrugChangeStatusToken.DECREASEFROM)))) {
          drugTokenAnt.setDrugChangeStatus(DrugChangeStatusToken.NOCHANGE);
        }
        else if (dm.getDrugChangeStatusElement() != null
            && dm.getDrugChangeStatusElement().compareTo("") != 0
            && dm.getDrugChangeStatusElement().compareTo(
                DrugChangeStatusToken.NOCHANGE) != 0
                /*
                 * && drugTokenAnt.getDrugChangeStatus() != null && drugTokenAnt
                 * .getDrugChangeStatus().compareTo(DrugChangeStatusToken .NOCHANGE)
                 * == 0
                 */
                && !overrideStatus)
        {
          // Don't want subsections here

          Iterator negateStatusChanges = FSUtil.getAnnotationsIteratorInSpan(
              jcas, SubSectionAnnotation.type,
              dm.changeStatus.getBeginOffset(),
              dm.changeStatus.getEndOffset() + 2);
          if ((!negateStatusChanges.hasNext() || statusFound) && !keepNoChangeStatus) {
            drugTokenAnt.setDrugChangeStatus(dm.getDrugChangeStatusElement());
            drugTokenAnt.setChangeStatusBegin(dm.getChangeStatusBegin());
            drugTokenAnt.setChangeStatusEnd(dm.getChangeStatusEnd());
          }
          else
            drugTokenAnt.setDrugChangeStatus(DrugChangeStatusToken.NOCHANGE);
        } else if (relatedStatus != null && relatedStatus[0] != null) {
          drugTokenAnt.setDrugChangeStatus(relatedStatus[0]);
View Full Code Here

Examples of org.apache.ctakes.drugner.DrugMention

    int originalEndSpan = endSpan;
    int originalBeginSpan = beginSpan;
    MedicationEventMention neAnnot = new MedicationEventMention(jcas, tokenDrugNER.getBegin(),
        tokenDrugNER.getEnd());
    int beginChunk = drugChangeStatus.getEnd();
    DrugMention compareDM = new DrugMention(jcas, beginChunk, endSpan);
    DrugMention priorDM = new DrugMention(jcas, beginSpan, drugChangeStatus.getBegin());
    if ((priorDM.dosage == null) && (priorDM.strength == null) && (priorDM.frequency == null ) )
      noPriorMention = true;
    if ((compareDM.dosage == null) && (compareDM.strength == null) && (compareDM.frequency == null ) )
      noPostMention = true;
    count++;
    if ( !noPriorMention)  {
      if (priorDM.dosage != null) {
        tokenDrugNER.setDosage(priorDM.getDosageElement());
        tokenDrugNER.setDosageBegin(priorDM.getDosageBegin());
        tokenDrugNER.setDosageEnd(priorDM.getDosageEnd());
      }
      if (priorDM.strength != null) {
        tokenDrugNER.setStrength(priorDM.getStrengthElement());
        tokenDrugNER.setStrengthBegin(priorDM.getStrengthBegin());
        tokenDrugNER.setStrengthEnd(priorDM.getStrengthEnd());
        tokenDrugNER.setStrengthUnit(priorDM.getStrengthUnitElement());
        tokenDrugNER.setSuBegin(priorDM.getStrengthUnitBegin());
        tokenDrugNER.setSuEnd(priorDM.getStrengthUnitEnd());
      }
      if (priorDM.frequency != null) {
        tokenDrugNER.setFrequency(priorDM.getFrequencyElement());
        tokenDrugNER.setFrequencyBegin(priorDM.getFrequencyBegin());
        tokenDrugNER.setFrequencyEnd(priorDM.getFrequencyEnd());
      }
    }
    neAnnot.setTypeID(NERTypeIdentifier);
    int [] updatedSpan = {beginSpan, endSpan};

    List<MedicationEventMention> buildNewNER = new ArrayList<MedicationEventMention>();

    buildNewNER.add(neAnnot);

    if (drugChangeStatus.getChangeStatus().compareTo(
        DrugChangeStatusToken.DECREASE) == 0)
    {
      int endChunk = 0;
      int startChunk = 0;
      int midChunk = 0;
      if (noPriorMention) {//Look for highest value on right side
        startChunk =  getAdjustedWindowSpan(jcas,  beginChunk, endSpan, false)[0];
        midChunk =  getAdjustedWindowSpan(jcas,  beginChunk, endSpan, true)[0];
        endChunk = getAdjustedWindowSpan(jcas,  beginChunk, endSpan, true)[1];
      }
      updatedSpan[0] = beginChunk;
      String [] changeStatusArray = new String [] {DrugChangeStatusToken.DECREASE, new Integer (drugChangeStatus.getBegin()).toString(), new Integer(drugChangeStatus.getEnd()).toString()};
      generateDrugMentionsAndAnnotations(jcas, buildNewNER, beginChunk,
          midChunk, tokenDrugNER, changeStatusArray, count,
          globalNER);
      if (noPriorMention) {
        compareDM = new DrugMention(jcas, startChunk, endChunk);
        if (compareDM.dosage != null) {
          tokenDrugNER.setDosage(compareDM.getDosageElement());
          tokenDrugNER.setDosageBegin(compareDM.getDosageBegin());
          tokenDrugNER.setDosageEnd(compareDM.getDosageEnd());
        }
        if (compareDM.strength != null) {
          tokenDrugNER.setStrength(compareDM.getStrengthElement());
          tokenDrugNER.setStrengthBegin(compareDM.getStrengthBegin());
          tokenDrugNER.setStrengthEnd(compareDM.getStrengthEnd());
          tokenDrugNER.setStrengthUnit(compareDM.getStrengthUnitElement());
          tokenDrugNER.setSuBegin(compareDM.getStrengthUnitBegin());
          tokenDrugNER.setSuEnd(compareDM.getStrengthUnitEnd());
        }
        if (compareDM.frequency != null) {
          tokenDrugNER.setFrequency(compareDM.getFrequencyElement());
          tokenDrugNER.setFrequencyBegin(compareDM.getFrequencyBegin());
          tokenDrugNER.setFrequencyEnd(compareDM.getFrequencyEnd());
        }
      }
      tokenDrugNER.setDrugChangeStatus(DrugChangeStatusToken.NOCHANGE);
    } else if (drugChangeStatus.getChangeStatus().compareTo(
        DrugChangeStatusToken.DECREASEFROM) == 0)
    {
      if (noPriorMention) {//Look for lowest value on right side
        beginChunk = getAdjustedWindowSpan(jcas,  beginChunk, endSpan, true)[0];
      }
      String [] changeStatusArray = new String [] {DrugChangeStatusToken.DECREASE, new Integer (drugChangeStatus.getBegin()).toString(), new Integer(drugChangeStatus.getEnd()).toString()};
      generateDrugMentionsAndAnnotations(jcas,
          buildNewNER, beginChunk, endSpan,
          tokenDrugNER, changeStatusArray, count, globalNER);
      if (noPriorMention) {
        priorDM = new DrugMention(jcas, originalBeginSpan, beginChunk);
        if (priorDM.dosage != null) {
          tokenDrugNER.setDosage(priorDM.getDosageElement());
          tokenDrugNER.setDosageBegin(priorDM.getDosageBegin());
          tokenDrugNER.setDosageEnd(priorDM.getDosageEnd());
        }
        if (priorDM.strength != null) {
          tokenDrugNER.setStrength(priorDM.getStrengthElement());
          tokenDrugNER.setStrengthBegin(priorDM.getStrengthBegin());
          tokenDrugNER.setStrengthEnd(priorDM.getStrengthEnd());
          tokenDrugNER.setStrengthUnit(compareDM.getStrengthUnitElement());
          tokenDrugNER.setSuBegin(compareDM.getStrengthUnitBegin());
          tokenDrugNER.setSuEnd(compareDM.getStrengthUnitEnd());
        }
        if (priorDM.frequency != null) {
          tokenDrugNER.setFrequency(priorDM.getFrequencyElement());
          tokenDrugNER.setFrequencyBegin(priorDM.getFrequencyBegin());
          tokenDrugNER.setFrequencyEnd(priorDM.getFrequencyEnd());
        }
      }
      tokenDrugNER.setDrugChangeStatus(DrugChangeStatusToken.NOCHANGE);

    } else if (drugChangeStatus.getChangeStatus().compareTo(
        DrugChangeStatusToken.INCREASE) == 0)
    {
      if (noPriorMention) {//Look for highest value on right side
        endSpan =  getAdjustedWindowSpan(jcas,  beginChunk, endSpan, true)[0];
      }
      updatedSpan[0] = beginChunk;
      String [] changeStatusArray = new String [] {DrugChangeStatusToken.INCREASE, new Integer (drugChangeStatus.getBegin()).toString(), new Integer(drugChangeStatus.getEnd()).toString()};
      generateDrugMentionsAndAnnotations(jcas, buildNewNER, beginChunk,
          endSpan, tokenDrugNER, changeStatusArray, count,
          globalNER);
      if (noPriorMention) {
        compareDM = new DrugMention(jcas, endSpan, originalEndSpan);
        if (compareDM.dosage != null) {
          tokenDrugNER.setDosage(compareDM.getDosageElement());
          tokenDrugNER.setDosageBegin(compareDM.getDosageBegin());
          tokenDrugNER.setDosageEnd(compareDM.getDosageEnd());
        }
        if (compareDM.strength != null) {
          tokenDrugNER.setStrength(compareDM.getStrengthElement());
          tokenDrugNER.setStrengthBegin(compareDM.getStrengthBegin());
          tokenDrugNER.setStrengthEnd(compareDM.getStrengthEnd());
          tokenDrugNER.setStrengthUnit(compareDM.getStrengthUnitElement());
          tokenDrugNER.setSuBegin(compareDM.getStrengthUnitBegin());
          tokenDrugNER.setSuEnd(compareDM.getStrengthUnitEnd());
        }
        if (compareDM.frequency != null) {
          tokenDrugNER.setFrequency(compareDM.getFrequencyElement());
          tokenDrugNER.setFrequencyBegin(compareDM.getFrequencyBegin());
          tokenDrugNER.setFrequencyEnd(compareDM.getFrequencyEnd());
        }
      }
      tokenDrugNER.setDrugChangeStatus(DrugChangeStatusToken.OTHER);
    } else if (drugChangeStatus.getChangeStatus().compareTo(
        DrugChangeStatusToken.INCREASEFROM) == 0)
    {
      int startChunk = 0;
      int endChunk = 0;
      int midChunk = 0;
      if (noPriorMention) {//Look for lowest value on right side
        startChunk = getAdjustedWindowSpan(jcas,  beginChunk, endSpan, false)[0];
        midChunk =  getAdjustedWindowSpan(jcas,  beginChunk, endSpan, false)[1];
        endChunk = getAdjustedWindowSpan(jcas,  beginChunk, endSpan, true)[1];
      }
      String [] changeStatusArray = new String [] {DrugChangeStatusToken.INCREASE, new Integer (drugChangeStatus.getBegin()).toString(), new Integer(drugChangeStatus.getEnd()).toString()};
      generateDrugMentionsAndAnnotations(jcas, buildNewNER, startChunk,
          endChunk, tokenDrugNER,
          changeStatusArray, count, globalNER);
      if (noPriorMention) {
        priorDM = new DrugMention(jcas, originalBeginSpan, midChunk);
        if (priorDM.dosage != null) {
          tokenDrugNER.setDosage(priorDM.getDosageElement());
          tokenDrugNER.setDosageBegin(priorDM.getDosageBegin());
          tokenDrugNER.setDosageEnd(priorDM.getDosageEnd());
        }
        if (priorDM.strength != null) {
          tokenDrugNER.setStrength(priorDM.getStrengthElement());
          tokenDrugNER.setStrengthBegin(priorDM.getStrengthBegin());
          tokenDrugNER.setStrengthEnd(priorDM.getStrengthEnd());
          tokenDrugNER.setStrengthUnit(priorDM.getStrengthUnitElement());
          tokenDrugNER.setSuBegin(priorDM.getStrengthUnitBegin());
          tokenDrugNER.setSuEnd(priorDM.getStrengthUnitEnd());
        }
        if (priorDM.frequency != null) {
          tokenDrugNER.setFrequency(priorDM.getFrequencyElement());
          tokenDrugNER.setFrequencyBegin(priorDM.getFrequencyBegin());
          tokenDrugNER.setFrequencyEnd(priorDM.getFrequencyEnd());
        }
      }
      tokenDrugNER.setDrugChangeStatus(DrugChangeStatusToken.NOCHANGE);
    } else if (drugChangeStatus.getChangeStatus().compareTo(
        DrugChangeStatusToken.STOP) == 0)
    {
      tokenDrugNER.setDrugChangeStatus(tokenDrugNER.getDrugChangeStatus());
    } else if ((drugChangeStatus.getChangeStatus().compareTo(
        DrugChangeStatusToken.OTHER) == 0)
        || drugChangeStatus.getChangeStatus().compareTo(
            DrugChangeStatusToken.SUM) == 0)
    {


      double strengthChange = 1;
      double dosageChange = 1;
      double frequencyChange = 1;
      if (noPriorMention) {
        int [] updateSpan =   getAdjustedWindowSpan(jcas,  beginChunk, endSpan, false);
        compareDM = new DrugMention(jcas, endSpan, originalEndSpan);
        if (compareDM.dosage != null) {
          tokenDrugNER.setDosage(compareDM.getDosageElement());
          tokenDrugNER.setDosageBegin(compareDM.getDosageBegin());
          tokenDrugNER.setDosageEnd(compareDM.getDosageEnd());
        }
        if (compareDM.strength != null) {
          tokenDrugNER.setStrength(compareDM.getStrengthElement());
          tokenDrugNER.setStrengthBegin(compareDM.getStrengthBegin());
          tokenDrugNER.setStrengthEnd(compareDM.getStrengthEnd());
          tokenDrugNER.setStrengthUnit(compareDM.getStrengthUnitElement());
          tokenDrugNER.setSuBegin(compareDM.getStrengthUnitBegin());
          tokenDrugNER.setSuEnd(compareDM.getStrengthUnitEnd());
        }
        if (compareDM.frequency != null) {
          tokenDrugNER.setFrequency(compareDM.getFrequencyElement());
          tokenDrugNER.setFrequencyBegin(compareDM.getFrequencyBegin());
          tokenDrugNER.setFrequencyEnd(compareDM.getFrequencyEnd());
        }
      }
      tokenDrugNER.setDrugChangeStatus(DrugChangeStatusToken.OTHER);
      if (compareDM.getStrengthElement() != null
          && compareDM.getStrengthElement().compareTo("") != 0
          && compareDM != null)
      {
        strengthChange = new Double(compareDM.parseDoubleValue(compareDM.getStrengthElement())).doubleValue();

      } else if (priorDM.getStrengthElement() != null
          && priorDM.getStrengthElement().compareTo("") != 0
          && priorDM.getStrengthElement().length() > 0)
      {
        int spacePosition = priorDM.getStrengthElement().indexOf(" ");
        if (spacePosition > 0)
        {
          strengthChange = new Double(priorDM.parseDoubleValue(priorDM.getStrengthElement().substring(0, spacePosition))).doubleValue();

        } else
        {
          strengthChange = new Double(priorDM.parseDoubleValue(priorDM.getStrengthElement())).doubleValue();

        }
      }
      if (compareDM.getDosageElement() != null
          && compareDM.getDosageElement().compareTo("") != 0)
      {
        dosageChange = new Double(compareDM.parseDoubleValue(compareDM.getDosageElement())).doubleValue();
      } else if (priorDM.getDosageElement() != null
          && priorDM.getDosageElement().compareTo("") != 0)
      {
        dosageChange = new Double(priorDM.parseDoubleValue(priorDM.getDosageElement())).doubleValue();
      }
      if (compareDM.getFrequencyElement() != null
          && compareDM.getFrequencyElement().compareTo("") != 0)
      {
        frequencyChange = new Double(compareDM.parseDoubleValue(compareDM.getFrequencyElement())).doubleValue();
      } else if (priorDM.getFrequencyElement() != null
          && priorDM.getFrequencyElement().compareTo("") != 0)
      {
        frequencyChange = new Double(priorDM.parseDoubleValue(priorDM.getFrequencyElement())).doubleValue();
      }

      double strengthBefore = 1;
      double dosageBefore = 1;
      double frequencyBefore = 1;

      if (priorDM.getStrengthElement() != null
          && priorDM.getStrengthElement().compareTo("") != 0
          && priorDM.getStrengthElement().length() > 0)
      {
        strengthBefore = new Double(priorDM.parseDoubleValue(priorDM.getStrengthElement())).doubleValue();
        tokenDrugNER.setStrength(priorDM.getStrengthElement());
        tokenDrugNER.setStrengthBegin(priorDM.getStrengthBegin());
        tokenDrugNER.setStrengthEnd(priorDM.getStrengthEnd());
        tokenDrugNER.setStrengthUnit(priorDM.getStrengthUnitElement());
        tokenDrugNER.setSuBegin(priorDM.getStrengthUnitBegin());
        tokenDrugNER.setSuEnd(priorDM.getStrengthUnitEnd());
      } else if (tokenDrugNER.getStrength() != null
          && tokenDrugNER.getStrength().compareTo("") != 0
          && tokenDrugNER.getStrength().length() > 0)
      {
        boolean handledSeparator = false;
        int hyphPosition = tokenDrugNER.getStrength().indexOf('-');
        String hyphString = tokenDrugNER.getStrength();
        if (hyphPosition > 0)
        {
          hyphString = tokenDrugNER.getStrength().substring(0, hyphPosition);

          strengthBefore = new Double(compareDM.parseDoubleValue(compareDM.convertFromTextToNum(hyphString))).doubleValue();
          handledSeparator = true;
        }
        int spacePosition = hyphString.indexOf(" ");
        if (spacePosition > 0)
        {
          hyphString = hyphString.substring(0, spacePosition);
          strengthBefore = new Double(priorDM.parseDoubleValue(priorDM.convertFromTextToNum(hyphString))).doubleValue();
          handledSeparator = true;
        }
        if (!handledSeparator)
          strengthBefore = new Double(compareDM.parseDoubleValue(tokenDrugNER.getStrength())).doubleValue();
      }
      if (priorDM.getDosageElement() != null
          && priorDM.getDosageElement().compareTo("") != 0
          && priorDM.dosage != null)
      {
        dosageBefore = new Double(priorDM.getDosageElement()).doubleValue();
        tokenDrugNER.setDosage(priorDM.getDosageElement());
        tokenDrugNER.setDosageBegin(priorDM.getDosageBegin());
        tokenDrugNER.setDosageEnd(priorDM.getDosageEnd());
      } else if (tokenDrugNER.getDosage() != null
          && tokenDrugNER.getDosage().compareTo("") != 0)
      {
        dosageBefore = new Double(compareDM.parseDoubleValue(tokenDrugNER.getDosage())).doubleValue();
      }
      if (priorDM.getFrequencyElement() != null
          && priorDM.getFrequencyElement().compareTo("") != 0)
      {
        frequencyBefore = new Double(priorDM.parseDoubleValue(priorDM.getFrequencyElement())).doubleValue();
        tokenDrugNER.setFrequency(priorDM.getFrequencyElement());

      } else if (tokenDrugNER.getFrequency() != null
          && tokenDrugNER.getFrequency().compareTo("") != 0)
      {
        frequencyBefore = new Double(compareDM.parseDoubleValue(tokenDrugNER.getFrequency())).doubleValue();
View Full Code Here
TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.