日本語の病名を標準病名マスターの標準病名に紐づけるライブラリです。
万病辞書に名寄せすることで紐付けします。
略語辞書による略語の展開にも対応しています。
pip install git+https://github.com/ujiuji1259/disease_normalizer.git
- Exact Match
万病辞書との完全一致で標準病名に紐付けます。 - Fuzzy Match
simstringによる曖昧一致を行います。文字単位の2-gramによるコサイン類似度により類似度を計算します。 - DNorm
古典的な病名正規化手法であるDNormを用いて病名を名寄せします。Tf-idfベースのランキング学習手法です。
from japanese_disease_normalizer.normalizer import Normalizer
normalizer = Normalizer("abbr", "fuzzy")
input_disease = "AML"
normalized_term = normalizer.normalize(input_disease)
spacyのパイプラインに加えることで,固有表現(ここでは病名)に正規化結果のDictEntry
を付与することができます.
日本語モデル(spacy.lang.ja.Japanese
)を元にした病名認識パイプラインを公開していますので,そちらもご利用ください.
import spacy
from japanese_disease_normalizer.spacy_extension import ManbyoNormalizer
nlp = spacy.load("/path/to/model_for_disease_recognition")
nlp.add_pipe("manbyo_normalizer")
text = "急性骨髄性白血病により緊急入院"
doc = nlp(text)
for ent in doc.ents:
print(ent._.norm)
DictEntry(name="急性骨髄性白血病", icd="C920", norm="急性骨髄性白血病", level="S")
>>> normalizer.normalize("高K血症")
DictEntry(name='高カリウム血症', icd='E875', norm='高カリウム血症', level='S')
>>> normalizer.normalize("AML")
DictEntry(name='急性骨髄性白血病特', icd='C920', norm='急性骨髄性白血病', level='C')