public class SideEffectAnnotator
extends JCasAnnotator_ImplBase
Modifier and Type | Class and Description |
---|---|
private class |
SideEffectAnnotator.PotentialSideEffect |
private class |
SideEffectAnnotator.SideEffect |
Modifier and Type | Field and Description |
---|---|
private java.util.List<java.lang.String> |
afterWord |
private java.util.List<java.lang.String> |
causeVerb |
private java.util.List<java.lang.String> |
causeWord1 |
private java.util.List<java.lang.String> |
causeWord2 |
private java.util.List<java.lang.String> |
discontVerb |
private java.util.Map<java.lang.String,java.lang.String> |
keyDrugMap |
private java.util.List<java.lang.String> |
madeVerb |
private java.util.List<java.lang.String> |
noteVerb |
private java.util.Set<java.lang.String> |
setionsToIgnore |
private java.util.Map<java.lang.String,java.util.Set<java.lang.String>> |
sideEffectMap |
private java.util.List<java.lang.String> |
sideEffectWord |
Constructor and Description |
---|
SideEffectAnnotator() |
Modifier and Type | Method and Description |
---|---|
private void |
annotateSideEffects(JCas jcas,
java.util.List<SideEffectAnnotator.SideEffect> seLst)
Add side effect components to CAS
|
private java.util.List<SideEffectAnnotator.PotentialSideEffect> |
getPotentialSideEffects(JCas jcas)
Return List of PotentialSideEffect classes
- get NEs from getSideEffectNEs()
- drug must appear in the same or previous sentence
- but in Allergy section drug must appear in the same sentence
- don't include the sentence in different line
|
private java.lang.String |
getRegexInput(JCas jcas,
SideEffectAnnotator.PotentialSideEffect pse)
Return a string to be used for regular expression pattern matching
Replace a target sign/symptom or disorder/diseas with <@PSE>,
a target drug with <@DRUG>, and the other pse and drug with
|
private java.util.List<IdentifiedAnnotation> |
getSideEffectNEs(JCas jcas)
Return List of NEs (signs/symptoms & diseases/disorders) if they are NOT negated
-- ignore sections in setionsToIgnore
-- only get the longest NE if it contains the shorter
(eg.
|
private java.util.List<SideEffectAnnotator.SideEffect> |
getSideEffectsWithPrioritizedRule(JCas jcas,
java.util.List<SideEffectAnnotator.PotentialSideEffect> pseLst)
Return a list of SideEffect found by rules.
|
private boolean |
hasPatternOfDiscontDrugBecausePse(JCas jcas,
SideEffectAnnotator.PotentialSideEffect pse,
java.lang.String input)
Return true if discontVerb...DRUG+...because|after...PSE+
|
private boolean |
hasPatternOfDrugCausePse(JCas jcas,
SideEffectAnnotator.PotentialSideEffect pse,
java.lang.String input)
Return true if Drug+***causeVerb...Pse+
-- allow other than drug NE between Drug and causeVerb
(eg: Paxil was started for anxiety but caused a rash and was discontinued.)
|
private boolean |
hasPatternOfDrugDiscontBecausePse(JCas jcas,
SideEffectAnnotator.PotentialSideEffect pse,
java.lang.String input)
Return true if DRUG+***discontVerb...because|after...PSE+
|
private boolean |
hasPatternOfDrugDueToPse(JCas jcas,
SideEffectAnnotator.PotentialSideEffect pse,
java.lang.String input)
Return true if drug+...DueToWord...pse+
|
private boolean |
hasPatternOfDrugMadePse(JCas jcas,
SideEffectAnnotator.PotentialSideEffect pse,
java.lang.String input)
Return true if Drug+***madeVerb him/her Pse+
-- allow other than drug NE between Drug and madeVerb
(eg: Paxil was started for anxiety but made him a rash.)
|
private boolean |
hasPatternOfNotePseWithDrug(JCas jcas,
SideEffectAnnotator.PotentialSideEffect pse,
java.lang.String input)
Return true if noteVerb...PSE+...with...Drug+
|
private boolean |
hasPatternOfPseAfterDrug(JCas jcas,
SideEffectAnnotator.PotentialSideEffect pse,
java.lang.String input)
Return true if pse+...after taking/after starting...drug+
but if the pse sentence contains certain word, return false
|
private boolean |
hasPatternOfPseDueToDrug(JCas jcas,
SideEffectAnnotator.PotentialSideEffect pse,
java.lang.String input)
Return true if pse+...DueToWord...drug+
- drug must NOT be negated
- only consecutive drug(s) are permitted for multiple causing drugs
|
private boolean |
hasSideEffectAsPse(JCas jcas,
SideEffectAnnotator.PotentialSideEffect pse,
java.lang.String input)
Return true if pse is sideEffectWord and there is no other pse(s) in the pse.sentence
but if the pse sentence contains certain word, return false
- this is a naive rule
- sideEffectWord must not be negated
|
private boolean |
hasWordOfSideEffect(JCas jcas,
SideEffectAnnotator.PotentialSideEffect pse,
java.lang.String input)
Return true if pse is NOT sideEffectWord and the pse.sentence contains sideEffectWord
- this is a naive rule
- sideEffectWord must not be negated
|
void |
initialize(UimaContext annotCtx) |
private boolean |
isInAllergySection(JCas jcas,
SideEffectAnnotator.PotentialSideEffect pse)
This rule is customized in the local document.
|
private boolean |
isInDictionary(JCas jcas,
SideEffectAnnotator.PotentialSideEffect pse)
Return true if pse belongs to side effects in the side-effect dictionary
|
private boolean |
isInParenthesis(JCas jcas,
SideEffectAnnotator.PotentialSideEffect pse,
java.lang.String input)
This rule is customized in the local document.
|
void |
process(JCas jcas) |
private void |
removeDuplicatedNEs(JCas jcas)
Remove duplicated NEs from Index (same type and offset)
|
private void |
setMap(java.io.File file,
java.util.Map<java.lang.String,java.lang.String> keyMap,
java.util.Map<java.lang.String,java.util.Set<java.lang.String>> seMap)
set keyDrugMap and sideEffectMap
-- skip line starting with "//"
|
private java.util.Map<java.lang.String,java.lang.String> keyDrugMap
private java.util.Map<java.lang.String,java.util.Set<java.lang.String>> sideEffectMap
private java.util.Set<java.lang.String> setionsToIgnore
private java.util.List<java.lang.String> causeVerb
private java.util.List<java.lang.String> causeWord1
private java.util.List<java.lang.String> causeWord2
private java.util.List<java.lang.String> discontVerb
private java.util.List<java.lang.String> sideEffectWord
private java.util.List<java.lang.String> noteVerb
private java.util.List<java.lang.String> madeVerb
private java.util.List<java.lang.String> afterWord
public void initialize(UimaContext annotCtx) throws ResourceInitializationException
ResourceInitializationException
public void process(JCas jcas) throws AnalysisEngineProcessException
AnalysisEngineProcessException
private void removeDuplicatedNEs(JCas jcas)
jcas
- private java.util.List<IdentifiedAnnotation> getSideEffectNEs(JCas jcas)
jcas
- private java.util.List<SideEffectAnnotator.PotentialSideEffect> getPotentialSideEffects(JCas jcas)
jcas
- private java.util.List<SideEffectAnnotator.SideEffect> getSideEffectsWithPrioritizedRule(JCas jcas, java.util.List<SideEffectAnnotator.PotentialSideEffect> pseLst)
jcas
- pseLst
- list of PotentialSideEffect classesprivate void annotateSideEffects(JCas jcas, java.util.List<SideEffectAnnotator.SideEffect> seLst)
jcas
- seLst
- List of SideEffect classes found by the rulesprivate void setMap(java.io.File file, java.util.Map<java.lang.String,java.lang.String> keyMap, java.util.Map<java.lang.String,java.util.Set<java.lang.String>> seMap)
file
- format:genericDrug|brandDrug1, brandDrug2,...|se1, se2,...keyMap
- keyDrugMapseMap
- sideEffectMapprivate boolean hasPatternOfPseDueToDrug(JCas jcas, SideEffectAnnotator.PotentialSideEffect pse, java.lang.String input)
jcas
- pse
- potential side effectinput
- modified SE sentence used for regular expression matchprivate boolean hasPatternOfDrugDueToPse(JCas jcas, SideEffectAnnotator.PotentialSideEffect pse, java.lang.String input)
jcas
- pse
- potential side effectinput
- modified SE sentence used for regular expression matchprivate boolean hasPatternOfDiscontDrugBecausePse(JCas jcas, SideEffectAnnotator.PotentialSideEffect pse, java.lang.String input)
jcas
- pse
- potential side effectinput
- modified SE sentence used for regular expression matchprivate boolean hasPatternOfDrugDiscontBecausePse(JCas jcas, SideEffectAnnotator.PotentialSideEffect pse, java.lang.String input)
jcas
- pse
- potential side effectinput
- modified SE sentence used for regular expression matchprivate boolean hasPatternOfNotePseWithDrug(JCas jcas, SideEffectAnnotator.PotentialSideEffect pse, java.lang.String input)
jcas
- pse
- potential side effectinput
- modified SE sentence used for regular expression matchprivate boolean hasPatternOfDrugCausePse(JCas jcas, SideEffectAnnotator.PotentialSideEffect pse, java.lang.String input)
jcas
- pse
- potential side effectinput
- modified SE sentence used for regular expression matchprivate boolean hasPatternOfDrugMadePse(JCas jcas, SideEffectAnnotator.PotentialSideEffect pse, java.lang.String input)
jcas
- pse
- potential side effectinput
- modified SE sentence used for regular expression matchprivate boolean hasWordOfSideEffect(JCas jcas, SideEffectAnnotator.PotentialSideEffect pse, java.lang.String input)
jcas
- pse
- potential side effectinput
- modified SE sentence used for regular expression matchprivate boolean hasSideEffectAsPse(JCas jcas, SideEffectAnnotator.PotentialSideEffect pse, java.lang.String input)
jcas
- pse
- potential side effectinput
- modified SE sentence used for regular expression matchprivate boolean hasPatternOfPseAfterDrug(JCas jcas, SideEffectAnnotator.PotentialSideEffect pse, java.lang.String input)
jcas
- pse
- potential side effectinput
- modified SE sentence used for regular expression matchprivate boolean isInAllergySection(JCas jcas, SideEffectAnnotator.PotentialSideEffect pse)
jcas
- pse
- potential side effectprivate boolean isInParenthesis(JCas jcas, SideEffectAnnotator.PotentialSideEffect pse, java.lang.String input)
jcas
- pse
- potential side effectinput
- modified SE sentence used for regular expression matchprivate boolean isInDictionary(JCas jcas, SideEffectAnnotator.PotentialSideEffect pse)
jcas
- pse
- potential side effectprivate java.lang.String getRegexInput(JCas jcas, SideEffectAnnotator.PotentialSideEffect pse)
jcas
- pse
- instance of PotentialSideEffect