[cad161]: / tests / pipelines / ner / disorders / test_all.py

Download this file

132 lines (111 with data), 4.0 kB

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
import pytest
import spacy
from AIDS import results_aids
from alcohol import results_alcohol
from cerebrovascular_accident import results_cerebrovascular_accident
from CKD import results_ckd
from congestive_heart_failure import results_congestive_heart_failure
from connective_tissue_disease import results_connective_tissue_disease
from COPD import results_copd
from dementia import results_dementia
from diabetes import results_diabetes
from hemiplegia import results_hemiplegia
from leukemia import results_leukemia
from liver_disease import results_liver_disease
from lymphoma import results_lymphoma
from myocardial_infarction import results_myocardial_infarction
from peptic_ulcer_disease import results_peptic_ulcer_disease
from peripheral_vascular_disease import results_peripheral_vascular_disease
from solid_tumor import results_solid_tumor, solid_tumor_config
from tobacco import results_tobacco
config = dict(solid_tumor=solid_tumor_config)
results = dict(
aids=results_aids,
ckd=results_ckd,
copd=results_copd,
alcohol=results_alcohol,
cerebrovascular_accident=results_cerebrovascular_accident,
congestive_heart_failure=results_congestive_heart_failure,
connective_tissue_disease=results_connective_tissue_disease,
dementia=results_dementia,
diabetes=results_diabetes,
hemiplegia=results_hemiplegia,
leukemia=results_leukemia,
liver_disease=results_liver_disease,
lymphoma=results_lymphoma,
myocardial_infarction=results_myocardial_infarction,
peptic_ulcer_disease=results_peptic_ulcer_disease,
peripheral_vascular_disease=results_peripheral_vascular_disease,
solid_tumor=results_solid_tumor,
tobacco=results_tobacco,
)
@pytest.fixture
def normalized_nlp(lang):
model = spacy.blank(lang)
model.add_pipe("eds.sentences")
model.add_pipe("eds.normalizer")
return model
class DisorderTester:
def __init__(
self,
disorder,
nlp,
texts,
has_match,
detailled_status,
negation=None,
assign=None,
config=dict(),
):
self.disorder = disorder
self.nlp = nlp
self.texts = texts
self.has_match = has_match
self.detailled_status = (
detailled_status
if isinstance(detailled_status, list)
else len(texts) * [detailled_status]
)
self.assign = assign if assign is not None else len(texts) * [None]
self.negation = negation if negation is not None else len(texts) * [None]
self.nlp.add_pipe(f"eds.{disorder}", config=config)
def check(self):
for text, has_match, detailled_status, assign, negation in zip(
self.texts,
self.has_match,
self.detailled_status,
self.assign,
self.negation,
):
if f"eds.{self.disorder}" in set(["eds.tobacco", "eds.alcohol"]) - set(
self.nlp.pipe_names
):
self.nlp.add_pipe("eds.negation")
doc = self.nlp(text)
ents = doc.spans[self.disorder]
assert len(ents) >= int(has_match)
for ent in ents:
assert ent.label_ == self.disorder
if negation is not None:
assert ent._.negation == negation
if not ents:
continue
ent = ents[0]
assert ent._.detailled_status == detailled_status
if assign is not None:
for key, value in assign.items():
assert repr(value) == repr(assign[key])
@pytest.mark.parametrize(
"disorder",
list(results.keys()),
)
def test_disorder(normalized_nlp, disorder):
result = results[disorder]
config_disorder = config.get(disorder, dict())
expect = DisorderTester(
disorder,
normalized_nlp,
config=config_disorder,
**result,
)
expect.check()