9
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

日本語の疾患名をICD10順に取り出そう。

Last updated at Posted at 2013-07-04

とある事情から日本語の疾患名を抜き出してクエリーに投げる必要が出てきた。先日は医薬品名を取り出したので,今日は疾患名を取り出そう。

##日本語の疾患名をICD10順に取り出そう。

ICD10とは?

要は疾患につけられたIDである。このIDが同一のものは,基本的には同一の疾患と考えられる。(厳密に考えるとそうとも言えない時もあるのだが,便宜上はそう捉えていただいて差し支えない。)もっと正確には,

「疾病及び関連保健問題の国際統計分類:International Statistical Classification of Diseases and Related Health Problems(以下「ICD」と略)」とは、異なる国や地域から、異なる時点で集計された死亡や疾病のデータの体系的な記録、分析、解釈及び比較を行うため、世界保健機関憲章に基づき、世界保健機関(WHO)が作成した分類である。
 最新の分類は、ICDの第10回目の修正版として、1990年の第43回世界保健総会において採択されたものであり、ICD-10(1990)と呼ばれている。

とのことである。参照 「疾病、傷害及び死因の統計分類ー厚生労働省」

###どこかに良さそうなデータが無いかしら。
これに関しては良いデータがある。→ ICD10対応標準病名マスター である。
Thanks to @keyboardrobot!
前時代的なUIとは裏腹に(失礼)結構な頻度(おおよそ3ヶ月に一度)で更新されている。今年度は(6/1,10/1,1/1,3/1)で更新する予定らしい。
さて,ここからファイルをダウンロードして,必要な情報を取り出していこう。

###ダウンロード&解凍
クリックしてダウンロードしても良いし,
wgetかcurlで

$ wget http://www2.medis.or.jp/stdcd/byomei/download/file/byomei309.zip .
$ unzip byomei309.zip

のようにダウンロードしても良い。ただ,このbyomei309の309は,バージョンを示しているので,結局ブラウザ上でバージョンを確かめなければならないのが微妙に面倒だが,まあ良いのである。

###エンコードをShift JISからUTF-8に変更

そのままプログラムを走らせると,盛大に文字化けするので,エンコードをみると(nkfはmacに標準装備されていませんが,簡単にエンコードのチェックと変換が出来るので,導入をおすすめします。nkfインストール nkf使い方まとめ ( 再掲m(__)m )

nkf -w -w80 --overwrite byomei309/main/nmain309.txt 

###必要な列を選択して,ソート。Markdown仕様に整形,Sagace用にクエリーを投げる。

ruby側もエンコード指定をしておく。
参考:コマンドラインオプションで文字コードの指定

#! ruby -Ku
#↑なにを隠そう上記の薄い文字がポイントだ。
#!/usr/local/bin/ruby
ICD10Ary = Array.new
ICD10qAry = Array.new
File.open("byomei309/main/nmain309.txt"){|file| #ICD10とその時の疾患名を取得
        while line = file.gets
        lineAry = line.split(",")
        ICD10Ary << [lineAry[6].gsub("\"",""),lineAry[2].gsub("\"","")]#欲しいデータだけを配列入れこむ。lineAry[6]はICD10のIDで,lineAry[2]は疾患名である。
        end
}
ICD10Ary.sort.each{|elem|
        if elem[0] != "" then #ICD10が無いものは抜かす。ソートしてクエリ用の配列に入れる。
                ICD10qAry <<  elem
        end
}

i = 0
print "| ICD-10 | Disease Name | Sagace URL |\n|:----------:|:------------:|:------------:|\n"
while i < ICD10Ary.length do
print "|" + ICD10qAry[i][0] + "|" + ICD10qAry[i][1] + "|http://sagace.nibio.go.jp/cgi-bin/sagace/search.cgi?action=search&keyword="+ ICD10qAry[i][1] + "|\n"
i += 1
end #while

最後の方がずさんな説明になっていて申し訳ないのですが,これで比較的簡単に必要なデータを取り出すことができます。
うむ,ほとんど自分用メモになってしまった(^_^;)。疾患をIDで示すと何が嬉しいの?って話はまた後ですることにして,とりあえず,これで目的は達成出来ます。
実行結果は長くなりすぎて載せられなかったので,別ページ(GithubのWiki)に載せました。

9
9
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?