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