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