Description
This model maps drug entities to their corresponding RxNorm codes. It provides fast and accurate drug code mapping without requiring embeddings.
Predicted Entities
RxNorm Codes
How to use
document_assembler = DocumentAssembler()\
.setInputCol("text")\
.setOutputCol("document")
sentence_detector = SentenceDetector()\
.setInputCols(["document"])\
.setOutputCol("sentence")
tokenizer = Tokenizer()\
.setInputCols("sentence")\
.setOutputCol("token")
word_embeddings = WordEmbeddingsModel.pretrained("embeddings_clinical", "en", "clinical/models")\
.setInputCols(["sentence", "token"])\
.setOutputCol("embeddings")
ner_posology = MedicalNerModel.pretrained("ner_posology_greedy", "en", "clinical/models")\
.setInputCols(["sentence", "token", "embeddings"])\
.setOutputCol("posology_ner")
ner_posology_converter = NerConverterInternal()\
.setInputCols("sentence", "token", "posology_ner")\
.setOutputCol("ner_chunk")\
.setWhiteList(["DRUG"])
rxnorm_mapper = ChunkMapperModel.pretrained("rxnorm_mapper", "en", "clinical/models")\
.setInputCols(["ner_chunk"])\
.setOutputCol("mappings")\
.setRels(["rxnorm_code"])
pipeline = Pipeline().setStages([
document_assembler,
sentence_detector,
tokenizer,
word_embeddings,
ner_posology,
ner_posology_converter,
rxnorm_mapper
])
text = """The patient reported persistent musculoskeletal discomfort, for which ibuprofen topical cream was initiated. Due to concurrent scalp irritation, selenium sulfide 25 mg/ml was also prescribed, and salicylamide 250 mg was added for additional symptomatic relief."""
data = spark.createDataFrame([[text]]).toDF("text")
result = pipeline.fit(data).transform(data)
document_assembler = nlp.DocumentAssembler()\
.setInputCol("text")\
.setOutputCol("document")
sentence_detector = nlp.SentenceDetector()\
.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("embeddings")
ner_posology = medical.NerModel.pretrained("ner_posology_greedy", "en", "clinical/models")\
.setInputCols(["sentence", "token", "embeddings"])\
.setOutputCol("posology_ner")
ner_posology_converter = medical.NerConverter()\
.setInputCols("sentence", "token", "posology_ner")\
.setOutputCol("ner_chunk")\
.setWhiteList(["DRUG"])
rxnorm_mapper = medical.ChunkMapperModel.pretrained("rxnorm_mapper", "en", "clinical/models")\
.setInputCols(["ner_chunk"])\
.setOutputCol("mappings")\
.setRels(["rxnorm_code"])
pipeline = nlp.Pipeline().setStages([
document_assembler,
sentence_detector,
tokenizer,
word_embeddings,
ner_posology,
ner_posology_converter,
rxnorm_mapper
])
text = """The patient reported persistent musculoskeletal discomfort, for which ibuprofen topical cream was initiated. Due to concurrent scalp irritation, selenium sulfide 25 mg/ml was also prescribed, and salicylamide 250 mg was added for additional symptomatic relief."""
data = spark.createDataFrame([[text]]).toDF("text")
result = pipeline.fit(data).transform(data)
val documentAssembler = new DocumentAssembler()
.setInputCol("text")
.setOutputCol("document")
val sentenceDetector = new SentenceDetector()
.setInputCols(Array("document"))
.setOutputCol("sentence")
val tokenizer = new Tokenizer()
.setInputCols(Array("sentence"))
.setOutputCol("token")
val wordEmbeddings = WordEmbeddingsModel.pretrained("embeddings_clinical", "en", "clinical/models")
.setInputCols(Array("sentence", "token"))
.setOutputCol("embeddings")
val nerPosology = MedicalNerModel.pretrained("ner_posology_greedy", "en", "clinical/models")
.setInputCols(Array("sentence", "token", "embeddings"))
.setOutputCol("posology_ner")
val nerPosologyConverter = new NerConverterInternal()
.setInputCols(Array("sentence", "token", "posology_ner"))
.setOutputCol("ner_chunk")
.setWhiteList(Array("DRUG"))
val rxnormMapper = ChunkMapperModel.pretrained("rxnorm_mapper", "en", "clinical/models")
.setInputCols(Array("ner_chunk"))
.setOutputCol("mappings")
.setRels(Array("rxnorm_code"))
val pipeline = new Pipeline().setStages(Array(
documentAssembler,
sentenceDetector,
tokenizer,
wordEmbeddings,
nerPosology,
nerPosologyConverter,
rxnormMapper
))
val data = Seq("""The patient reported persistent musculoskeletal discomfort, for which ibuprofen topical cream was initiated. Due to concurrent scalp irritation, selenium sulfide 25 mg/ml was also prescribed, and salicylamide 250 mg was added for additional symptomatic relief.""").toDF("text")
val result = pipeline.fit(data).transform(data)
Results
|ner_chunk |mapping_result|
|-------------------------|--------------|
|ibuprofen topical cream |377732 |
|selenium sulfide 25 mg/ml|328880 |
|salicylamide 250 mg |316651 |
Model Information
| Model Name: | rxnorm_mapper |
| Compatibility: | Healthcare NLP 6.2.0+ |
| License: | Licensed |
| Edition: | Official |
| Input Labels: | [ner_chunk] |
| Output Labels: | [mappings] |
| Language: | en |
| Size: | 10.4 MB |