I am trying to use the NLTK library to extract keywords denoting medical symptoms from medical reports of patients. For example, I have a medical report as follows:

s:a 33 year old female crystallographer presents with mild spells of vertigo, mild headaches particularly at the back of the head and in the morning x 2 weeks. pt also reports chronic mild occasional lightheadedness. o:Height 160 cm, Weight 53.8 kg, Temperature 37.3 C, Pulse 76, SystolicBP 146, DiastolicBP 93, Respiration 15, Heart = 2/6 systolic murmur at base of heart, Chest = clear to auscultation B/L, no rales or wheezing, Extremities = no edema or clubbing, Heart = normal S1, S2, RRR a:Hypertension p:performed E/M Level 2 (established patient) - Completed, and prescribed Hydrochlorothiazide - 50 mg po qd, and ordered Cholesterol.

Here, I would like to find all the keywords or bigrams that represent medical symptoms. In the text above, these keywords are 'mild spells of vertigo', 'mild headaches', 'lightheadedness' etc.

For this, I need some kind of collection of terms that represent symptoms, so that I can detect similar terms in the medical reports I have. Is there any NLTK corpus associated with medical terminology? If I find a list of words that denote medical symptoms, I can tokenise and lemmatise the words I have detected in the medical reports and compare them to the words found in the corpus.

Thank you.


Welcome to the biomedical domain, one of the few domains in NLP where there are too many resources to choose from :)

  • Data resources:
    • Medline is a database corpus of 30 millions abstracts.
    • Each Medline abstract is annotated with Mesh descriptors, Mesh being a structured hierarchy of medical concepts.
    • PubMed Central (PMC) is a database of around 6 millions full biomedical articles (not only abstracts).
    • UMLS is a database of millions of medical terms grouped by concept, themselves grouped by semantic type (e.g. disease, gene, etc.)
    • PubTator is a resource which provides all the Medline and PMC documents fully annotated with a combination of Mesh and other ontologies.
  • Software tools:
    • MetaMap is the venerable annotator system which annotates any medical text with UMLS labels.
    • cTakes is another annotator system which is more specialized with clinical texts.
    • SciSpacy is a Spacy variant specialized for biomedical text. It can also annotate medical terms with UMLS labels.

I think that's all the main ones that I know of... so far.

From your description it looks to me like you probably just need cTakes or SciSpacy. In case you're going to start working with Medline or PMC, be aware that these datasets are massive (a few hundreds GBs).


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.