とある事情から日本の医薬品名を抜き出してクエリーに投げる必要が出てきた。英語の医薬品名(売れ筋トップ100)は Wiki:List of largest selling pharmaceutical products から取り出せたのだが,今日は日本の医薬品をやってみよう。
日本の今売っている医薬品名を取り出そう。
どこかに構造化されたデータは無いかしら
うーん(。・_・。)どこが良いかしらと,KEGG DRUGとか探してみたのですが,ぱっと見,見つからなかったので厚労省のページに行った。使用薬剤の薬価(薬価基準)に収載されている医薬品について(平成24年1月16日現在)ま,これでよいのではないでしょか。内用薬,注射薬,外用薬,歯科用薬剤に分かれてエクセルファイル化されていると。
こういうのこそ,構造化して(RDFとか他でも)おいたら良いのでしょうな,と思ったけど,私がやればいいのか。ちょっと検討事項に入れておこう。
エクセルの中身
区分 | 薬価基準収載医薬品コード | 成分名 | 規格 | 品名 | メーカー名 |
---|---|---|---|---|---|
内用薬 | 1121001X1042 | ブロモバレリル尿素 | 1g | 局 ブロムワレリル尿素 | 「三恵」 |
内用薬 | 1121001X1050 | ブロモバレリル尿素 | 1g | 局「純生」ブロムワレリル尿素 | 純生薬品工業 |
こんな感じで載っている。Sagaceで調べると品名は少なそうだし,ちょっと正規表現が面倒になりそうだったので,成分名を取り出すことにします。ただ,成分名は重複がありそうだから,一回配列にいれるかなぁ。愚直に成分名の列だけをコピペして,タブ区切りテキスト(oralmedicine.txt)にして保存し直す。
愚直にとりあえず出してみよっかとやったら
File.open("oralmedicine.txt"){|file|
while line = file.gets
p line
end
}
盛大に文字化けしたので,エンコードをみると(nkfはmacに標準装備されていませんが,簡単にエンコードのチェックと変換が出来るので,導入をおすすめします。nkfインストール nkf使い方まとめ
nkf -g oralmedicine.txt
Shift_JIS
rubyのkconvとか使おうとしても上手く行かなかったので,
UTF8にエンコードを変更する。
nkf -w -w80 --overwrite oralmedicine.txt
それでもって,ruby側もエンコード指定をしておく。
参考:コマンドラインオプションで文字コードの指定
# ! ruby -Ku
# ↑なにを隠そう上記の薄い文字がポイントだ。
File.open("oralmedicine.txt"){|file|
while line = file.gets
p line
end
}
ぞろぞろ出てきたぞなもし。
ruby jdruglist.rb | tail -n 3
"ブロモバレリル尿素\rブロモバレリル尿素\rブロモバレリル尿素\rブロモバレリル尿素\rブロモバレリル尿素\rブロモバレリル尿素\rブロモバレリル尿素\rブロモバレリル尿素\rブロモバレリル尿素\rブロモバレリル尿素\rブロモバレリル尿素\r抱水クロラール\r
さて後は配列に入れて,重複を消していきます。
# ! ruby -Ku
File.open("oralmedicine.txt"){|file|
while line = file.gets
lineAry = line.split("\r") #文字列からタブで区切って配列にいれる
end
p lineAry.uniq #重複削除
}
ruby jdruglist.rb
["ブロモバレリル尿素", "抱水クロラール", "エスタゾラム", "塩酸フルラゼパム", "ニトラゼパム", "ニメタゼパム", "ハロキサゾラム", "トリアゾラム", "フルニトラゼパム", "ブロチゾラム", "ロルメタゼパム", "オキサゾラム", "クロキサゾラム", "クロラゼプ酸二カリウム", "ジアゼパム", "プラゼパム", "フルジアゼパム", "ブロマゼパム", "メダゼパム", "ロラゼパム", "アルプラゾラム", "フルタゾラム", "メキサゾラム", "トフィソパム", "フルトプラゼパム", "クロルジアゼポキシド", "ロフラゼプ酸エチル", "クアゼパム", "アモバルビタール", "バルビタール", "フェノバルビタール", "ペントバルビター…
大分綺麗になってきた。
最後にQiitaのMarkdownの出力形式に編集し直し,Sagaceのクエリーにする。
# ! ruby -Ku
print "| Drug Name | Sagace URL |\n|:----------:|:------------:|\n"
File.open("oralmedicine.txt"){|file|
while line = file.gets
lineAry = line.split("\r")
end
lineAry.uniq!
lineAry.each{|elem|
print "|"+elem+"|http://sagace.nibio.go.jp/cgi-bin/sagace/search.cgi?action=search&keyword="+elem+"|\n"
}
}
出来た。ちょっと長くなりすぎて載せられなかったので,別ページ(GithubのWiki)に載せました。