Description
This model maps entities extracted from text to their corresponding SNOMED CT concept codes.
It performs a direct lookup against the training dictionary, providing fast, exact-match code mapping.
It is trained on SNOMED CT US Edition 20260901 release.
Live Demo Open in Colab Copy S3 URI
How to use
documentAssembler = DocumentAssembler()\
.setInputCol("text")\
.setOutputCol("document")
sentenceDetectorDL = SentenceDetectorDLModel.pretrained("sentence_detector_dl_healthcare", "en", "clinical/models")\
.setInputCols(["document"])\
.setOutputCol("sentence")
tokenizer = Tokenizer()\
.setInputCols(["sentence"])\
.setOutputCol("token")
word_embeddings = WordEmbeddingsModel.pretrained("embeddings_clinical","en","clinical/models")\
.setInputCols(["sentence","token"])\
.setOutputCol("word_embeddings")
ner_model = MedicalNerModel.pretrained("ner_jsl","en","clinical/models")\
.setInputCols(["sentence","token","word_embeddings"])\
.setOutputCol("ner_tags")
ner_converter = NerConverterInternal()\
.setInputCols(["sentence","token","ner_tags"])\
.setOutputCol("ner_chunk")\
.setWhiteList(["Injury_or_Poisoning", "Hyperlipidemia", "Kidney_Disease", "Oncological", "Cerebrovascular_Disease", "Oxygen_Therapy", "Heart_Disease", "Obesity", "Disease_Syndrome_Disorder", "Symptom", "Treatment", "Diabetes", "Procedure", "Drug_Ingredient", "VS_Finding", "Communicable_Disease", "Drug_BrandName", "Hypertension", "Imaging_Technique"])
mapper = ChunkMapperModel.pretrained("snomed_mapper_20260901", "en", "clinical/models")\
.setInputCols(["ner_chunk"])\
.setOutputCol("mappings")\
.setRels(["snomed_code"])
pipeline = Pipeline(stages=[\
documentAssembler, sentenceDetectorDL, tokenizer, word_embeddings,\
ner_model, ner_converter, mapper\
])
data = spark.createDataFrame([["The patient underwent an appendectomy for acute appendicitis and was diagnosed with type 2 diabetes mellitus. She reported hemolysis and chest pain on recent labs, was noted to have coronary artery disease, and was started on aspirin."]]).toDF("text")
result = pipeline.fit(data).transform(data)
documentAssembler = nlp.DocumentAssembler()\
.setInputCol("text")\
.setOutputCol("document")
sentenceDetectorDL = nlp.SentenceDetectorDLModel.pretrained("sentence_detector_dl_healthcare", "en", "clinical/models")\
.setInputCols(["document"])\
.setOutputCol("sentence")
tokenizer = nlp.Tokenizer()\
.setInputCols(["sentence"])\
.setOutputCol("token")
word_embeddings = nlp.WordEmbeddingsModel.pretrained("embeddings_clinical","en","clinical/models")\
.setInputCols(["sentence","token"])\
.setOutputCol("word_embeddings")
ner_model = medical.NerModel.pretrained("ner_jsl","en","clinical/models")\
.setInputCols(["sentence","token","word_embeddings"])\
.setOutputCol("ner_tags")
ner_converter = medical.NerConverterInternal()\
.setInputCols(["sentence","token","ner_tags"])\
.setOutputCol("ner_chunk")\
.setWhiteList(["Injury_or_Poisoning", "Hyperlipidemia", "Kidney_Disease", "Oncological", "Cerebrovascular_Disease", "Oxygen_Therapy", "Heart_Disease", "Obesity", "Disease_Syndrome_Disorder", "Symptom", "Treatment", "Diabetes", "Procedure", "Drug_Ingredient", "VS_Finding", "Communicable_Disease", "Drug_BrandName", "Hypertension", "Imaging_Technique"])
mapper = medical.ChunkMapperModel.pretrained("snomed_mapper_20260901", "en", "clinical/models")\
.setInputCols(["ner_chunk"])\
.setOutputCol("mappings")\
.setRels(["snomed_code"])
pipeline = nlp.Pipeline(stages=[\
documentAssembler, sentenceDetectorDL, tokenizer, word_embeddings,\
ner_model, ner_converter, mapper\
])
data = spark.createDataFrame([["The patient underwent an appendectomy for acute appendicitis and was diagnosed with type 2 diabetes mellitus. She reported hemolysis and chest pain on recent labs, was noted to have coronary artery disease, and was started on aspirin."]]).toDF("text")
result = pipeline.fit(data).transform(data)
val documentAssembler = new DocumentAssembler()
.setInputCol("text")
.setOutputCol("document")
val sentenceDetectorDL = SentenceDetectorDLModel
.pretrained("sentence_detector_dl_healthcare", "en", "clinical/models")
.setInputCols(Array("document"))
.setOutputCol("sentence")
val tokenizer = new Tokenizer()
.setInputCols("sentence")
.setOutputCol("token")
val word_embeddings = WordEmbeddingsModel
.pretrained("embeddings_clinical", "en", "clinical/models")
.setInputCols(Array("sentence", "token"))
.setOutputCol("word_embeddings")
val ner_model = MedicalNerModel
.pretrained("ner_jsl", "en", "clinical/models")
.setInputCols(Array("sentence", "token", "word_embeddings"))
.setOutputCol("ner_tags")
val ner_converter = new NerConverterInternal()
.setInputCols(Array("sentence", "token", "ner_tags"))
.setOutputCol("ner_chunk")
.setWhiteList(Array("Injury_or_Poisoning", "Hyperlipidemia", "Kidney_Disease", "Oncological", "Cerebrovascular_Disease", "Oxygen_Therapy", "Heart_Disease", "Obesity", "Disease_Syndrome_Disorder", "Symptom", "Treatment", "Diabetes", "Procedure", "Drug_Ingredient", "VS_Finding", "Communicable_Disease", "Drug_BrandName", "Hypertension", "Imaging_Technique"))
val mapper = ChunkMapperModel.pretrained("snomed_mapper_20260901", "en", "clinical/models")
.setInputCols(Array("ner_chunk"))
.setOutputCol("mappings")
.setRels(Array("snomed_code"))
val pipeline = new Pipeline().setStages(Array(
documentAssembler, sentenceDetectorDL, tokenizer, word_embeddings,
ner_model, ner_converter, mapper
))
val data = Seq("The patient underwent an appendectomy for acute appendicitis and was diagnosed with type 2 diabetes mellitus. She reported hemolysis and chest pain on recent labs, was noted to have coronary artery disease, and was started on aspirin.").toDF("text")
val result = pipeline.fit(data).transform(data)
Results
| ner_chunk | snomed_code | all_k_resolutions |
|:-------------------------|--------------:|:---------------------------------|
| appendectomy | 80146002 | 80146002::: |
| appendicitis | 74400008 | 74400008::: |
| type 2 diabetes mellitus | 44054006 | 44054006::: |
| hemolysis | 260882000 | 260882000:::404227002:::73320003 |
| chest pain | 29857009 | 29857009::: |
| coronary artery disease | 53741008 | 53741008::: |
| aspirin | 387458008 | 387458008::: |
Model Information
| Model Name: | snomed_mapper_20260901 |
| Compatibility: | Healthcare NLP 6.4.1+ |
| License: | Licensed |
| Edition: | Official |
| Input Labels: | [ner_chunk] |
| Output Labels: | [mappings] |
| Language: | en |
| Size: | 20.2 MB |