private String findFrequencyUnitElement()

in ctakes-drug-ner/src/main/java/org/apache/ctakes/drugner/DrugMention.java [801:1046]


	private String findFrequencyUnitElement(JCas jcas, int beginOffset,
			int endOffset) {

		Iterator<?> firItr = FSUtil.getAnnotationsIteratorInSpan(jcas,
				FrequencyUnitAnnotation.type, beginOffset, endOffset + 1);

		while (firItr.hasNext()) {

			FrequencyUnitAnnotation da = (FrequencyUnitAnnotation) firItr
					.next();
			final float daPeriod = da.getPeriod();
			if (da.getBegin() == beginOffset && daPeriod > holdLargestPeriod) {
				holdLargestPeriod = daPeriod;
				int posHyph = da.getCoveredText().lastIndexOf('-');
				String lastTerm = da.getCoveredText();
				int szString = lastTerm.length();
				if (posHyph > 0) {
					lastTerm = lastTerm.substring(posHyph + 1, szString);
				}

				if (daPeriod == FrequencyUnitToken.QUANTITY_ONE) {

					return FrequencyUnitElement.DAILY;
				} else if (daPeriod == FrequencyUnitToken.QUANTITY_TWO) {

					if (frequency != null
							&& (frequency.getBeginOffset() != beginOffset && frequency
									.getEndOffset() != endOffset)) {
						if ( (dosage == null || convertFromTextToNum(
								dosage.getDosage() ).compareTo(
								"1" ) == 0 && dosage
								.getBeginOffset() != beginOffset && dosage
								.getEndOffset() != endOffset) && changeStatus != null &&
								changeStatus.getDrugChangeStatus().compareTo( DrugChangeStatusToken.OTHER ) != 0 &&
								changeStatus.getDrugChangeStatus().compareTo( DrugChangeStatusToken.DECREASE ) != 0 &&
								changeStatus.getDrugChangeStatus().compareTo( DrugChangeStatusToken.DECREASEFROM ) != 0 &&
								changeStatus.getDrugChangeStatus().compareTo( DrugChangeStatusToken.INCREASE ) != 0 &&
								changeStatus.getDrugChangeStatus().compareTo( DrugChangeStatusToken.INCREASEFROM ) != 0 ) {
							setFrequencyElement(
									frequency.getFrequencyMention(), frequency
											.getBeginOffset(), frequency
											.getEndOffset());
						} else {
							double updateFreq = Double.parseDouble(frequency
									.getFrequencyMention()) * 2.0;
							setFrequencyElement(String.valueOf(updateFreq), beginOffset,
									endOffset);
						}
					} else {

						setFrequencyElement("2.0", beginOffset, endOffset);
					}
					return FrequencyUnitElement.DAILY;
				} else if (daPeriod == FrequencyUnitToken.QUANTITY_THREE) {
					if (frequency != null
							&& (frequency.getBeginOffset() != beginOffset && frequency
									.getEndOffset() != endOffset)) {
						if ( (dosage == null || convertFromTextToNum(
								dosage.getDosage() ).compareTo(
								"1" ) == 0 && dosage
								.getBeginOffset() != beginOffset && dosage
								.getEndOffset() != endOffset) && changeStatus != null &&
								changeStatus.getDrugChangeStatus().compareTo( DrugChangeStatusToken.OTHER ) != 0 &&
								changeStatus.getDrugChangeStatus().compareTo( DrugChangeStatusToken.DECREASE ) != 0 &&
								changeStatus.getDrugChangeStatus().compareTo( DrugChangeStatusToken.DECREASEFROM ) != 0 &&
								changeStatus.getDrugChangeStatus().compareTo( DrugChangeStatusToken.INCREASE ) != 0 &&
								changeStatus.getDrugChangeStatus().compareTo( DrugChangeStatusToken.INCREASEFROM ) != 0 ){
							setFrequencyElement(
									frequency.getFrequencyMention(), frequency
											.getBeginOffset(), frequency
											.getEndOffset());
						} else {
							double updateFreq = Double.parseDouble(frequency
									.getFrequencyMention()) * 3.0;
							setFrequencyElement(String.valueOf(updateFreq), beginOffset,
									endOffset);
						}
					} else {
						setFrequencyElement("3.0", beginOffset, endOffset);
					}
					return FrequencyUnitElement.DAILY;
				} else if (daPeriod == FrequencyUnitToken.QUANTITY_FOUR) {

					if (frequency != null
							&& (frequency.getBeginOffset() != beginOffset && frequency
									.getEndOffset() != endOffset)) {
						if ((dosage == null
								|| (dosage != null
										&& convertFromTextToNum(
												dosage.getDosage()).compareTo(
												"1") == 0 && (dosage
										.getBeginOffset() != beginOffset && dosage
										.getEndOffset() != endOffset))) 
										&& (changeStatus != null  && (changeStatus.getDrugChangeStatus().compareTo(DrugChangeStatusToken.OTHER) != 0)
										&&  (changeStatus.getDrugChangeStatus().compareTo(DrugChangeStatusToken.DECREASE) != 0)
										&& (changeStatus.getDrugChangeStatus().compareTo(DrugChangeStatusToken.DECREASEFROM) != 0)
										&& (changeStatus.getDrugChangeStatus().compareTo(DrugChangeStatusToken.INCREASE) != 0)
										&& (changeStatus.getDrugChangeStatus().compareTo(DrugChangeStatusToken.INCREASEFROM) != 0))) {
							setFrequencyElement(
									frequency.getFrequencyMention(), frequency
											.getBeginOffset(), frequency
											.getEndOffset());
						} else {
							double updateFreq = Double.parseDouble(frequency
									.getFrequencyMention()) * 4.0;
							setFrequencyElement(String.valueOf(updateFreq), beginOffset,
									endOffset);
						}
					} else {
						setFrequencyElement("4.0", beginOffset, endOffset);
					}
					return FrequencyUnitElement.DAILY;
				} else if (daPeriod == FrequencyUnitToken.QUANTITY_FIVE) {
					if (frequency != null
							&& (frequency.getBeginOffset() != beginOffset && frequency
									.getEndOffset() != endOffset)) {
						if ((dosage == null
								|| (dosage != null
										&& convertFromTextToNum(
												dosage.getDosage()).compareTo(
												"1") == 0 && (dosage
										.getBeginOffset() != beginOffset && dosage
										.getEndOffset() != endOffset))) 
										&& (changeStatus != null  && (changeStatus.getDrugChangeStatus().compareTo(DrugChangeStatusToken.OTHER) != 0)
										&&  (changeStatus.getDrugChangeStatus().compareTo(DrugChangeStatusToken.DECREASE) != 0)
										&& (changeStatus.getDrugChangeStatus().compareTo(DrugChangeStatusToken.DECREASEFROM) != 0)
										&& (changeStatus.getDrugChangeStatus().compareTo(DrugChangeStatusToken.INCREASE) != 0)
										&& (changeStatus.getDrugChangeStatus().compareTo(DrugChangeStatusToken.INCREASEFROM) != 0))){
							setFrequencyElement(
									frequency.getFrequencyMention(), frequency
											.getBeginOffset(), frequency
											.getEndOffset());
						} else {
							double updateFreq = Double.parseDouble(frequency
									.getFrequencyMention()) * 5.0;
							setFrequencyElement(String.valueOf(updateFreq), beginOffset,
									endOffset);
						}
					} else {
						setFrequencyElement("5.0", beginOffset, endOffset);
					}
					return FrequencyUnitElement.DAILY;
				} else if (daPeriod == FrequencyUnitToken.QUANTITY_SIX) {
					if (frequency != null
							&& (frequency.getBeginOffset() != beginOffset && frequency
									.getEndOffset() != endOffset)) {
						if ((dosage == null
								|| (dosage != null
										&& convertFromTextToNum(
												dosage.getDosage()).compareTo(
												"1") == 0 && (dosage
										.getBeginOffset() != beginOffset && dosage
										.getEndOffset() != endOffset))) 
										&& (changeStatus != null  && (changeStatus.getDrugChangeStatus().compareTo(DrugChangeStatusToken.OTHER) != 0)
										&&  (changeStatus.getDrugChangeStatus().compareTo(DrugChangeStatusToken.DECREASE) != 0)
										&& (changeStatus.getDrugChangeStatus().compareTo(DrugChangeStatusToken.DECREASEFROM) != 0)
										&& (changeStatus.getDrugChangeStatus().compareTo(DrugChangeStatusToken.INCREASE) != 0)
										&& (changeStatus.getDrugChangeStatus().compareTo(DrugChangeStatusToken.INCREASEFROM) != 0))) {
							setFrequencyElement(
									frequency.getFrequencyMention(), frequency
											.getBeginOffset(), frequency
											.getEndOffset());
						} else {
							double updateFreq = Double.parseDouble(frequency
									.getFrequencyMention()) * 6.0;
							setFrequencyElement(String.valueOf(updateFreq), beginOffset,
									endOffset);
						}
					} else {
						setFrequencyElement("6.0", beginOffset, endOffset);

					}
					return FrequencyUnitElement.DAILY;
				} else if (daPeriod == FrequencyUnitToken.QUANTITY_SEVEN) {
					if (frequency != null
							&& (frequency.getBeginOffset() != beginOffset && frequency
									.getEndOffset() != endOffset)) {
						if ( (dosage == null || convertFromTextToNum(
								dosage.getDosage() ).compareTo(
								"1" ) == 0 && dosage
								.getBeginOffset() != beginOffset && dosage
								.getEndOffset() != endOffset) && changeStatus != null &&
								changeStatus.getDrugChangeStatus().compareTo( DrugChangeStatusToken.OTHER ) != 0 &&
								changeStatus.getDrugChangeStatus().compareTo( DrugChangeStatusToken.DECREASE ) != 0 &&
								changeStatus.getDrugChangeStatus().compareTo( DrugChangeStatusToken.DECREASEFROM ) != 0 &&
								changeStatus.getDrugChangeStatus().compareTo( DrugChangeStatusToken.INCREASE ) != 0 &&
								changeStatus.getDrugChangeStatus().compareTo( DrugChangeStatusToken.INCREASEFROM ) != 0 ){
							setFrequencyElement(
									frequency.getFrequencyMention(), frequency
											.getBeginOffset(), frequency
											.getEndOffset());
						} else {
							double updateFreq = Double.parseDouble(frequency
									.getFrequencyMention()) * 7.0;
							setFrequencyElement(String.valueOf(updateFreq), beginOffset,
									endOffset);
						}
					} else {
						setFrequencyElement("7.0", beginOffset, endOffset);
					}
					return FrequencyUnitElement.DAILY;
				} else if (daPeriod == FrequencyUnitToken.QUANTITY_EIGHT) {
					if (frequency != null
							&& (frequency.getBeginOffset() != beginOffset && frequency
									.getEndOffset() != endOffset)) {
						if ( (dosage == null || convertFromTextToNum(
								dosage.getDosage() ).compareTo(
								"1" ) == 0 && dosage
								.getBeginOffset() != beginOffset && dosage
								.getEndOffset() != endOffset) && changeStatus != null &&
								changeStatus.getDrugChangeStatus().compareTo( DrugChangeStatusToken.OTHER ) != 0 &&
								changeStatus.getDrugChangeStatus().compareTo( DrugChangeStatusToken.DECREASE ) != 0 &&
								changeStatus.getDrugChangeStatus().compareTo( DrugChangeStatusToken.DECREASEFROM ) != 0 &&
								changeStatus.getDrugChangeStatus().compareTo( DrugChangeStatusToken.INCREASE ) != 0 &&
								changeStatus.getDrugChangeStatus().compareTo( DrugChangeStatusToken.INCREASEFROM ) != 0 ) {
							setFrequencyElement(
									frequency.getFrequencyMention(), frequency
											.getBeginOffset(), frequency
											.getEndOffset());
						} else {
							double updateFreq = Double.parseDouble(frequency
									.getFrequencyMention()) * 8.0;
							setFrequencyElement(String.valueOf(updateFreq), beginOffset,
									endOffset);
						}
					} else {
						setFrequencyElement("8.0", beginOffset, endOffset);
					}

					return FrequencyUnitElement.DAILY;
					// TODO double == float direct comparison is bad.
				} else if ( daPeriod == FrequencyUnitToken.QUANTITY_EVERY_OTHER_DAY ) {
					return FrequencyUnitElement.EVERYOTHERDAY;
				} else if (daPeriod == FrequencyUnitToken.QUANTITY_WEEKLY  ) {
					return FrequencyUnitElement.WEEKLY;
				} else if (daPeriod == FrequencyUnitToken.QUANTITY_MONTHLY) {
					return FrequencyUnitElement.MONTHLY;
				} else if (daPeriod == FrequencyUnitToken.QUANTITY_PRN) {
					return FrequencyUnitElement.ASNEEDED;
				}
				return lastTerm;

			}
		}
		return null;
	}