Wir haben eine Python-Bibliothek namens Drug Named Entity Recognition als Open Source freigegeben, um Medikamentennamen in einer Zeichenfolge zu finden. Beispiel: „Ich habe Phenoxymethylpenicillin gekauft.“ Diese NLP-Aufgabe wird Named Entity Recognition (Medikamentennamen im Text finden) und Named Entity Linking (Medikamente IDs zuordnen) genannt.
Bitte beachten Sie, dass Drug Named Entity Recognition nur Medikamente mit hoher Zuverlässigkeit findet. Es findet auch keine Kurzcodenamen von Medikamenten, wie z. B. in der Medizin häufig verwendete Abkürzungen wie „Ceph“ für „Cephradin“, da diese höchst mehrdeutig sind.
Natural language processing
We have a no-code solution where you can use the library directly from Google Sheets!
You can install the plugin in Google Sheets here.
Drug Named Entity Recognition also only finds the English names of these drugs. Names in the other languages are not supported.
You can install the Python library by typing in the command line:
pip install drug-named-entity-recognition
Der Quellcode befindet sich auf Github und das Projekt auf Pypi .
Wenn Ihr NER-Problem branchenübergreifend ist und wahrscheinlich schon einmal aufgetreten ist, gibt es möglicherweise ein handelsübliches NER-Tool für Ihre Zwecke, wie beispielsweise unsere Python-Bibliothek zur Erkennung von länderspezifischen benannten Entitäten . Die wörterbuchbasierte Erkennung benannter Entitäten ist nicht immer die Lösung, da manchmal die Gesamtmenge der Entitäten offen ist und nicht aufgelistet werden kann (z. B. Personennamen). Daher ist manchmal ein maßgeschneidertes trainiertes NER-Modell die Antwort. Für Aufgaben wie das Suchen von E-Mail-Adressen oder Telefonnummern reichen reguläre Ausdrücke (einfache Regeln) aus.
Wenn Ihr Named-Entity-Erkennungs- oder Named-Entity-Linking-Problem sehr nischenhaft und ungewöhnlich ist und es ein Produkt für dieses Problem gibt, wird dieses Produkt Ihr Problem wahrscheinlich nur zu 80 % lösen und Sie werden mehr Arbeit haben, die letzte Meile zu beheben, als wenn Sie alles manuell erledigt hätten. Bitte kontaktieren Sie Fast Data Science und wir besprechen das gerne mit Ihnen. Wir haben beispielsweise an einem Beratungsauftrag gearbeitet, um Molekülnamen in Artikeln zu finden und Autorennamen Kunden zuzuordnen. Ziel war es, bei einem Pharmaunternehmen bestellte Molekülproben zurückzuverfolgen und festzustellen, wann die Proben zu einer Veröffentlichung führten. Für diesen Fall gab es keine vorgefertigte Bibliothek, die wir verwenden konnten.
Für ein Problem wie die Ermittlung von Ländernamen im Englischen, bei dem es sich um einen geschlossenen Satz mit bekannten Varianten und Aliasnamen handelt, steht normalerweise eine fertige Bibliothek zur Verfügung.
Für die Identifizierung einer Reihe von Molekülen, die von einem bestimmten Unternehmen hergestellt werden, eignet sich diese Art von Aufgabe eher für einen Beratungsauftrag .
In Ihrer Python-Konsole können Sie Folgendes versuchen:
from drug_named_entity_recognition import find_drugs find_drugs("i bought some Phenoxymethylpenicillin".split(" "))
gibt eine Liste von Tupeln aus.
[({'name': 'Phenoxymethylpenicillin', 'synonyms': {'Penicillin', 'Phenoxymethylpenicillin'}, 'nhs_url': 'https://www.nhs.uk/medicines/phenoxymethylpenicillin', 'drugbank_id': 'DB00417'}, 3, 3)]
Sie können die Groß-/Kleinschreibung ignorieren bei:
find_drugs("i bought some phenoxymethylpenicillin".split(" "), is_ignore_case=True)
Die Drug Named Entity Recognition-Bibliothek ist unabhängig von anderen NLP-Tools und weist keine Abhängigkeiten auf. Sie benötigen keine erweiterten Systemanforderungen und das Tool ist leichtgewichtig. Es lässt sich jedoch gut mit anderen Bibliotheken wie spaCy oder dem Natural Language Toolkit (NLTK) kombinieren.
Hier ist ein Beispielaufruf des Tools mit einem spaCy Doc-Objekt:
from drug_named_entity_recognition import find_drugs import spacy nlp = spacy.blank("en") doc = nlp("i routinely rx rimonabant and pts prefer it") find_drugs([t.text for t in doc], is_ignore_case=True)
Ausgänge:
[({'name': 'Rimonabant', 'synonyms': {'Acomplia', 'Rimonabant', 'Zimulti'}, 'mesh_id': 'D063387', 'drugbank_id': 'DB06155'}, 3, 3)]
Sie können das Tool auch zusammen mit dem Natural Language Toolkit (NLTK) verwenden:
from drug_named_entity_recognition import find_drugs from nltk.tokenize import wordpunct_tokenize tokens = wordpunct_tokenize("i routinely rx rimonabant and pts prefer it") find_drugs(tokens, is_ignore_case=True)
Die Hauptdatenquelle ist Drugbank, ergänzt durch Datensätze von NHS, MeSH, Medline Plus und Wikipedia.
Wenn Sie das Wörterbuch aktualisieren möchten, können Sie den Datendump von Drugbank verwenden und die Datei drugbank vocabulary.csv ersetzen:
Laden Sie den Open Data Dump von https://go.drugbank.com/releases/latest#open-data herunter.
Wenn Sie das Wikipedia-Wörterbuch aktualisieren möchten, laden Sie den Dump von Wikimedia herunter und führen Sie aus
python extract_drug_names_and_synonyms_from_wikipedia_dump.py
Wenn Sie das Wörterbuch aktualisieren möchten, führen Sie aus
und Renn
python download_mesh_dump_and_extract_drug_names_and_synonyms.py
Wenn der Link nicht funktioniert, laden Sie den Open Data Dump manuell von https://www.nlm.nih.gov/ herunter. Er sollte etwa desc2023.xml heißen. Und kommentieren Sie die Wget/Curl-Befehle im Code aus.
Soweit gesetzlich möglich, hat die Person, die CC0 mit den DrugBank Open Data verknüpft hat, auf alle Urheberrechte und verwandten oder benachbarten Rechte an den DrugBank Open Data verzichtet. Dieses Werk wird veröffentlicht von: Kanada.
Wenn Sie ein Problem finden, können Sie es gerne unter https://github.com/fastdatascience/drug_named_entity_recognition/issues melden.
Das Tool wurde entwickelt:
MIT-Lizenz. Copyright (c) 2023 Fast Data Science
Wood, TA, Drug Named Entity Recognition [Computersoftware], Version 1.0.3, abgerufen unter https://fastdatascience.com/drug-named-entity-recognition-python-library , Fast Data Science Ltd (2024)
@unpublished{drugnamedentityrecognition, AUTHOR = {Wood, T.A.}, TITLE = {Drug Named Entity Recognition (Computer software), Version 1.0.3}, YEAR = {2024}, Note = {To appear}, url = {https://zenodo.org/doi/10.5281/zenodo.10970631}, doi = {10.5281/zenodo.10970631} }
What we can do for you